SFM(structure from motion从运动恢复结构)和MVS(multi-view stereo多视图立体视觉)

最近在开始新的领域,三维重建,其实是想做adas领域的4d label相关的工作。无奈啊,对computer graphics的东西,我一向很排斥,然后现在不得已要面对了。

首先推荐一本书,Multiple View Geometry in Computer Vision (Second Edition),英语版本可能读着顺利些,中文的看反馈说翻译的不好。顾名思义,就是多相机几何,那就是多个相机视角下的世界,无非就是各种相机空间转换,就是矩阵计算相关的操作。

 

在做三维重建时,经常用到的技术,提到最多的就是SFM,MVS等,在这些概念中,其实可以说前者是后者的initialization一样的作用。

SFM是可以重建稀疏点云和相机参数(内外),使用场景最多还是标定相机内外参,此处可参考
https://www.bilibili.com/video/BV1gR4y147Tt/?spm_id_from=333.999.0.0&vd_source=2756076b742ce0cf00a4d21dd0af6ddd   这个是北邮的老师课上介绍SFM挺清晰地。
SFM的输入是没有标定的图像,输出是稀疏点云和相机内外参。这个point cloud是稀疏的原因是,我们在SFM时,寻找的是特征点匹配上的点,不是每个像素点,所以是稀疏的。
MVS输入的是标定后的图像(就是具有相机参数的图),输出是稠密点云。
所以,相机参数可以通过SFM标定,那么一组图像中重建三维模型时,我们可以首先采用SFM标定相机内外参,然后根据标定结果进行稠密点云重建。
SFM给MVS算好了输入视角的位姿(T,R外参)、内参、稀疏点云以及它们的共视关系,MVS再利用这些信息以及彩色图来估计深度图以及做最后的fusion还有点云过滤等。SFM是camera tracking, 而MVS是深度估计depth map estimation 和深度融合depth fusion。在实际使用中,一般是SFM进行相机标定,然后采用MVS重建稠密点云。
这几年CG发展受到了极大的关注,主要是两个方向,一个是NeRF, 另外一个是3d Gaussian splatting。这两个其实算是替代掉了mvs以及后面的工作,一般前面还是会需要SFM的过程,因为这个过程是估计相机内外参和旋转参数的,即使是有工作觉得用SFM得到的点云过于稀疏,或者参数不够精确,会用lidar的数据来替代,但是并不代表SFM这个过程没有了,只是用了更精确的方法。但是如果只有相机信息来做三维重建,那没办法了,只能用SFM+NERF或者gaussian splatting了。
 
三维重建目前已经在很多领域应用非常广泛了,尤其是这两年在adas领域,但是adas领域有个非常大的问题是,adas是动态场景,而上述的方法,对动态物体重建时会出现黑洞现象,具体原因还没看明白,猜测主要原因是,在SFM过程中,我们估计的是相机的内外参和旋转矩阵,但是并没有真正给出来实际世界坐标下的位置,而一旦物体是动态的了,就决定了彼此之间的位置就变得复杂了,不能再简单的像之前SFM那样进行估算参数了。因此,动态场景下,目前都要有lidar真值来作为一个监督信息进行建模。但是,现在有个问题,如果我没有lidar,那我该咋对动态物体进行重建呢?
 
我还没看懂这块,有懂的行家请给点建议,谢谢。
posted @ 2024-09-13 21:02  caoeryingzi  阅读(20)  评论(0编辑  收藏  举报