涂福泉,魏斯佳
(武汉科技大学冶金装备及其控制教育部重点实验室,湖北 武汉,430081)
随着机器视觉技术的发展,图像三维重建技术因成本低且易于实现,已成为工业零件质量检测的有效方法之一。三维重建根据二维图像提供的三维信息对目标物体进行恢复,其准确性主要依赖于对图像间场景重叠的识别。运动恢复结构(structure from motion,SfM)作为三维重建中最常用的方法之一,其能恢复一系列无序图像的三维空间点和相机姿态,应用场景广泛且复杂,但也存在一定的问题[1],如机械工程领域中轴承、齿轮、液压件等零件常存在重复性结构,这种相似、模糊的结构极易导致重建得到错误模型,即使Colmap、Bundler等主流软件也难以避免该类问题的发生[2]。
为此,Zach等[3-4]提出了“缺失对应”的概念,即获取3张匹配良好的图像构成视图三联体,通过第3张图像中的补充信息来完善图像间的对极几何关系,以此来检测和去除不正确视图,但该方法较为绝对,很可能会排除正确视图。针对此概念,Jiang等[5]提出了一种新的优化标准,他们首先证明了所述目标函数的全局最小值与正确的三维重建相关,然后设计了一个有效的最小化算法以保证目标函数收敛至最小值,该方法可用于处理高度歧义场景,但无法用于区分非连通模型。不少研究者认为重复结构中的背景信息同样具有利用价值,如Wilson等[6]根据可见性图中的局部背景信息来剔除错误的特征点轨迹,该方法适用于大规模网络数据集,Heinly等[7]对此方法进行改进,但某些情况下仍存在模型过分割问题。Yan等[8]认为视觉上模糊相似的结构也存在测地线距离,由此提出一种基于测地线一致性的方法来检测重复结构,但相关参数仍需要根据特定场景来调整,该方法难以有效推广。张浩鹏等[9]提出将序列目标图像的成像时间顺序作为先验指导,然后依次加入新图像以实现空间与时间的结合,但该方法不适用于无序图片。Kataria等[10]改进了相机初始位姿估计,仅使用可靠的匹配点来初始化位姿,并赋予短的匹配轨迹更大权重,该方法能在一定程度上减少因重复结构引起的歧义信息。Xu等[11]开发了一种基于图像相关性的图像自动聚类方法,并创建了一个最优合并列表来决定合并顺序,但重复性结构的存在仍可能造成聚类紊乱。
为解决重复性结构零件的三维重建精度问题,本研究对SfM方法中特征点对应搜索和增量三维重建两个关键步骤进行改进,即在对应搜索阶段提出一种基于匹配点空间相关的方法,以去除错误匹配,并利用冲突度量对三维结构恢复的稀疏点云进行优化,最后通过对比实验来检验所提算法的有效性和精度,以期为三维重建技术在零件合格率检测领域的应用提供依据。
增量式三维重建方法的基本步骤如图1所示,本研究主要对特征点对应探索和增量式三维重建[12]步骤进行改进。
图1 增量三维重建基本流程
特征点检测与匹配是三维重建中的基础步骤,匹配质量很大程度上决定了最终重建模型的精度。经典SIFT(scale-invariant feature transform, SIFT)算法虽然具有尺度不变性,但其缺少对全局空间信息的约束,极易出现错乱匹配,故本文选用其改进算法SURF[13](speeded-up robust features,SURF)进行特征点检测,并使用FLANN[14](fast library for approximate nearest neighbors,FLANN)算法搜索匹配点。
FLANN是一种近似最近邻匹配算法,通常采用K-means树或多重随机KD树(K-dimension tree)等方法对高维实数向量空间进行搜索,能快速有效地处理SURF特征检测产生的64维描述子,其核心在于使用欧氏距离找到特征点之间的近似距离(式(1)),具体匹配过程如下:
(1)对图像X的特征点集{x1,x2,…,xn}与图像Y的特征点集{y1,y2,…,ym}进行欧氏距离计算,找到特征点xi的最近邻yj和次近邻yk:
(2)分别计算yj、yk到xi的欧氏距离D1、D2,得到比值d=D1/D2;
(3)设置阈值μ(μ<1),并比较d与μ:若d<μ,则yj为xi的匹配点,否则该点匹配失败,xi无对应匹配点。
(1)
式中:X、Y为一对待匹配点的SURF特征向量;当使用SURF特征检测时,d取64。D(x,y)值越小,表明两者距离越“近”,即相似程度越高。
FLANN算法得到的初始集合中包含许多低精度匹配点,故需进一步剔除低相关数据点以获得精确匹配。图2所示为直接使用随机抽样一致算法(random sample consensus,RANSAC)对FLANN匹配进行处理后所得到的图像对,可以看出,图中仍存在明显错误,爪极内部下方区域有部分特征点错误匹配到爪极上部,如图中a、b点所示。
图2 SURF+FLANN+RANSAC算法得到的匹配图像
针对该类误匹配问题,本文提出了一种基于匹配点空间相关的解决方法,即利用特征点簇的内部相关性,假定在空间中属于同一区域的特征点对应在二维图像中的大部分特征点是接近的,依此在RANSAC之前对图像中匹配点进行过滤。从图像A左上角的第一个像素点开始寻找匹配点,对“密集”区域的错误特征匹配进行剔除。以匹配点Ai为圆心,在半径为R(R=50)的区域内搜索,当匹配点数目不小于15时,称该区域为“密集”匹配区域OAi,随即进行下一步检测;否则,继续搜索以下一个匹配点为圆心的区域,直至满足“密集”条件。在图像B中找到Ai的匹配点Bj,以Bj为圆心、R′为半径,确定区域圆OBj,与OAi构成对应,其中A为主图像,B为A的待匹配图像。假设圆OAi与OBj中的点全部在区域内形成匹配,则认为两圆内的点匹配正确;若存在圆OAi内的某点与圆OBj外的另一点相匹配,则认为两区域匹配可疑,需进一步分析。根据与OBj匹配位置的不同,将OAi中的点分为内点和外点,内点表示OAi中匹配在OBj内部的点,其余为外点。若内点数目小于外点,则将内点视为疑点,暂存疑点集S1,反之,外点为疑点。当以疑点集S1中的点为圆心进行匹配时同样能够得到疑点集S2,删除两点集公共部分的匹配点,认为该部分匹配点为误匹配点。
以图2为例,圆OAi中除a点以外的其他点全部在区域圆OBj内形成对应,匹配点对a、b点可疑,进而可根据上述方法剔除该类型的错误匹配点,即:
(2)
通过以上步骤可去除大部分误匹配点,最后使用RANSAC算法对其进行细化。
对典型增量SfM输出的稀疏点云进行后处理优化,流程如图3所示,其中在评估拆分相机对的有效性时需要对特征点进行明确区分。
(a)初始相机图 (b)MST构造和图像分割 (c)图像对评估 (d)超像素分割
(1)构建最小生成树(minimum spanning tree,MST)
根据图像间的几何约束关系得到一组空间相关的相机图[3](camera graphs,CGs),节点对应于相机,当两相机存在足够的匹配点时,使用边连接,如图3(a)所示。为减小重复结构的影响,使用式(3)计算边缘权重,并由此构造MST,得到权重之和最小的树结构来减少边数量。
(3)
式中:Oi、Oj是在每个相机中可见的3D点的集合,wij为i、j两相机之间的边缘权重。
具有较小wij值的边缘将同一结构的相邻相机组合起来,而具有较大wij的边缘则表示相机可能连接错误,即对应为混淆边缘(如图3(b)中e2表示的边缘),故需要对该类边缘进行分割,生成两个不同的相机子图,进而评估拆分的有效性。
(2)图像对分割与评估
原本连接的视图中有一部分会因构造生成树而被分割,并且随着混淆边缘的断开而处于两个不同的相机子图中(如图3(c)所示e1、e2、e3连接的视图对),对于这些视图对,使用冲突度量来判断是否拆分。冲突度量将场景中的独特点投影到相机对的另一个图像中,当独特点存在大量重叠时,将其视为错误连接[7]。
为简化相机拆分图并减少计算量,首先对其进行初始筛分,断开具有明显错误的连接。将待分割的两个相机子图表示为A组和B组,分别得到两组中所有3D点的集合JA、JB,为减小噪声影响,其中每个3D点均能在3个以上的相机中观察到,因此,可将各点分为以下两类:两组之间的匹配点DAB(将其视为可能的重复结构点)和两组中的唯一点UA、UB,即:
(4)
根据式(5),若唯一点与重复结构点的比值超过阈值α,则在忽略少量因匹配错误而产生的唯一点外,认为两子图中存在完全不同的场景,可对两图连接的混淆边缘进行分割。此方法可在一定程度上避免遮挡或大视点情况的影响。
(5)
N=near(U′1,proj(U′2))∩
near(U′2,proj(U′1))
(6)
式中:near()函数用于计算处于同一超像素内的点,proj()函数计算该点处于图像对中另一幅图像的投影点。
t=min(|{u1:u1∈U′1∧u1∈N}|,|{u2:u2∈U′2∧u2∈N}|)
(7)
独立计算所有存在混淆边缘的相机组,若冲突值高于阈值τ,则拆除该边。待获得所有正确相机子图后,将其融合为完整的三维重建模型。
本研究使用Python-OPenCV和Matlab软件作为算法的主要运行平台,在Windows10 64位操作系统(内存16 GB、8核16线程,CPU i7-10700、2.90 GHz)下实现,测试对象为3000像素×4000像素的爪极图像。
特征匹配阶段是在PyCharm平台上利用OpenCV3.4.2软件运行改进算法。图4(a)为经过SURF特征检测及FLANN匹配后得到的图像对,图4(b)则是后续再使用匹配点空间相关的方法去除误匹配得到的图像对。从视觉效果上看,使用SURF方法能提取出爪极图像中存在的丰富特征信息,并能通过FLANN实现有效匹配,然而由于重复结构的影响,图4(a)中存在许多错误匹配,图中标注出其中3对,经改进方法处理后,该现象得到改善,图4(b)中并未出现明显错乱匹配,具体验证结果如表1所示。
表1 特征匹配数据对比
(a)SURF+FLANN (b)SURF+FLANN+本文方法
三维重建实验在Matlab软件中进行,该阶段主要是利用改进的冲突度量方法对稀疏点云进行重建,并将重建结果与开源软件VisualSFM得到的稀疏模型相比较,然后利用基于聚簇和面片模型的多视角密集匹配(CMVS/PMVS)实现多视图稠密重建,得到最终三维重建结果。经过多次实验演算,阈值α设为1.0,冲突阈值τ设为7.0。
VisualSFM等成熟软件可对大多数三维场景进行准确重建,但若存在重复结构,VisualSFM软件极易出错。本实验主要拍摄了三组结构件的照片,包括103张小锥齿轮、38张爪机1和63张爪机2的图像,如表2所示,可以看出,图中均存在重复性场景或结构。当使用VisualSFM软件重建时,出现混乱缺损的三维点云,小锥齿轮和爪机2的稠密重建中明显出现了多个错误实体(椭圆标出的区域),而改进的冲突度量方法能对不同场景或结构进行有效区分。相比于Heinly等[7]提出的方法,本文提出的方法效率有所提升,例如对于爪机2,利用文献[7]提出的方法得到冲突值为0,即无需对其进行分割,表明该方法无法辨别本次实验中存在的错误,而使用改进的冲突度量方法能明显看出爪极形态,且计算速度加快8 s,表明本文提出的改进算法是有效的。
表2 实验重建模型
对冲突为0的稀疏点云进行稠密重建,并使用MeshLab进行可视化处理,得到结果如图5所示,对其中关键点进行测量得到相应的距离,为减少误差,每两点之间距离测量3次取平均值,然后与实际结构件的尺寸进行对比,结果列于表3中。结合图5和表3可知,本文提出算法的重建精度最高可达98.52%,这进一步验证了在工业中使用三维重建技术对零件合格率进行判别的可行性[15]。
表3 结构件的三维重建尺寸
(a)小锥齿轮 (b)爪机1 (c)爪机2
为提高重复性结构零件的三维重建精度,本文提出了一种基于SfM方法的改进算法。首先,针对SfM方法中特征信息匹配精度不高的问题,在对应搜索阶段提出一种匹配点空间相关的方法,改进方法有效减少了因重复结构所导致的错乱匹配;在三维重建阶段,提出了冲突度量方法对SfM输出的稀疏点云进行后优化处理,这能有效剔除错误连接,提高了SfM算法的鲁棒性,改进算法对重复零件的三维重建精度最高可达98.52%。