2. 中国科学院 沈阳计算技术研究所, 沈阳 110168;
3. 陆军炮兵防空兵学院 士官学校, 沈阳 110867
2. Shenyang Institute of Computing Technology, Chinese Academy of Sciences, Shenyang 110168, China;
3. NCO School, Artillery and Air-defense Forces Academy of Army, Shenyang 110867, China
近几十年来, 在计算机图形学、虚拟现实和通信等方面人们对3D模型的需求和要求与日俱增. 但是用于构建3D模型的许多现有系统是围绕专用硬件(例如立体设备)构建的, 导致成本较高, 不能满足其新应用的要求. 对于集成虚拟和真实数据的许多应用来说从摄影图像自动重建物体和环境的三维模型是很重要的. 其中稠密重建是至关重要的一环, 对其相关算法进行改进和优化具有十分重要的意义. 近年来, 国内外学者对稠密重建相关算法进行深入的研究, 并提出了许多优秀的算法.
通常用基于特征分割的区域增长和聚类的方法, 而基于体素的算法很少使用. 区域增长的方法是从具有预定标准的点云中选择种子点, 然后把满足种子点预定要求的所有相邻点添加到与种子点相同的子集中. 随后, 选择除此种子点之外的子集中满足预定标准的点作为新的种子点. 重复该过程直到不能将任何点添加到子集中[1]. 但是该方法计算量大、且效率不高, 难以满足时效需求.
Yasutaka Furukawa等人在2009年提出基于面片的多视图立体三维稠密重建PMVS算法, 其在三维重建的完整性和精度上都具有较为突出的表现[2]. 目标体的图片经过特征点匹配, 扩展, 过滤等步骤生成稠密点云, 相比较于其他稠密重建算法该算法准确, 简单, 高效, 能够自动检测和忽略外部点和障碍点, 是现在使用最广泛的方法之一. 但是在纹理稀疏的区域重建效果不好, 甚至出现孔洞残缺, 部分细节失真的情况.
本文针对上述问题提出了基于像素插值的特征点选取算法和对PMVS候选点匹配策略的改进优化. 该方法不仅能保证纹理稀疏区域较好的重建效果, 还能提高效率有效剔除误匹配点, 得到多且分布均匀的稠密点云数据.
1 PMVS算法PMVS是用于多视图立体视觉稠密重建的算法, 是一种使用同一物体不同角度的多幅图像进行三维建模的技术, 其需要的图像数量至少两幅. 该算法最终输出一组覆盖整个重建目标可见部分的小矩形块密集集合. PMVS的实现过程有匹配, 扩展和过滤, 从稀疏的匹配关键点集开始, 重复扩展, 然后经过可见性约束来过滤掉错误匹配. 过程如下图所示:
1.1 初始化特征点检测与匹配
首先对输入的一组图片用Harris和DoG算子来提取图像的特征角点, 最终产生面片的稀疏集合, 作为种子点. 在每张图片上划分网格, 每个网格大小为a×a (a=32 pixel)且选择n(n=4)个局部极大值点. 当前操作图片作为参考图像, 剩余的图片作为其他图像. 进行特征点对匹配时, 选取其他图片中主光轴与参考图像夹角小于60度的图片[3]. 对于每张图片, 以及对应的光心, 依次作为参考图像按照极线约束在其他图像中进行同种类型特征点匹配, 由每一特征点对按照三角化方法求出模型点坐标. 然后由模型点轮流初始化patch, 直至成功.
1.2 面片扩散由于初始匹配只有一组稀疏的面片, 因此扩展对于生成足够密集的面片非常重要. 上一步生成的稀疏点依次作为种子面片向其领域进行扩散. 新生成的面片具有和种子面片相同的法向量, 通过邻域网格中心的光线与种子面片所在平面的交点作为其中心. 若邻域内已经存在平均相关系数较大的patch, 则不向该邻域扩散[3,4]. Patch投影到图片和参考图片之间的相关系数要大于阈值则认为是成功扩散了一个patch, 否则失败. 稀疏面片集中的每个patch依次作为种子点进行扩展, 直至每幅图片的每个网格
过滤是为了尽可能的去除一些面片扩展中生成的错误面片, 以此来提高重建的准确性. 滤除的过滤器大都遵从可视一致性的原则: 过滤掉网格中不连续的面片; 通过每个面片P和它八邻域内映射的面片数进行二次曲面拟合, 过滤掉八邻域残差之和大于阈值的面片P; 通过深度测试计算得到可视面片组的数目, 对于数量较小的patch组会被认为是异常值过滤掉[3].
2 特征点选取一些角点检测方法, 如Harris等, 是旋转不变的. 这意味着, 即使图像旋转, 我们也可以找到相同的角点[5–7]. 这很明显, 因为角点在旋转的图像中也是角点, 但是在缩放的图像中角点可能就不是角点了. 所以Harris不是尺度不变的.
尺度不变特征变换(SIFT)是计算机视觉中的特征检测算法. 在加拿大获得专利, 并于1999年由David Lowe出版[8]. 应用包括物体识别, 机器人绘图和导航, 图像拼接, 3D建模, 手势识别和视频跟踪.
2.1 SIFT算法SIFT的一个重要特征是特征点在原始场景中的相对位置不会随着图像的角度变换而改变. 如果正在处理的集合中的两个图像之间存在几何形状的变化, 则位于形变对象中的特征通常不起作用. 然而, 在实践中SIFT并不受尺度的影响, 可以检测到来自图像的更多特征, 减少了由这些局部变化引起的平均误差. SIFT还可以在噪点和部分遮挡下稳健地识别物体, 因为SIFT特征描述符对于均匀缩放, 方向、光照变化和仿射失真是不变的.
SIFT方法从图像特征生成大量特征向量, 每个特征向量对于图像平移, 缩放和旋转都是不变的, 对于照明变化是部分不变的, 对局部几何失真是鲁棒的. 在一系列平滑和降采样图像的尺度空间中应用高斯卷积得到结果的最大值和最小值定义为关键点, 沿着边缘的低对比度候选点和边缘响应点则被剔除. 主导方向作为关键点的方向. 高斯差分公式如下:
$D(x,y,\sigma ) = L(x,y,{k_i}\sigma ) - L(x,y,{k_j}\sigma )$ | (1) |
其中,
$L(x,y.k\sigma ) = G(x,y,k\sigma )*I(x,y)$ | (2) |
$G(x,y,\sigma ) = \frac{1}{{2\pi {\sigma ^2}}}{e^{ - \frac{{{x^2} + {y^2}}}{{2{\sigma ^2}}}}}$ | (3) |
但是对于纹理稀疏的区域SITF选取的局部极值点有限, 最后得到的点稀疏且不均匀. 为了获得更多对比度较好的关键点, 在选取同种特征点时, 一般选择降低阈值, 但这种方法增加特征点个数的同时, 干扰因素也相应增加了. 为了解决这个问题, 在SIFT计算过程中得到极值点后, 加入像素插值的计算, 然后在与阈值进行比较来提取特征点.
2.2 像素插值通过SIFT算法计算得到的关键点存在噪声点, 所以要通过阈值筛选来剔除一些低对比度和不稳定的边缘关键点. 在这里像素插值的作用就是不用降低阈值, 也能筛选出一些低于阈值但有较高对比度的关键点[9]. 插值公式如下:
$\begin{split} F(x,y) =& (1 - u)(1 - v){F_0}(x,y) + n[(1 - u)v{F_0}(x,y + 1) + \!\!\!\!\!\!\!\! \\ &u(1 - v){F_0}(x + 1,y) + uv{F_0}(x + 1,y + 1)] \end{split} $ | (4) |
式中,
$ \mathop {\left[\begin{array}{*{20}{c}} {3.1}&{2.7}&{3.1}\\ {3.4}&{4.0}&{3.8}\\ {3.5}&{3.2}&{3.4} \end{array}\right]}\limits_{\left( a \right)} $ |
$ \mathop {\left[\begin{array}{*{20}{c}} {2.1}&{2.7}&{2.0}\\ {1.1}&{4.0}&{1.7}\\ {1.2}&{2.4}&{2.3} \end{array}\right]}\limits_{\left( b \right)} $ |
前提:矩阵(a)是需要重建的目标区域, (b)是不需要重建的非目标区域. 假设:阈值
这两个窗口的中心都是极值4. 0, 根据预设条件这两个窗口的极值点不会被筛选出来. 但通过前提条件可知, (a)这个窗口是应该被选取的. 否则无法保证该部分的重建精度. 根据式(4), 不妨设
$ \mathop {\left[\begin{array}{*{20}{c}} {3.1}&{2.7}&{3.1}\\ {3.4}&{4.129}&{3.8}\\ {3.5}&{3.2}&{3.4} \end{array}\right]}\limits_{\left( {a*} \right)} $ |
$ \mathop {\left[\begin{array}{*{20}{c}} {2.1}&{2.7}&{2.0}\\ {1.1}&{4.043}&{1.7}\\ {1.2}&{2.4}&{2.3} \end{array}\right]}\limits_{\left( {b*} \right)} $ |
从上述结果看出, (a)插值后的窗口(a*)中可以提取到特征点, 而(b*)中不符合条件, 这样就与前提相符. 插值计算并没有改变原来图像中的像素值, 只在特征点选取时将符合条件的点筛选出来. 这样一来不仅能增加纹理稀疏区域的特征点, 使得获得的特征点多且均匀, 还为后面的稠密重建提供更多的信息, 提高重建的完整性.
3 改进候选点选取策略PMVS算法对一般的模型重建效果较好, 但模型表面凹凸不平, 粗糙不光滑时, PMVS算法在生成种子候选点时可能出现错误匹配, 导致细节出错. 前面已经提到了, 在初始特征匹配时, 参考图像上的每一个特征点在其他图像上寻找候选的匹配点, 每一对候选匹配点对交会得到模型点. 然后求得模型点与参考图像摄像机中心的投影距离, 把模型点按照距离升序排序[10]. 这种方式在图2点A和B的选取中是适用的, 但是并不适用与C和D的选取. 如图2所示, 设原点为光心, 假设A, B, C, D四点为候选模型点. 当投影距离和直线距离成正比时, 投影距离可代替直线距离, 如点A和B中自然是选择更近的点A. 但也有特殊的情况, 如图中的点C和D, 从图中可以看出C点的投影距离小于D点的投影距离, 按照原有的方法应该选取C点. 但C点距光心直线距离比D点大, 实际上D点更近些, 应该首选D点. 至此, 我们可以看出原来的方法会造成特征点匹配失误, 增加匹配时间且影响最终重建效果. 所以本文提出在匹配候选点选取时改投影距离为直线距离, 这样可以兼顾多种情况, 选取的候选点会更加可靠, 理论上重建效果比原来要好.
下面给出改进算法的基本步骤和算法流程图:
PMVS改进算法
1) 根据SIFT方法提取所有图像的DoG空间极值点;
2) 计算所有局部极值点的像素插值, 再通过尺度空间DoG函数进行曲线拟合, 进行阈值筛选;
3) 对模型点到摄像机光心的实际距离进行升序排序, 然后进行初始特征点匹配;
4) 生成初始patch, 作为种子点;
5) 选择初始种子点进行面片扩展, 得到空间有向面片的稠密集合;
6) 对错误的点云数据进行滤除;
7) 步骤5)至步骤6)重复至少3次, 完成物体的稠密三维重建.
4 实验结果与分析本文使用VS 2015和OPENCV构架实验平台, 并对本文算法和Yasutaka Furukawa等人提出的PMVS算法在特征点数和时间效率上进行比较分析. 为了验证算法的有效性, 实验选取了不同场景, 如建筑物、玩偶、行人、车辆等, 这里本文只列举了两类数据集中两组图片的重建效果和实验数据, I类数据集取自https://github.com/openMVG/ImageDataset_SceauxCastle/tree/master/images, 包括11张图片, II类数据集是用oppo手机拍摄的不同角度下的同一场景, 包括33张图片. 算法运行环境为CPU:Intel(R) CoreTM i5-2450M 2. 5 GHz, 内存: 4 GB.
图4结果对比图中的(b)、(c)组图是示例图像的局部区域, (b)是SIFT算法提取特征点效果, (c)是加入插值计算的效果, 可以看出, 引入插值计算的部分提取到了更多的特征点, 从而使得重建效果更好更完整. 根据表1可知, 本文像素插值算法在进行特征提取时比经典SIFT算法提取的特征点增加了19%–27%;改进PMVS候选点选取策略后与经典PMVS算法重建获得面片数增加了26%–28%, 虽耗费的时间有所增加, 但从图4中的(d)、(e)可知重建效果更好了, 填补了孔洞区域, 失真的边缘部分区域细节更完善了.
5 结论
将PMVS算法初始特征选取时的Harris方法改为尺度不变的SIFT算法, 在过程中引入像素插值计算, 并在匹配候选模型点时采用距相心直线距离的策略. 从实验结果可以看出, 在一些纹理稀疏的区域该方法提取到了更多分布均匀的种子点, 且效果显著, 使稠密重建细节更加清晰, 减少因错选匹配点而造成的信息错误, 获得更精确的稠密点云模型. 因此, 本文提出的方法具有更好的效果和实用性.
[1] |
秦红星, 胡勇强. 基于区域生长的稠密三维点云重建方法. 计算机工程与设计, 2016, 37(2): 465-469. |
[2] |
Furukawa Y, Ponce J. Accurate, dense, and robust multiview stereopsis. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2010, 32(8): 1362-1376. DOI:10.1109/TPAMI.2009.161 |
[3] |
Patch-based multi-view stereo software (PMVA-2). https://wenku.baidu.com/view/f9a27eee9b6648d7c1c746f9.html, 2009.
|
[4] |
Furukawa Y, Ponce J. Patch-based multi-view stereo software (PMVS - Version 2). http://www.di.ens.fr/pmvs/, 2018-08-17.
|
[5] |
王刘正. 稠密点云生成算法的研究[硕士学位论文]. 沈阳: 辽宁大学, 2016.
|
[6] |
陈攀. 多视图三维重建及其评估算法的研究[硕士学位论文]. 武汉: 华中师范大学, 2016.
|
[7] |
陈冉. 基于准稠稠密匹配配方法的的PMVS算算法改进[硕士学位论文]. 北京: 北京工业大学, 2014.
|
[8] |
Lowe DG. Distinctive image features from scale-invariant keypoints. International Journal of Computer Vision, 2004, 60(2): 91-110. DOI:10.1023/B:VISI.0000029664.99615.94 |
[9] |
肖庆汇. 基于序列图像稠密匹配的三维重建[硕士学位论文]. 南昌: 南昌航空大学, 2011.
|
[10] |
史颖, 王文剑, 白雪飞. 多特征三维稠密重建方法. 计算机科学与探索, 2015, 9(5): 594-603. |