以下内容参考科学出版社康莱老师的《基于图像点特征的多视图三维重建》和华中科技大学王跃嵩的硕士论文《多视图立体匹配三维重建方法》
1.图像特征点检测
确定特征点的位置,方向和尺度等仿射变换参数的过程。目前流行的特征点检测算法:Laplacian检测算法,高斯差分DOG算法,以及根据梯度协方差矩阵检测图中的角点位置的*等检测算法,其中基于DOG的特征点检测方法——尺度不变特征变换(sift)是目前性能最好的特征点检测算法。SIFT流程:对输入图像进行DOG滤波,搜索滤波后的图像中的所有的极大值和极小值,这些极值对应的像素坐标即为特征点坐标,当特征区域的大小与DOG滤波宽度大致相当时即呈现极值。
2.图像特征点描述
SIFT提取特征点周围的一块区域,并利用特征向量来描述该区域作为特征描述符。SIFT描述符使用图像梯度,计算局部图像梯度方向的直方图,并在特征点周围创建4*4的直方图方格,每个柱状图包含八个梯度方向,因此SIFT 包含128维特征向量。
PCA-SIFT还有SURF(通过近似方法计算梯度和积分来提升SIFT的速度)
3.图像特征点匹配
一种是粗暴匹配,通过比较描述符之间的欧氏距离,设定阈值来判定。
一种是特征空间中搜索最近邻来确定匹配关系,阈值可学习得到,也可采用距离比测试 来剔除误匹配。
另一种索引结构是多维搜索树,Lowe对这类方法进行对比研究,提出基于层次K均值树的优先搜索策略。他们的研究表明在高维近似最邻近(ANN)搜索问题中,多随机KD树性能最优。为进一步剔除误匹配,需要几何验证,通常采用随机采样一致(RANSAC)算法估计两视图间的基础矩阵,然后通过计算图像匹配与基础矩阵的拟合程度来剔除误匹配,可供选择的基础矩阵的估计方法有归一化的八点法,黄金标准法
4.特征点与相机空间位置求解
流程:SIFT->SFM包括用迭代方法考虑多幅图像匹配对->恢复相机参数,同时得到相机之间的相对位置关系->使用BA调整对生成的摄像机位置进行微调
为计算出的相机位置结果更好,只比对每一副图像的邻近几幅图像会更好。对于每幅图像 i,假设有恒定数量的 m 幅图像这 m 幅图像与图像 i 相匹配点最多,则这 m 幅图像被认定为是图像 i 的准匹配图像。(一般 m 被设定为 6)。
4.1.每一个相机的信息都可以用 7 个参数表示。这 7 个参数分别存在于相机旋转矢量 ,相机位移 以及相机焦距 fi。两个相机射线
与连接两个相机光心 的变换矢量是共面的,即他们的数量三重积等于零:(1),将相机参数形式带入到(1)式中,得,其中
,这就是众所周知的极线约束,通过图像匹配可以得到基本矩阵 Fij 的抗差估计。常用于处理非线性约束以求得一般 3×3 基础矩阵 Fij 的近似值。
4.2.得到近似值后,为求得更加准确的基础矩阵 Fij,在求得初始匹配关系后使用 RANSAC 方法进行迭代,进而找到一系列拥有对极几何一致性的正确匹配。如果两幅图像的匹配中其RANSAC 匹配对数 n inliers>n match,则认为这两幅图像匹配,其中最小匹配数 nmatch 是一个常量(一般设定在 20 左右)。
4.3.从输入图像中选择两张图像用于初始化重建,其中设定第一幅图像对应的相机为参考相机。随后其他相机被依次加入计算,同时他们的的位姿均是相对于参考相机的位姿,每一次计算,初始重建的结果都会被优化以及扩展。这样计算的好处在于即使某一相机拍摄的图像与参考相机拍摄的图像并没有相匹配的特征点,该相机的姿态也能得到重建,例如,该相机对应的图像只与其邻近的某一相机所对应的图像有匹配点。在根据图像序列恢复出场景结构及相机运动时,可以通过捆集调整优化得到的结果。
4.3.1计算的第一步是选择两幅图像用于初始化接下来的一系列场景结构及相机运动的计算。一方面,这两幅图像之间需要有足够多的匹配点,另一方面这两幅图像对应的视点不能太过靠近以保证初始化重建出的场景结构是足够好的。第二个条件不容易满足,这里用基于图像的距离来检测第二个条件是否满足。目标图像中的点根据平均平面单应性变换求得另一张图像中其对应的点,这两点的距离的中值即这两幅图像基于图像的距离。平面单应变换 H 由两幅图像的匹配关系所确定。
4.3.2初始选择出的两幅图像用于决定计算的参考系,世界坐标系将以第一个相机为基准,第二个相机位姿根据两幅图像计算出的基础矩阵 F12 通过对极几何关系求得:,
4.3.3一旦初始相机的射影矩阵确定了,根据两幅图像的匹配关系,可以通过三角测量进行场景重建。上一步用两幅图像完成初始重建,接下来需要向已有的重建结构中添加新的相机。初始两幅图像对应相机的位姿已被确定,随着基于新相机的加入重建计算,重建结构做出更改,新的三维点随之初始化生成。
第一步找到新加入的图像的对极几何关系,接着图像中与已经重建的三维点相一致的点将会被提取出来用于推断二维和三维的对应关系。基于这些,该新加入的相机矩阵 Pk 即可被计算出来。在计算相机矩阵中,至少需要 6 对匹配点。如果一点被重建后,其对于所有相机的最大重投影误差(包括新加入的相机)低于一预先确定的阈值,则这一点被认为是一个正确的点。一旦相机矩阵 Pk 确定了,已重建的三维点的投影则可以得知,通过这一投影过程可以在图像中找到更多的匹配点用以优化相机矩阵 Pk 使该相机矩阵更加精确。这意味着匹配点的搜寻范围可以从整幅图像减少到空间点投影处的极线上。
为了解决有一个空间点超出了当前所有相机的视野范围,但是又出现在了随后的两个相机的视野之中的问题。将所有与当前视点相近的视点所对应的图像都进行匹配比较。对于每一个邻近的视点,都可得到一系列可能的二维三维对应关系。这些对应关系综合在一起,并用以上提及到的方法恢复出相机的矩阵,只不过所用的二维三维对应关系变成了一系列融合在一起的对应关系。
接下来邻近的视点位置就可以确定下来。可以确定一个平面单应,该平面单应可以最好的阐释当前视点与先前的视点之间的特征点在图像上的运动。运用同一平面单应将其他的特征点变换到其他的视点中去,并求得该变换的平均剩余。由于根据极点可以求得相机运动的方向,所以将每一次选择都限定在每一个运动方向最近的几个相机之中是可行的,所以最好在每次运算中都考虑相机运动方向以区分其中相反方向的相机。
接着重建的结果可以对每一个点的迭代线性重建算法进行优化。其中投影矩阵可以写成于空间点 M 成线性关系的等式:,其中 Pi 是相机矩阵 P 的第 i 行,(x,y)是点的图像坐标。根据那些可以得到相
应图像点的相机可以获得一线性方程组,解出该线性方程组即可求得 M 的估计值。
5.运动推断结构
SFM改进方面:采用相机姿态估计来初始化相机参数,选择新的启发式方法选择初始两视图,引入三维重建点筛选过程剔除质量较差的重建效果,以及使用从图像文件EXIF标记中提取的焦距信息。
6.稠密点云
7.表面重建(网格)
8.纹理重建(纹理贴图)