一、三维重建方法
1.1 传统方法
- RGBD(D来源结构光或者TOF):缺点,重建范围受限,一般不能重建大模型;比如,kinectFusion,DynamicFusion,BundleFusion。
- VMS(多帧图像重建模型):比如,OpenMVS,PMVS,MVE。
1.2学习方法
- 单帧图像重建mesh模型:比如,if-Net,PifuHD。
- 单帧/双目/MVS重建深度图:比如,MVSNet,JDACS-MS,PatchMatchNet。
二、一些基础知识点
2.1 3D shape representation
深度图(depth):每个像素值代表的是物体到相机xy平面的距离。
点云(point cloud):某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标X,Y,Z、颜色、分类值、强度值、时间等等。
体素(voxel):是三维空间中的一个有大小的点,一个小方块,相当于是三维空间种的像素。
网格(mesh):是全部由三角形组成的多边形网格模拟复杂物体的表面。
2.2 极线约束与本征矩阵
假设在世界坐标系中有一点p,坐标为X,它在1相机中的像为x1,在2相机中的像为 x2(注意 x1和 x2为齐次坐标,最后一个元素是1),如下图所示。
公式太难码了,直接贴图片了。
三、MVS(Multi-View Stereo)重建方法
3.1 一个初略的流程是
多图片集输入,pose计算(计算采用slam/SFM算法),mesh模型重建,文理贴图。
3.2 MVS重建的三种路线
- Images camera parameters,silhouette extraction, visual hull,final refinement,polished voxels/mesh。
- Images camera parameters,depth range initialization,depthmap reconstruction,depthmaps,boundingbox initialization, volumetric fusion,voxels/mesh, final refinement,polished voxels/mesh。
- Images camera parameters,point cloud reconstruction,point cloud,boundingbox initialization, volumetric fusion,voxels/mesh, final refinement,polished voxels/mesh。
其实后面两种路线可以归为一类,前提都是重建深度图。
3.3 对比
基于轮廓线的MVS重建(上述路线1):
优点:易于实现,速度快;
局限性:精度依赖体素分辨率和轮廓线;得到的模型不够光滑;需要分割重建物体的轮廓,普适性低;
基于光度一致性的MVS重建(上述路线2和3):
优点:相对精度高,对硬件要求低,测量范围大;
局限性:无文理,透明/反光,重复文理建模可能会失效。
基于深度学习的MVS重建:
优点:基于学习的特征,匹配更鲁棒;基于shape先验,重建更完整;
局限性:内存限制,难以重建高分辨率;依赖大数据;
四、SFM算法流程
4.1 特征点提取与特征点匹配
特征点提取
Shi-Tomasi
SIFT
SURF
特征点匹配:匹配结果往往有很多误匹配,为了排除这些错误,使用KNN算法寻找与该特征最匹配的2个特征,若第一个特征的匹配距离与第二个特征的匹配距离之比小于某一阈值,就接受该匹配,否则视为误匹配。当然,也可以使用交叉验证方法来排除错误。
4.2 基础矩阵估计F和本质矩阵估计E
基础矩阵中有9个元素:5点法或者8点发估计
本质矩阵中有7个独立参数:估计出本质矩阵的目的是为了对之前求得的匹配进行约束,得到的匹配成为几何一致匹配,不同图像上的几何一致匹配形成了一个TRACK(其实就是一个空间点在不同的图像上的投影点之间的匹配)。
本质矩阵分解为R和T:
- SVD分解
- 存在4种可能的解,寻找正确的解
- 检查旋转矩阵R的正确性(R的行列式必须为1或者-1)
4.3 三维点云计算
三角定位法
4.4 重投影
将三维点三角化并重映射到摄像机得到二维点,计算与最初二维点之间的距离,说明三角化误差。
4.5 计算第三个摄像机到到世界坐标系的变换矩阵(R和T)
4.6 更多摄像相机的变换矩阵计算
得到第三个摄像机的变换矩阵后,就可以计算匹配点的在空间中的坐标,得到三维点云,将新得到的三维点云与之前计算得三维点云进行融合(已经存在的空间点,就没必要再添加了,只添加在图像二和三之间匹配,但在图像一和图像三中没有匹配的点)。然后循环迭代,如下图所示。
4.7 重构的细化与优化
随着图像的不断增加,误差会不断累积,最后误差过大以至于完全偏离重建的目标。所以需要三维点云的位置和摄像机的位置优化。可以使用光束法平差(Bundle Adjustment, BA)。
BA的本质是一个优化模型,其目的是最小化重投影误差。
5 代码及运行效果
代码
运行效果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)