图片捕获过程,请遵循以下指导方针以获得最佳重建结果:
1 捕捉具有良好纹理的图像。避免使用完全没有质感的图片(例如,白色的墙或空桌子)。如果场景本身没有足够的纹理,你可以放置额外的背景对象,如海报等。
2 在相似的照明条件下捕获图像。避免高动态范围的场景(例如,背对太阳有阴影的照片或透过门/窗拍摄的照片)。避免在有光泽的表面上拍摄。
3 捕捉高视觉重叠的图像。确保每个物体至少在3张图片中看到,重叠图片越多越好。
4 围绕同一个物体进行不同的角度捕捉图像,不要只旋转相机从同一位置拍摄图像。同时,尽量从一个相对相似的角度拍摄足够多的图片。注意,更多的图像不一定更好,可能会导致缓慢的重建过程。如果你使用视频作为输入,考虑下采样帧率。
概述
基于图像的三维重建 传统上首先使用运动结构(Structure-from-Motion) 恢复场景的稀疏表示和输入图像的姿态。这个输出然后作为多视图立体几何( Multi-View Stereo **)**的输入,以恢复场景的密集表示。
SFM是通过一系列有重叠的且不同视角的图片重建出物体的三维结构(稀疏点云),并且输出相机的内外参数,内参指的是将真实空间的三维点通过内参矩阵转换为相机图片上的二维点,外参包含相机在切换不同视角时的平移和旋转信息。
通常情况下,运动结构系统将这一过程分为三个阶段:
1 特征检测与提取
2 特征匹配和几何验证
3 结构与运动重建
**多视图立体几何(MVS)**采用SfM的输出来计算图像中每个像素的深度和法向信息。在3D点云中融合多幅图像的深度图和法向图,然后生成场景的密集点云。利用融合点云的深度和法向信息,泊松曲面(Poisson),三角剖分(delaunay)重建等算法可以恢复场景的三维曲面几何。
实施:
COLMAP创建一个新项目必须包含存储数据库的位置以及包含输入图像的文件夹。可以将整个项目设置保存到配置文件中,项目配置文件中保存存储数据库和图像文件夹的绝对路径信息。整个项目的目录结构如下:
第一步:特征检测/提取
特征检测/提取在图像中找到稀疏的特征点,并使用数值描述符(128维向量)描述特征点。主要使用SIFT特征提取方法。
jpge图像的头部保存了EXIF信息 里面包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等,COLMAP可以从嵌入式EXIF信息中自动提取焦距信息。
提取到的特征信息如下:
NUM_FEATURES代表一张图像提取到多少个特征点,x,y代表特征点的坐标, scale代表尺度(即相机距离物体远近的比例),ORIENTATION代表特征点的梯度方向, D_1...D_128代表特征描述符的128维向量,所有提取的数据都将存储在数据库文件中。
其中X, Y, SCALE, ORIENTATION为浮点数,D_1...D_128为0...255范围内的值。
例如,一张图片有4个特征:
第二步:特征匹配和几何验证。
特征匹配首先匹配图像对,下面列出图像匹配的几种策略。其次再将匹配后的图像上的特征点进行匹配,利用特征点的128维描述符向量的相似性度量进行特征点匹配。
图像对匹配算法:
穷尽匹配(Exhaustive Matching):如果数据集中的图像数量相对较低(最多数百个),那么这种匹配模式应该足够快,并能获得最佳的重构结果。在这里,每个图像都与其他图像进行匹配,而块大小决定同时从磁盘加载到内存中的图像数量。
序列匹配(Sequential Matching):由一个摄像机。在这种情况下,连续的帧具有视觉重叠,不需要用尽全力地匹配所有的图像对。而是将连续捕获的图像相互匹配。
空间匹配(Spatial Matching):这种匹配模式将每个图像与它的空间近邻进行匹配。COLMAP还会从EXIF中提取GPS信息,并使用它进行空间最近邻居搜索。
传递性匹配(Transitive Matching):这种匹配模式利用已有特征匹配的传递关系,生成更完整的匹配图。如果一个图像A匹配到一个图像B,而B匹配到C,那么这个匹配器会尝试直接将A匹配到C。
建立图像对之后,在参考图像中的一个特征点,如何从目标图像中的所有特征点中找出与之相对应的特征点。如果使用暴力计算法,计算每一对特征点的相似距离,如果特征的描述符向量的维度和特征点的数量较多的话,暴力法是不可取的。需要使用KD树 算法建立一个搜索树,基**于KD树最邻近查找算法,**方便特征点进行快速匹配。
由于sift提取的特征点和描述子在匹配过程中可能会存在误匹配的情况,所以需要将错误的匹配点对剔除。几何校验是筛除一些误匹配的特征点。几何校验是指利用对极几何进行约束。
对极几何:空间中的一点与两张图片相机的光心,三者围成一个极平面,极平面与两张图片相交形成两条极线,对极几何约束是指,空间点X在摄像机1的成像平面中的像素点x,与之相匹配的摄像机2的成像平面中的像素点 x' 一定落在极线上。
公式约束为: x'的转置 × F × x =0 ;F为基础矩阵,F可以通过8对匹配的特征点联立方程组求得 分解F矩阵可以求得相机的内参矩阵。
几何约束方法:随机选取图像对的8对匹配点,使用归一化八点算法求解基础矩阵F,然后统计满足对极几何关系的点对数量,在设定的次数内重复上述步骤,选取满足条件的点对数量最多的匹配为精化匹配结果。
第三步:稀疏重构
首先初始化主要是指选取两张匹配的图像,设定其中一张图像的位姿为单位阵,然后通过它们之间的匹配点对估计出E矩阵,将E矩阵分解获得另一张图像的位姿。在估计出两张图像的位姿后,就可以通过三角化(triangulation)来生成三维点。
然后进行增量式重建:
1 获取下一最佳匹配图像(匹配点对数量最多)
2 利用匹配的特征点估计出E矩阵(本质矩阵),估计图像位姿
3 进行三角化生成三维空间点,三角化是利用两个匹配的图像坐标 和图像位姿 以及相机的内参矩阵,求得匹配点的三维点坐标。
4 对所有已生成的三维点和已估计出的位姿,使用ceres库进行ba(bundle adjustment)优化。通过最小化重投影误差实现剔除误差过大的点
5 最后对所有数据进行ba优化 即全局优化
第四步:稠密重建
在重建场景的稀疏表示和输入图像的相机姿势后,MVS现在可以恢复更密集的场景几何。COLMAP有一个集成的密集重建管道,可以为所有的配准图像生成深度和法向图,将深度和法向图融合到一个将稀疏点云融合成密集点云,最后使用泊松(Poisson)或三角剖分(Delaunay)重建方法从融合的点云中估计出一个密集曲面。
稠密重建分为:
1 是还原图像,去除图像的畸变
2 是计算深度图和法向图
3 将深度和法向图融合成到点云里
4 点云网格划分形成曲面
colmap命令行执行过程
初始数据为图像文件和数据库文件
图像文件包含128张jpg图像
1 特征提取 利用特征提取算法提取每一张图片的特征点并获得特征点的描述符
2 穷尽匹配 匹配每一张图片与其他所有图片的特征点,并进行几何校验。
3 稀疏重建
首先使用两张图片,将第一张图片的位姿记为单位阵,通过匹配的特征点利用本质矩阵求得另一张图像位姿,通过估计基础矩阵得到相机的内参矩阵,利用两个匹配的图像坐标和图像位姿以及相机的内参矩阵,进行三角化生成三维空间点。接着使用ba(bundle adjustment)优化生成的三维点,通过最小化重投影误差实现剔除误差过大的点。然后每增加一张图片,重复进行估计图像位姿、三角化、ba优化、全局ba优化等步骤。直至添加完所有图片
稀疏重建效果
4 稠密重建
(1) 图像去畸变,还原未失真的图片
(2)计算深度和法向图
立体匹配后生成的深度图
立体匹配后生成的法向图
(3)在稀疏点云中融合多幅图像的深度图和法向图,然后生成场景的密集点云。
稠密点云效果如下:
(4)使用三角剖分算法进行曲面重建,重建效果如下:
参考网址: