我们在得到SFM线程传进来的稀疏点,要稠密重建,自然得对这些稀疏的三维点进行补全。也即我们需要根据稀疏点投影到当前帧的投影点的深度值去估计该投影点邻域像素点的深度值(在可用的稀疏点之间插值初始化深度图),从而得到更加准确的深度图。后续根据深度图去进行稠密重建。
1. 初始化SFM得到的稀疏点
/**
* @brief depth计算,采用patchMatch方法
原理细节主要是参考论文"Accurate Multiple View 3D Reconstruction Using Patch-Based Stereo for Large-Scale Scenes", S. Shen, 2013
* 代价计算分两种方式一种是上述论文里面的简单的直接使用NCC来作为匹配代价;
另一种是带权重的代价参考论文"PatchMatch Stereo - Stereo Matching with Slanted Support Windows"公式3
* 以NCC为评价标准,使用传播和随机优化来估计深度图
* 给定同一场景的两个视图,我们将重建深度图的视图记为“参考图像”,将另一个视图记为“目标图像”。
* 第一步:在可用的稀疏点之间插值初始化深度图;
* 第二步:传播优化:深度图从顶部/左侧传播到底部/右侧,并在接下来的每个步骤中传递相反的方向。
传播过程中,对于每个像素,如果邻域的NCC评分较好,首先将当前的深度估计替换为它的邻居深度值。
然后通过尝试对当前深度值做一个随机调整来细化重建的深度,并保留得分最高的那个,通常2-3