隗 娜,郭向坤,董志勇,张兆伟
1(中国科学院大学,北京 100049)
2(中国科学院 沈阳计算技术研究所,沈阳 110168)
3(陆军炮兵防空兵学院 士官学校,沈阳 110867)
近几十年来,在计算机图形学、虚拟现实和通信等方面人们对3D 模型的需求和要求与日俱增.但是用于构建3D 模型的许多现有系统是围绕专用硬件(例如立体设备)构建的,导致成本较高,不能满足其新应用的要求.对于集成虚拟和真实数据的许多应用来说从摄影图像自动重建物体和环境的三维模型是很重要的.其中稠密重建是至关重要的一环,对其相关算法进行改进和优化具有十分重要的意义.近年来,国内外学者对稠密重建相关算法进行深入的研究,并提出了许多优秀的算法.
通常用基于特征分割的区域增长和聚类的方法,而基于体素的算法很少使用.区域增长的方法是从具有预定标准的点云中选择种子点,然后把满足种子点预定要求的所有相邻点添加到与种子点相同的子集中.随后,选择除此种子点之外的子集中满足预定标准的点作为新的种子点.重复该过程直到不能将任何点添加到子集中[1].但是该方法计算量大、且效率不高,难以满足时效需求.
Yasutaka Furukawa 等人在2009年提出基于面片的多视图立体三维稠密重建PMVS 算法,其在三维重建的完整性和精度上都具有较为突出的表现[2].目标体的图片经过特征点匹配,扩展,过滤等步骤生成稠密点云,相比较于其他稠密重建算法该算法准确,简单,高效,能够自动检测和忽略外部点和障碍点,是现在使用最广泛的方法之一.但是在纹理稀疏的区域重建效果不好,甚至出现孔洞残缺,部分细节失真的情况.
本文针对上述问题提出了基于像素插值的特征点选取算法和对PMVS 候选点匹配策略的改进优化.该方法不仅能保证纹理稀疏区域较好的重建效果,还能提高效率有效剔除误匹配点,得到多且分布均匀的稠密点云数据.
PMVS 是用于多视图立体视觉稠密重建的算法,是一种使用同一物体不同角度的多幅图像进行三维建模的技术,其需要的图像数量至少两幅.该算法最终输出一组覆盖整个重建目标可见部分的小矩形块密集集合.PMVS 的实现过程有匹配,扩展和过滤,从稀疏的匹配关键点集开始,重复扩展,然后经过可见性约束来过 滤掉错误匹配.过程如下图所示:
图1 PMVS 算法流程图
首先对输入的一组图片用Harris 和DoG 算子来提取图像的特征角点,最终产生面片的稀疏集合,作为种子点.在每张图片上划分网格,每个网格大小为a×a(a=32 pixel)且选择n(n=4)个局部极大值点.当前操作图片作为参考图像,剩余的图片作为其他图像.进行特征点对匹配时,选取其他图片中主光轴与参考图像夹角小于60 度的图片[3].对于每张图片,以及对应的光心,依次作为参考图像按照极线约束在其他图像中进行同种类型特征点匹配,由每一特征点对按照三角化方法求出模型点坐标.然后由模型点轮流初始化patch,直至成功.
由于初始匹配只有一组稀疏的面片,因此扩展对于生成足够密集的面片非常重要.上一步生成的稀疏点依次作为种子面片向其领域进行扩散.新生成的面片具有和种子面片相同的法向量,通过邻域网格中心的光线与种子面片所在平面的交点作为其中心.若邻域内已经存在平均相关系数较大的patch,则不向该邻域扩散[3,4].Patch 投影到图片和参考图片之间的相关系数要大于阈值则认为是成功扩散了一个patch,否则失败.稀疏面片集中的每个patch 依次作为种子点进行扩展,直至每幅图片的每个网格Ci(x,y)中至少有一个重建patch 为止.
过滤是为了尽可能的去除一些面片扩展中生成的错误面片,以此来提高重建的准确性.滤除的过滤器大都遵从可视一致性的原则:过滤掉网格中不连续的面片;通过每个面片P和它八邻域内映射的面片数进行二次曲面拟合,过滤掉八邻域残差之和大于阈值的面片P;通过深度测试计算得到可视面片组的数目,对于数量较小的patch 组会被认为是异常值过滤掉[3].
一些角点检测方法,如Harris 等,是旋转不变的.这意味着,即使图像旋转,我们也可以找到相同的角点[5-7].这很明显,因为角点在旋转的图像中也是角点,但是在缩放的图像中角点可能就不是角点了.所以Harris 不是尺度不变的.
尺度不变特征变换(SIFT)是计算机视觉中的特征检测算法.在加拿大获得专利,并于1999年由David Lowe 出版[8].应用包括物体识别,机器人绘图和导航,图像拼接,3D 建模,手势识别和视频跟踪.
SIFT 的一个重要特征是特征点在原始场景中的相对位置不会随着图像的角度变换而改变.如果正在处理的集合中的两个图像之间存在几何形状的变化,则位于形变对象中的特征通常不起作用.然而,在实践中SIFT 并不受尺度的影响,可以检测到来自图像的更多特征,减少了由这些局部变化引起的平均误差.SIFT 还可以在噪点和部分遮挡下稳健地识别物体,因为SIFT 特征描述符对于均匀缩放,方向、光照变化和仿射失真是不变的.
SIFT 方法从图像特征生成大量特征向量,每个特征向量对于图像平移,缩放和旋转都是不变的,对于照明变化是部分不变的,对局部几何失真是鲁棒的.在一系列平滑和降采样图像的尺度空间中应用高斯卷积得到结果的最大值和最小值定义为关键点,沿着边缘的低对比度候选点和边缘响应点则被剔除.主导方向作为关键点的方向.高斯差分公式如下:
其中,σ是尺度因子,k是相邻两个尺度空间倍数的常数.因此,尺度kiσ和kjσ之间的DoG 图像恰好是尺度kiσ 和kjσ处的高斯模糊图像的差异.其中L(x,y,σ)是原始图像I(x,y)与高斯模糊函数G(x,y,σ)在 尺度空间kσ上的卷积:
但是对于纹理稀疏的区域SITF 选取的局部极值点有限,最后得到的点稀疏且不均匀.为了获得更多对比度较好的关键点,在选取同种特征点时,一般选择降低阈值,但这种方法增加特征点个数的同时,干扰因素也相应增加了.为了解决这个问题,在SIFT 计算过程中得到极值点后,加入像素插值的计算,然后在与阈值进行比较来提取特征点.
通过SIFT 算法计算得到的关键点存在噪声点,所以要通过阈值筛选来剔除一些低对比度和不稳定的边缘关键点.在这里像素插值的作用就是不用降低阈值,也能筛选出一些低于阈值但有较高对比度的关键点[9].插值公式如下:
式中,F(x,y)代表插值后的像素值,F0(x,y)代表原来图像坐标为(x,y)处的像素值,其中u(0 <u<1),n(0 <n<10).假设3×3窗口像素矩阵分布如下:
前提:矩阵(a)是需要重建的目标区域,(b)是不需要重建的非目标区域.假设:阈值|ε|>4.1.
这两个窗口的中心都是极值4.0,根据预设条件这两个窗口的极值点不会被筛选出来.但通过前提条件可知,(a)这个窗口是应该被选取的.否则无法保证该部分的重建精度.根据式(4),不妨设u=v=0.01,n=3,则计算得到插值后的像素排列是:
从上述结果看出,(a)插值后的窗口(a*)中可以提取到特征点,而(b*)中不符合条件,这样就与前提相符.插值计算并没有改变原来图像中的像素值,只在特征点选取时将符合条件的点筛选出来.这样一来不仅能增加纹理稀疏区域的特征点,使得获得的特征点多且均匀,还为后面的稠密重建提供更多的信息,提高重建的完整性.
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点.至此,我们可以看出原来的方法会造成特征点匹配失误,增加匹配时间且影响最终重建效果.所以本文提出在匹配候选点选取时改投影距离为直线距离,这样可以兼顾多种情况,选取的候选点会更加可靠,理论上重建效果比原来要好.
图2 候选点与光心距离示意图
下面给出改进算法的基本步骤和算法流程图:
PMVS 改进算法
1) 根据SIFT 方法提取所有图像的DoG 空间极值点;
2) 计算所有局部极值点的像素插值,再通过尺度空间DoG 函数进行曲线拟合,进行阈值筛选;
3) 对模型点到摄像机光心的实际距离进行升序排序,然后进行初始特征点匹配;
4) 生成初始patch,作为种子点;
5) 选择初始种子点进行面片扩展,得到空间有向面片的稠密集合;
6) 对错误的点云数据进行滤除;
7) 步骤5)至步骤6)重复至少3 次,完成物体的稠密三维重建.
本文使用VS 2015 和OPENCV 构架实验平台,并对本文算法和Yasutaka Furukawa 等人提出的PMVS 算法在特征点数和时间效率上进行比较分析.为了验证算法的有效性,实验选取了不同场景,如建筑物、玩偶、行人、车辆等,这里本文只列举了两类数据集中两组图片的重建效果和实验数据,I 类数据集取自https://github.com/openMVG/ImageDataset_SceauxCastl e/tree/master/images,包括11 张图片,II 类数据集是用oppo 手机拍摄的不同角度下的同一场景,包括33 张图片.算法运行环境为CPU:Intel(R) CoreTMi5-2450M 2.5 GHz,内存:4 GB.
图4结果对比图中的(b)、(c)组图是示例图像的局部区域,(b)是SIFT 算法提取特征点效果,(c)是加入插值计算的效果,可以看出,引入插值计算的部分提取到了更多的特征点,从而使得重建效果更好更完整.根据表1可知,本文像素插值算法在进行特征提取时比经典SIFT 算法提取的特征点增加了19%-27%;改进PMVS 候选点选取策略后与经典PMVS 算法重建获得面片数增加了26%-28%,虽耗费的时间有所增加,但从图4中的(d)、(e)可知重建效果更好了,填补了孔洞区域,失真的边缘部分区域细节更完善了.
图4 实验结果对比图
将PMVS 算法初始特征选取时的Harris 方法改为尺度不变的SIFT 算法,在过程中引入像素插值计算,并在匹配候选模型点时采用距相心直线距离的策略.从实验结果可以看出,在一些纹理稀疏的区域该方法提取到了更多分布均匀的种子点,且效果显著,使稠密重建细节更加清晰,减少因错选匹配点而造成的信息错误,获得更精确的稠密点云模型.因此,本文提出的方法具有更好的效果和实用性.
表1 对比试验结果图