Massively Parallel Multiview Stereopsis by Surface Normal Diffusion
contribution
- 提出了一种新的类似传播的方案 red-black(checkerboard) scheme 更适用于GPU多核运算
- 将PatchMatch Stereo从双视图拓展到多视图,在多视图数据中更好的去处冗余。拓展的出发点是观察到可以在欧几里得三维场景空间中定义法向量 。在每个表面点处定义一个局部切平面,因此在任何两张包含此表面的图像间定义一个相关的单应(分别为一对倾斜的支持窗口)。表面法向量的显示估计使在不同视图间的一致性检查中利用plane-induced单应成为可能。避免极线校正。
多视图设置仍然需要一个参考图像来修复曲面的参数化
因此,首先使用每张图像作为参考来计算深度,然后将结果融合成一个一致的三维重建模型。
然而,作者更倾向于使用多视的图像一致性生成更好的深度图,再使用一个基本的融合方案生成一致的三维点云
PatchMatch关于平面的定义产生了支持窗口的仿射畸变
(PatchMatch with Huber regularization for stereo matching)
Red-Black Patchmatch
表面法向传播
标准的PM过程是在图像上对角传播信息,交替从左上角到右下角传播再反向传播
将图像按像素划分为红黑两组,在棋盘模式中,同时一次更新所有黑色和红色。
a. 所有红色像素的深度和法线是并行更新的,使用黑色像素作为候选,反之亦然
b. 来自局部邻域(红点)的像素的平面作为给定像素(黑点)的更新
c. 改进速度设置方案,只使用内部和最远的像素
实验结果:迭代次数在8次时深度图已达到收敛
稀疏匹配代价
使用与PatchMatch原始论文相似的匹配代价。唯一的区别在于只考虑梯度而不考虑颜色差异,因为使用RGB的性能改进较小,运行时的性能并没有三倍的提高。
为了进一步加快计算速度,采用Sparse Census变换(窗口只计算行列的邻接点)
对PatchMatch类型的算法很有效,因为需要更大的邻域来估计可靠的法向
根据图像的比例,所需的窗口大小通常至少为11x11像素,但可以达到25x25像素
多视拓展 *
场景空间参数化
基础补充 PM-Huber: PatchMatch with Huber Regularization for Stereo Matching
PatchMatch采用随机抽样和传播的策略,这是一个隐式平滑模型,好的平面估计结果会在直接邻域传播,但是错误或不可靠的估计被传播时,隐式平滑也会造成问题。这种情况一般发生在无纹理区域,具有重复结构的区域和极端采样区域(法线与视图方向几乎正交)。文章提出了一种使用二次松弛的显式变分平滑模型应用于PatchMatch。
单应矩阵HΠ 从第二相机坐标系映射到第一相机坐标系 x’ = Hx
假设相机内参相同,且K为上三角矩阵
校准好的图像对,旋转矩阵为单位阵,平移向量为[b, 0, 0]T,其中b为基线长度。
在视差和场景平面情况下,由一个平面引起的两校正视图之间的变换只有三个自由度
a为比例缩放,b为错切(x’=x+by),c为平移
初始化
为有效地生成均匀分布在可见半球上的随机法线:
随机取q1,q2,两个值在区间(-1,1)均匀分布且满足S = q12 + q22 < 1。
映射得到在球面上均匀分布的单位向量。如果[u, v, c]T
n到主射线的投影为正数,则向量n是反向的(没看懂)
深度分辨率是各向异性的:即使在场景空间中对匹配进行参数化,在图像空间中仍然可以测量相似度。由此可知,在视差范围内,测量精度近似为常数,与深度成反比。(?)因此,建议统一地从可能的视差范围中抽取样本,并将其转换为深度值(提供一组更密集的深度采样集合,在邻域造成影响;一组远域的稀疏集合,微小变化不会产生明显差异)。基于同样的原因,平面细化步骤的搜索区间应该与深度成比例设置。
多视图代价计算 **
只考虑参考视图和所有其他重叠视图的相似点对,而不考虑非参考图像之间的相似点对
视图选择
对于给定的参考视图,排除与其基线小于αmin和大于αmax的视图。
基线太小影响三角测量,导致过高的深度不确定性;基线太大视角扭曲过大,导致不可靠的外观比较
代价聚合
给定平面Π,获得N个代价值
如果对代价值累加,可能在某些视图出现遮挡情况下,对于正确的平面估计依然会出现高代价值,从而使目标变模糊。参考Handling occlusions in dense multi-view stereo. CVPR 2001。
只用N个代价值中最好的50%(假设至少有一般视图对给定点有效)
稍微改变一下,引入参数K代替固定的50%,它将指定要考虑的代价值数量
K的选择取决于不同的因素:一般来说,较高值会增加冗余,提高三维点的精度,但也有不匹配的风险,从而降低鲁棒性。根据经验,较低的值往往工作的更好,文章选择使用K=3或更小对应比较稀疏的数据集。
融合 **
首先计算每个视图的深度图,方法是连续地将所有N个视图作为参考视图,然后将N个深度图融合成一个公共点云,以消除错误的深度值,并通过对一致深度和法向估计平均来降低噪声。
遵循生成最好的单个深度图的原理,然后以简单的方式将它们合并成一个完整的点云
一致性检查
匹配失败主要发生在无纹理和遮挡区域,包括相机视锥之外的区域。这样的情况是可以被检测到的,因为不同视图对应点的深度估计是不一致的。
检测:将深度图映射到三维点,然后再重新投影到N-1个其他视图,每个视图生成一个二维坐标pi和视差值di。如果在一定像素范围内,视差值di等于对应深度图的视差值,那么匹配认为是一致的。阈值取决于重建场景的大小。进一步,对估计的表面法线进行检查,法线角度差异设置最大为30°。如果深度有至少fcon个其他视图与参考视图一致,则接受相应的像素点。否则,它将被删除。对于所有被接受的点,在场景空间中所有一致视图的三维点和法向量求平均以抑制噪声。
融合步骤很快(49张1600x1200深度图约为15s)并且不改变深度图