好的,我将根据您的要求,将原先使用球面高斯(SG)表示环境光的部分替换为集成方向编码(Integrated Directional Encoding,IDE)。这主要影响到光初始化和渲染过程相关的步骤。以下是修改后的全流程总结,包含具体实现过程和关键公式,以及如何在流程中集成您提供的IDE函数。
全流程总结(使用IDE表示环境光)
1. 数据采集
设置旋转平台和相机:
- 准备一个可旋转的平台和固定的相机。
- 将待拍摄的物体放置在平台中央,并确保相机对准物体。
- 相机与物体之间的相对位置保持固定,同时物体旋转,使得物体在不同角度上接受环境光照。
旋转拍摄:
- 启动平台旋转,通常进行360度旋转。
- 在旋转过程中,以固定角度间隔(例如每旋转2度)捕捉物体的图像,最终获得一组多角度图像 。
2. 图像处理
图像预处理:
- 对每个捕捉到的图像进行预处理,如去除噪声、校正颜色和畸变。
- 确定每个图像中物体的边界,生成掩码以便于后续处理。
3. 数据预处理
深度图预测:
- 使用多层感知器(MLP)根据每个像素的二维图像坐标预测其深度值,生成深度图 。
- 具体实现:
- 输入:像素坐标 。
- 通过MLP输出对应的深度值 :
- 组合形成深度图:
其中 为像素总数。
边界法线计算:
- 根据物体在图像中的边界,计算每个边界像素的梯度:
- 使用梯度计算初始法线向量:
- 为了提高法线精度,加入小偏移量 进行修正并归一化:
其中, 通常取一个小值,如 0.01。
4. 渲染方程中的法线计算
选择相邻点:
- 对于每个像素 ,选择其周围的四个相邻点 ,这些点的深度值分别为 。
转换到相机坐标系:
- 将这些像素点从图像坐标系转换到相机坐标系:
其中:- 为图像坐标。
- 为相机主点坐标。
- 为相机焦距在x和y方向上的像素值。
法线计算:
- 使用以下公式计算法线向量:
其中:- ,用于给予距离较近的点更高的权重。
- 为中心像素在相机坐标系中的位置。
5. 环境光建模与初始化(使用IDE)
5.1 集成方向编码(IDE)准备:
生成IDE函数:
- 根据需要的球谐函数阶数 ,生成用于环境光编码的IDE函数。
- 实现:
其中,ide_fn = generate_ide_fn(deg_view)
deg_view
控制编码的细节程度,通常取值为 4 或 5。
5.2 边界信息获取:
- 从预处理后的图像中提取边界像素的颜色信息 和对应的法线 。
- 计算对应的入射方向 :
其中, 为第 张图像对应的旋转矩阵。
5.3 环境光编码与初始化:
- 对每个边界入射方向 计算其IDE编码:
其中:- 为von Mises-Fisher分布的浓度参数的倒数,控制编码的分布宽度,一般取一个小值,如 0.1。
- 通过最小二乘优化求解环境光系数 :
- 这可以通过线性回归或梯度下降等优化方法求解。
5.4 环境光模型表示:
- 最终的环境光模型表示为:
- 其中, 为环境光的系数向量, 为任意方向。
6. 渲染与损失计算
6.1 反射方向计算:
- 对于每个像素,计算其反射方向:
其中:- 为表面法线。
- 为视线方向。
6.2 渲染颜色计算:
- 对于每个像素,根据渲染方程计算其颜色值:
其中:- 为漫反射系数(从材质MLP预测)。
- 为镜面反射系数(从材质MLP预测)。
- 为对应方向的环境光辐照度。
6.3 损失函数计算:
- 定义重建损失(如均方误差):
- 可能的正则化项:
- 法线平滑损失 。
- 深度平滑损失 。
- 反射率平滑损失 。
- 总损失:
- 其中, 为权重超参数。
7. 训练策略
7.1 间隔采样(Interval Sampling,IS):
- 将高分辨率图像划分为不重叠的块,每个块包含 像素点。
- 从每个块中提取相同位置的像素点,生成低分辨率子图像,以减少计算开销并提高训练效率。
- 在训练过程中,这些子图像在每个周期内随机采样,平滑正则项基于子图像的分辨率进行计算。
7.2 缩小范围计算(Shrinking Range Computing,SRC):
- 在子图像分辨率下,使用全分辨率图像坐标系中的相邻点进行法线计算,以提高法线估计的精度。
- 在训练的早期阶段,选择距离查询点较远的相邻点进行法线计算,以获得更平滑和稳定的法线图。
- 在训练的后期,逐步选择距离查询点较近的相邻点,最终提高法线计算的精度。
7.3 迭代优化:
- 使用梯度下降或其他优化算法,迭代更新深度、法线、反射率和环境光系数。
- 在每个迭代中,根据当前估计的参数重新计算渲染颜色和损失,并更新参数。
- 训练过程持续进行,直到损失收敛或达到预设的迭代次数。
8. 最终结果生成
8.1 法线图输出:
- 从训练得到的法线预测中,生成最终的高精度法线图:
8.2 深度图和反射率图输出:
- 输出最终的深度图 和反射率图 。
8.3 3D重建和渲染:
- 利用生成的深度图和法线图,可以进行高质量的3D重建。
- 使用反射率图和环境光模型,可以在新视角下对物体进行真实感渲染。
总结
通过将球面高斯(SG)替换为集成方向编码(IDE),我们在环境光表示上获得了更高的表达能力和计算效率。IDE能够更有效地捕捉环境光的方向信息,特别适用于复杂光照场景下的3D重建任务。在整个流程中,主要修改集中在环境光建模与初始化以及渲染与损失计算部分,其中使用IDE对环境光进行编码和优化,并在渲染过程中应用这些编码以生成逼真的图像合成。训练策略和最终结果生成步骤也相应地调整,以适应新的环境光表示方式。
IDE:
阅读refnerf、nero关于IDE推导的部分
IDE原理:refnerf
视角方向:从哪里看,相机的方向
反射方向:光线从表面反射的反向(固有属性)
IDE流程
IDE是一个对光线逆渲染的过程。
通过进入相机的光线(视角方向),对应物体上的一个点,光线和该点的法向量计算出一个反射方向。
用这个反射方向结合粗糙度,判断对应环境光中的一个可能的区域,通过积分,对环境光进行恢复
只转动RS1,normal不变,环境光变
只转动RS2,normal变,但环境光不变,只能恢复对应视角下的环境光
解决方案:
- 均匀转动RS1,每个RS1的位置,转动几次RS2,获取几张图片
- 同时转动RS1、RS2
对于该系统,有:
RS1转等价于相机转等价于环境光转,此时需要乘以旋转矩阵R
RS2转等价于物体转,此时不需要乘以旋转矩阵,直接通过normal映射回环境光的对应位置
方案1:
IDE(l,σ)
for 转动 RS1:IDE(Rl,σ)
for 转动 RS2
方案2:
我的想法:
NeRO设定:绕着物体从下到上旋转拍摄128张图片,物体相对于环境光不变。可以拍摄到从下到上多个水平角度的图片,恢复的形状更完整
ours:使用旋转平台,只有水平视角,但是增加了物体自转,减少了base color和环境光的耦合
如果在NeRO上直接加物体自转,是否效果能达到最好?