初探三维重建

三维重建分类

  分为主动式重建与被动式重建。目前最主要的是立体视觉重建(被动式重建中的一种方法)。其主要包括1、直接利用测距器获取程距信息;2、通过一幅图像推测三维信息;3、利用不同视点上的两幅或是多幅图像恢复三维信息(最常用)。

立体视觉法

  传统的立体成像系统使用两个放在一起的摄像机,平行面向待重建的物体。此方法在概念上,类似人类借由双眼感知的图像相叠推算深度(当然实际上人脑对深度信息的感知历程会更加复杂),若已知两个摄影机的彼此间距与焦距长度,而截取的左右两张图片又能成功叠合,则深度信息可迅速推得。此方法必须依赖有效的图片像素匹配(correspondence analysis),一般使用模板比对(Block Matching)对极几何(Epipolar Geometry)算法完成。使用两个摄影机的立体视觉法又称做双目立体视觉(Binocular Stereo Vision)。

 
深度图像
  深度图像的每个像素点的灰度值可用于表征场景中某一点距离摄像机的远近。
 

SfM (Structure from Motion)  介绍

  SfM是干嘛用的?关于SfM的具体介绍可以参考Wiki百科上的简介,从SfM的英文构成(运动恢复法)也可以看出,SfM采用的是通过一组图片恢复三维模型。

图片来自于 Photo Tourism: Exploring Photo Collection In 3D算是三维重建中比较出名的一篇论文了,被引量有2000+,文中比较详细的讲述了使用多幅图像重建三维建筑模型的过程,介绍了如何根据相机参数的变化确定对应点的相关关系,从而恢复三维信息,同时论文也给了 short video演示。关于相机标定应用的提出应该是比较早的一篇论文 Self-Calibration and Metric Reconstruction Inspite of Varying and Unknown Intrinsic Camera Parameters 。至于什么是相机标定,可以参考 相机标定(Camera calibration)。成熟的SfM中最后会有 Bundle Ajustment优化,中文翻译个人比较喜欢 光束平差法,感觉这个翻译更贴合它的原理。关于BA优化的文章很多也很复杂,同时对BA优化的改进算法也有很多,一不小心可能会沉迷其中不能自拔,由于是初探,所以也还没有涉及那么深的内容,这篇文也只是想普及一下三维重建的一些知识而已,关于BA优化,推荐一篇讲的比较详细的论文 Bundle Adjustment —A Modern Synthesis,同时也可以参考一个博主讲的 BA优化原理

SfM算法是基于无序图片的三维重建算法,在其核心算法之前首先需要挑选合适的图片来确定相机参数之后再进行核心计算。具体步骤主要有以下几步:

(1)特征提取

       主要使用的是SIFT算子进行提取,SIFT 特征是基于物体上的一些局部外观的兴趣点而与影像的大小和旋转无关,具有尺度和旋转不变性,对光线、噪声、微视角改变的容忍度相当高,鲁棒性强,适合用来提取尺度变换和旋转角度的各种图片特征点信息,其准确性强。关于SIFT的详细介绍可以参考Wiki百科

一个SIFT特征有四个部分(位置position, 大小scale, 方向direction, 描述向量descriptor)

 

(2)Match and Track

       每个图片的特征点被提出来以后,就需要进行图片两两之间的特征点匹配并建立track:

       使用K-d tree算法计算最近邻匹配。令最近邻的距离为d1,再找到第二近的匹配对点之间距离为d2,如果两个距离d1和d2之比小于一个阈值0.5,就可以判定为可接受的匹配对。

       对于图片特征点的匹配和track一篇知乎问题写的蛮详细的,贴出链接https://www.zhihu.com/question/29885222大家可以去看一下算法实现,SIFT、ANN、RANSAC也有实现代码,并且后期的BA优化算法、稠密点云实现CMVS/PMVS也有实现,也有助于理解之后的操作。匹配关系建立后,需要生成track列表,指同名点的图像集合。

(3)三维点计算

       首先图像中可能匹配多个特征点,就会出现多对一的情况,实际上特征点之间应该一一对应。所以还需要一个去除重复特征点匹配对的算法去解决这种多对一的情况 (对匹配点可采用采样一致性算法RANSC八点法计算基础矩阵,剔除不满足基础矩阵的匹配对)。

用RANSAC和八点算法可以将嘈杂的匹配结果稳定化

       最终可以按照两幅图像中的匹配特征点数不少于一个阈值即为图像初选匹配对。但图像初选对有时并不可靠,所以需要使用几何约束检测其可靠性。几何约束是基于事实的,不是所有的特征点都符合物理规律,所以需要计算对极几何。对极几何在上文中有给出链接,可以参考其原理。

       初始化匹配对的相对定向,根据RANSC八点法计算本征矩阵,通过对本征矩阵SVD分解得到第二个图像的R、T(旋转、平移矩阵),在这一步需要进行畸变校正,然后根据R、T和矫正后的像点坐标三角计算出三维点,这里用到的方法是直接线性变换DLT。最终需要将图片中的像素坐标信息联系起来,并包含相机内参信息。

      描述摄像机的外参数用到3x3的旋转矩阵R和1x3的平移向量 (或者摄像机中心坐标向量),而摄像机的内参数用一个焦距f和两个径向畸变参数k1k2描述。

(4)稀疏重建

      加入更多的图像,与之前的图像进行匹配,然后计算R、T,推算出三维点信息,从而构成稀疏点云。

(5)Bundle Ajustment

       光束法平差(Bundle Adjustment),是一个非线性优化的过程。目的是使重建误差降低到最小,通过调整三维点的旋转平移矩阵及三维点信息使反向投影差最小。

       Bundle Adjustment是一个迭代的过程,在一次迭代过后,将所有三维点反向投影到相应图像的像素坐标并分别与初始坐标比对,如果大于某个阈值,则应将其从track列表中去掉,如果track中已小于2个,则整个track也去掉,一直优化到没有点可去为止。

       (4)、(5)是稀疏点云的重建过程,实际上在之后一般会使用CMVS/PMVS进行稠密点云重建,恢复更多的三维信息,以便于更好地建立三维模型,至于CMVS/PMVS的实现,在上文提到的知乎问题中也有讲解和实现。



转载自:https://www.jianshu.com/p/f33b3d440f7d

猜你喜欢

转载自www.cnblogs.com/linkmust/p/9916578.html