0. 前前言
对于深度图计算的流程,笔者认为是:
- 由SfM得到稀疏三维点云,通过构建网格和插值来初始化参考图像(要求深度图的那一帧)的其他像素点对应的深度值和法向量;
- 根据参考帧像素点的初始深度值、法向量以及像素坐标,我们可以得到该像素点在三维空间中三维点的局部切平面(Patch);
- 计算当前参考帧的像素(当前像素块)与邻域帧对应像素(邻域像素块)(通过当前像素的坐标、深度值等信息结合单应矩阵得到)的匹配代价;
- 匹配代价是NCC或加权NCC,主要比较的是当前像素块和邻域像素块的像素色度空间和几何空间邻近性;
- 但是这些像素的初始深度值和法向量不够准确,所以得到的匹配代价值并不是最优解。这里有一个假设:参考帧相邻像素可能有相似切平面,即相似的深度和法向。对于高分辨率图像,像素个数足够多,则在初始化的深度和法向值中很可能至少有一个邻域像素有接近中心像素真值的深度值和法向值;
- 所以,我们需要拿中心像素的邻域像素的深度值、法向量(也就是邻域像素的Patch)当做中心像素的深度值和法向量,然后根据中心像素的新的深度值以及原来的像素坐标,得到邻域帧对应像素的坐标(根据坐标我们可以确定像素的灰度值、空间距离等NCC公式需要用到的信息);
- 当然了,我们不能简单的将邻域像素在邻域Patch的深度值就赋给当前像素,而是应该求解当前像素和邻域Patch的新深度值,再进行第6步操作;
- 按上述原理进行像素间的深度值和法向值的传播及随机搜