无人机图像处理技术精髓汇总 (一) 三维还原重建技术简介

航拍是无人机在实际场景中的重要应用。本系列文章将简单介绍无人机上的视觉算法。

从多张航拍图像中恢复建筑和地貌稠密结构是建筑,农业,测绘等行业迫切需要的。无人机的出现大大降低了航拍图像的获取成本,使得快速,低成本测量,创建需要的三维模型成为可能。本篇文章将剖析近年来的热点应用航拍图像三维重建

本文作者工作于泛化智能(giai.tech)

先简单介绍一下三维重建(Structure from Motion,SfM)的流程。

1. 照片拍摄

如果想与地图对齐,需要采集的图像文件exif字段有gps信息或者添加对应的地面控制点(Ground Control Point)

2. 提取特征点

从照片中提取具有一定不变性的特征点,在多张照片中都能找到的特征点将被用于后续图像匹配和全局模型生成。
常用的特征点提取算法有SIFT,SURF,ORB等。

3. 特征匹配

可以进行两两匹配,这样会导致$N^{2}$的时间复杂度。

也可以基于时序信息或GPS位置进行匹配,这样在照片很多的时候会显著减少用时,但可能导致误差积累。

成功匹配到足够多特征点的照片将被认为有相邻关系。每对成功匹配图像之间将可以计算一组相对位置关系,用于表示相机从一张图的拍摄位置到另一张图的相对位置需要经过怎样的运动。这样的运动通常可以表示为一个三维旋转矩阵R和一个位移向量t。旋转矩阵也可以用单位四元数紧凑表示。

4. 最优化过程

理论上如果匹配关系是一条链,可以直接计算每个点的位置。但如果照片之间的匹配是一张"网"(数据结构中的连通无向图),则每张照片对应的相机位置解算结果不是唯一的。虽然真实的相机位置是唯一的,但由于对同一个相机位置进行了多次观测,一定会产生误差。一般地,假设未知分布的误差项服从高斯分布(同方差下高斯分布信息熵最大),因此构造的三维点还原不重叠损失函数都是关于距离的平方的。此时最优化类似于弹簧网(能量正比于误差平方)的结构。如果有外部位置信息,可以理解成弹簧网固连在建筑物上,因此最优位置是确定的;如果没有则只有"弹簧"之间的位置是有最优解的,这张"弹簧网"在哪里则是可以任意解释的,与最优化过程无关。

解这种优化问题的方法是建立优化图,构造对应的雅克比矩阵J和海森矩阵H。进行Gauss-Newton或Levenberg–Marquardt下降。这里有一些把有冗余的旋转阵(李群)变成无冗余的向量(李代数)之类的数学技巧,就不过多介绍了。
经过多次下降,一般会得到一个较接近最优解的结果。

5. 点云生成

经过最优化,每张照片相机的位置和特征点对应的空间位置已经确定(这里注意,如果照片的exif信息没有GPS位置,也没有提供GCP的话,图像中物体的大小是不知道的。此时SE(3)变换退化成Sim(3)变换)。可以重建较为稀疏的点云,将特征点的位置通过三角计算还原到3d空间中。

6. 点云稠密化及过滤

通过上一步的粗匹配和粗点云,逐步求精的细化局部,提取更多的特征(不一定是特征点,也可能是区域块),进行匹配,得到较为稠密的点云。
一般的,一张图像的SIFT/SURF特征点只有几十个到几百个。这种匹配是很鲁棒的,但显然即使这些点全部匹配上也不足以恢复任何有价值的图形。这就需要稠密化点云,利用之前的相机位置姿态信息(后简称位姿)逐步求精的恢复出更稠密的点云。
由于是局部匹配,即使不使用SIFT,SURF等特别鲁棒的算法,产生误匹配的影响也不大。一般采用Patch Matching的方法一次匹一块区域。经过这步处理,模型的表面会产生许多三维顶点(Vertex)。这些顶点将出现在最终的三维模型中。
在特征点匹配和点云稠密化的过程中,一定会产生很多和模型本地没关系的杂点。这些点分布在三维空间的各个位置,如不去除,将严重影响后面面片的生成(会产生很多很大的,形状诡异的面,使模型无法观看)。因此需要使用一些滤波算法,过滤掉明显是错误的点。(如离主体建筑很远,孤立在空中的一个或几个点,在一个大凸包体内的离其他点群较远的点)

7. 三角剖分生成面片与面片精修

经过上面的操作,我们已经获得了数目在几万个到几千万个之间的三维顶点(取决于图像的数量和分辨率,场景的大小和纹理是否多变等)。此时通过Delaunay三角剖分,即可获得一组均匀三角形,这组三角形将包含三维图中的每一个顶点。这时场景的表面结构将清晰可见,只是这些面片(Face)还没有颜色,仅有顶点有颜色。
这时生成的面片可能较为粗糙,且包含较多杂散的不属于物体的部分。可以使用一些精修算法精修这些面片,获得更合理的模型。

未填充纹理的面片
未填充纹理的面片

8. 填充纹理

每个剖分得到的三角形将会对应原图像中一个部分。将这些部分裁剪下来,贴入对应的小三角形,即可获取颜色,纹理都较为逼真的三维模型。至此,三维还原重建的整个流程已经走完

填充后的面片
填充后的面片


讲完了三维重建的算法原理,下面介绍一些常用软件

  1. Meshlab
    常用的查看,编辑三维模型的软件。内置了一些功能便于精修模型。可以说是必备的软件。
  2. VisualSfM
    可以方便的生成到稀疏点云这一步。如果需要精修,考虑下一步使用其他软件。
  3. OpenMVG
    可以从原始图像进行到较为稠密的点云。
  4. OpenMVS
    从稀疏点云出发,得到最终的带纹理模型。
  5. MVE
    从原始图像出发,得到较为稠密的点云。

这些软件都是免费的。除了VisualSfM之外都是开源的。但这些软件的配置部署大多需要Linux平台下做许多配置工作,后期处理也有许多繁琐的技巧。如果您不关心这些模型具体的实现过程,只希望快速得到理想的模型,可以考虑使用我司出品的在线工具快速生成。这一工具将很快被放到dimianzhan.com的一个子站供大家免费试用。