本文梳理下OpenMVS
的各个模块的算法步骤,不涉及具体细节。如有错误,欢迎评论指出。
介绍
算法的输入为一组相机姿态及稀疏的点云(由
SFM
算法获得,比如Colmap
),输出为带纹理的三角网格。
一.稠密点云重建
此模块用于获取所拍摄场景尽可能准确和完整的三维点云[1-2]。
具体步骤有:
立体匹配图像对选择
选择用于做立体匹配的图像,即为每个参考图像选择有效的邻域图像。分两步:1.根据共视点在图像上的夹角、分辨率、面积三个准则进行首轮选择 2.进一步地构建马尔科夫随机场(MRF
)问题[8],即经典的标注(labeling
)问题,选择一个全局最优的领域图像。
深度图计算
对构建的图像对计算视差图,也即深度图。首先先利用稀疏的三维点+delaunay三角剖分做深度图的初始化,然后进一步采用SGM
[6]或者PatchMatch
[7]算法计算得到稠密的深度图,最后通过深度段(depth segment
)过滤+孔洞插值+领域图与参考图深度一致性检查对深度图做初步优化。
深度图融合
将多张深度图即多个点云融合成单个场景点云。这里主要是想要去除冗余点和遮挡点。
二.网格重建
此模块用于从输入点云重建得到三维网格表面[3]。可参考笔者之前的博客[9]。
具体步骤有:
构键点云的四面体剖分
对输入点云进行四面体剖分,将表面提取问题转化为四面体的内外标注问题,内外分界的三角形面即为最终待重建的曲面。
构建图结构
同样地,标注问题可采用MRF
来进行建