刘天赐,刘桂华,胡 莉,黄会明
(西南科技大学 信息工程学院,四川 绵阳 621010)
近年来,线结构光三维测量技术被广泛应用于越来越多的领域,比如尺寸测量、逆向工程、缺陷检测、目标识别以及焊缝跟踪等领域[1]。在线结构光测量系统中由于目标物表面起伏变化复杂,导致激光器投射条纹发生形变,再由CCD 拍摄有激光条纹照射的目标图像,然后根据提取到的激光线对物体进行三维测量。在此过程中激光中心线的精确提取是测量系统的关键步骤之一。
目前常用的方法主要有极值法、几何中心法、边缘法等[2-4],对激光线中心线定位较快且易于提取,但缺点是只能达到像素级,无法在高精度场合下应用,局限性较大,而且易受环境和噪声影响。灰度重心法[5]和Steger 算法[6]能够提取亚像素级的激光条纹中心线,灰度重心法运算速度快且易于实现,但只考虑光条的横向或者纵向,在条纹曲率变化较大时会产生较大误差。为了减少噪声干扰,潘硕等人[7]通过块匹配寻找结构光图像中的相似光条结构,求取它们的坐标均值作为最终的光条中心,但运行效率不高,对直线抗噪效果很好;
王利等人[8]有效结合条纹的二值宽度与灰度信息,使激光条纹在高噪声背景下仍能精确提取中心线;
胡斌等人 [9]在重心法基础上引入方向模板法提高了计算效率,但仅能计算出四个法线方向,限制了中心线提取精度。Steger 算法可以精确计算出激光条纹的方向,再进行二次泰勒展开求取极值得到亚像素激光点,其精度较高,但引入了多次高斯卷积,计算效率低下,不适合应用于实时场景。为了提高其计算效率,提出了一种基于主成分分析的中心线提取方法[10],将中心点的法线方向利用主成分分析的方法进行求取,避免了多次卷积,使其对比Steger 算法速度提高了近3 倍,但对灰度值饱和度较多的强光源图片提取精度不高。周源等人[11]在具有强光干扰的情况下,提出利用像素点的欧式距离和灰度值能量构建函数和最短路径搜索算法,对具有干扰的激光线进行中心提取,提高了运算效率和精度,但此方法提取的精度只能达到像素级,不适合精度较高的场景。由于环境噪声、物体表面的复杂性导致存在折线缺陷的问题,金俊等人[12]采用贝塞尔曲线拟合改善了光条中心折线特征,但其拟合的复杂性高。胡杨等人[13]结合主成分分析与灰度重心法提高了速度,但仅靠梯度幅值较大的边界点参与计算,很大程度上提取的精度取决于边界像素,因此易受边界噪声影响。
在实际三维测量中,针对投射在物体表面上的激光线变化趋势复杂,中心线提取精度不高、保留细节差等问题。本文提出了一种基于法线引导的激光中心线提取方法,该方法可以提取有效像素点集,用于灰度重心法提取亚像素级中心位置。此方法利用各种算法的特点,从而得到高精度的光条中心坐标。
1.1 提取感兴趣区域
首先,要找到有利于提取激光中心线的图像区域。由于在结构光图片中,存在大量的背景信息,而结构光条纹区域小且和图像背景区域的灰度值相差较大,为了能将感兴趣区域进行提取,本文采用自动阈值分割的大津阈值法[14]得出分割阈值,根据阈值将激光条纹区域提取出来。不但能减少背景参与后续计算过程的影响,还能提高提取结构光的速度。
1.2 修补断线
通过上述方法对图像进行初次预处理,虽能够自适应地将目标区域和背景区域的灰度阈值计算出来,但由于结构光部分区域位于图像边缘,导致对其进行拍摄时入射的能量不足,因此会出现部分中心线灰度值低于分割阈值,经图像分割后出现一些伪断线的情况。当把处于“断线”区域的原激光图片进行放大时,发现其灰度分布仍符合高斯分布,说明此位置也是激光线的一部分。在此,本文采取形态学闭运算的方法对其进行修补,其原理是对二值化后的激光线进行膨胀操作,用于连接图中断线情况,此时,激光线整体面积会增加,为了恢复激光线原有的形状,再使用与膨胀操作相同大小的结构元素进行腐蚀。如果使用的形态学的核太大,反而会在扫描物体时有些真断线情况也会对其进行修补,导致最后扫描出来的三维数据出现偏差,因此本次使用的核大小为3×3,其效果如图1 所示。
图1 修补断线过程示意图Fig. 1 Schematic diagram of repairing broken wires
基于法线引导的中心坐标提取步骤是用几何中心法快速定位中心线,利用主成分分析法求解中心线的法线方向,根据中心点划分八邻域,结合法线角度寻找有效像素点,最后使用灰度重心法求取亚像素级中心线。
2.1 快速定位像素级中心线
为了能初步对激光线进行中心提取,结合边缘检测法和几何中心法对激光条纹进行初步定位,用Canny 算法[15]对目标区域进行边缘检测,得到除边缘以外其他像素均为零的图像。利用多条结构光条纹的边缘像素,通过(1)式计算结构光两边边缘位置的中值,从而得到中心点:
式中:a、b分别表示单根结构光在每一行得到的最左侧和最右侧的非零像素点对应的列坐标值;
c为目标值。几何中心法原理简单,运行速度快,并且此方法只对提取的边缘进行计算,对噪声点不敏感,可以稳定地提取到结构光的几何中心,从而快速粗略得到结构光像素级中心线,如图2 所示。
图2 几何中心法求取中心线Fig. 2 Center line obtained by geometric center method
2.2 主成分分析法求取法线方向
实际情况中,几何中心法提取的中心线远不能满足工业要求。为了精确定位结构光的中心位置,需要对初步提取的中心线进行法线求取,再通过法线方向上的有效像素点集进行灰度重心法。目前对结构光法线求取最常用的为Steger 算法。此方法原理是对图像进行多次高斯卷积,得到图像的Hessian 矩阵,然后对Hessian 矩阵进行特征值分解,将绝对值最大的特征值对应的特征向量做为当前像素点的法线方向。虽然具有较高的精度和稳健性,但需要对图像进行多次二维高斯卷积,计算量大,难以满足实时性要求。因此本文选择PCA方法[9]求取当前点的法线向量,PCA 方法不需要进行多次卷积,可以大大减少计算量,减少了不必要的时间和资源开销。
在实际拍摄中,得到的结构光图片中往往会存在噪声,极大影响结构光条纹提取效果。对此本文使用二维高斯卷积对提取的结构光图像进行计算,能有效降低噪声对提取条纹中心的负面影响。其计算公式为
经过二维高斯卷积可得到条纹图像的梯度分布图,选取几何中心法得到的像素级中心点作为计算法向的主要点集,可快速求取激光条纹的形变情况。假设(Gx,Gy)表示梯度向量,则梯度向量的协方差矩阵C为
利用主成分分析法对协方差矩阵进行特征分解,得到最大特征值对应的特征向量即为法线方向。则特征值和对应的特征向量表达为
式中:特征值λ1、λ2对应的特征向量分别为v1、v2,由表达式可知,λ1>λ2,因此,对应的特征向量v1为条纹法线方向,再对法线向量进行归一化处理可得到与法线方向一致的单位向量n=(nx,ny)T,为后续法线引导提供了条件,图3 为法线方向示意图。
图3 法线方向示意图Fig. 3 Schematic diagram of normal direction
2.3 基于法线引导的中心线提取
当不考虑激光条纹法线方向时,传统的灰度重心法对在x方向或者y方向呈高斯分布的激光条纹具有很好的提取效果,其x方向或y方向灰度值特性分布如图4 曲线a;
相反,当结构光条纹出现曲率较大时,此时激光条纹的横向或者纵向的灰度值并不符合高斯分布,如图4 曲线b,提取的激光线中心线会有很大偏差,造成重建效果差。
图4 激光条纹灰度分布特性曲线图Fig. 4 Curves of gray distribution properties of laser stripes
根据PCA 求取的法线方向,可得到此时结构光条纹沿法线方向横截面的二维图像分布。而传统的灰度重心法只考虑在横向或者纵向分布的结构光条纹,在提取曲率较大的激光条纹中心线时并没有较好的效果[16],导致提取的激光线出现折线情况较多,并不光滑,与实际及光条纹中心线偏差较大[17]。为了能更充分地利用灰度重心法寻找对提取中心点有贡献的邻近激光点,使其提取的中心线更加稳定,并且不会造成很大的偏差。因此本文提出基于法线引导的中心线亚像素提取方法,此方法能够使结构光条纹法线方向分布的像素参与计算,从而更准确地提取结构光中心线。其具体过程如下:
首先是通过几何中心法得到像素级中心线,初步对中心线进行定位。对提取到的中心点,利用八邻域方法对当前像素点进行角度划分,每45°划分1 个区域,总共划分8 个区域,分别对应其八邻域,如图5(a)所示。利用得到的法线角度对其邻域进行有效像素的提取,提取步骤如下:
图5 8 角度划分以及寻找有效点示意图Fig. 5 Schematic diagram of eight-angle division and searching for effective points
1) 以当前单像素中点为中心,求取与法线方向目标点连线夹角;
2) 根据求取当前点的角度与区域划分的角度进行对比,选择符合角度区间的八邻域之一;
3) 将选择的八邻域之一的点作为有效点p进行存储,并以此为当前点,继续进行与法线方向目标点连线求取夹角,返回步骤2)。
提取中心点邻域的有效点集如图6 所示,图6(a)是利用几何中心法得到中心线获得的法线方向;
图6(b)则是使用法线引导法对中心点横截面提取的有效像素。
图6 有效点集示意图Fig. 6 Schematic diagram of effective point set
最后利用(10)式、(11)式进行灰度重心法。
式中:Gx(x,y)表示中心点x方向的像素集合;
Gy(x,y)表示中心点y方向的像素集合;
xi与yi分别表示最终提取的结构光中心点。通过遍历所有几何中心法得到的中心点,寻找中心点求取亚像素点的有效像素点集,最终使用灰度重心法可得到亚像素级中心点。
为了验证本文算法的有效性,搭建了线结构光的视觉测量系统,以获取多条结构光图片。本次视觉测量系统采用了分辨率为1 280×1 024 像素的彩色工业相机采集图像和以中心波长为420 nm 的蓝紫色激光线作为投射光源。实验软件环境为win10 系 统,visual studio2017 在win64 Debug 模 式下使用opencv4.30 进行本文算法的编写。
图7(a)为摄像机采集到投射在平面上的原始激光光条图像,图7(b)~图7(d)分别采用Steger算法、灰度重心法和本文算法的提取部分效果对比。可以看到,本文算法较其他2 种算法具有近似的提取效果。
图7 激光原图及算法提取效果对比图Fig. 7 Comparison of original laser image and extraction effect of algorithm
为了进一步验证所提方法对提取激光线效果的优越性,因结构光在二维平面内的投影为直线分布,本文将多线激光进行单根线分离。对每种方法提取到的激光点数进行单独的直线拟合,然后分别求取每个点到拟合直线的平均距离作为偏差进行验证。最终得到的拟合像素偏差结果如表1所示。
从表1 可以看出,本文方法较其他2 种方法像素偏差更小,证明了激光线呈倾斜状态时,能更好地提取横截面的有效像素,充分发挥灰度重心法的提取效果,使结果更加逼近真实的结构光形状。Steger 算法在本文的像素偏差较大,是因为Steger 算法的连接性更强,平滑性更好,但很难保证提取的激光线分布在能量大的中心线上。
表1 光条中心提取结果及拟合直线偏离误差Table 1 Extraction results of light strip center and deviation error of fitting straight line
由于激光线变化能将物体表面形状细小的变化表现出来,因此提取中心线时能保留激光线变化的细节也是高精度激光线三维重建的关键。为了验证本文算法保留细节的有效性,选取物体表面有较小凹陷的光条图像作为对比实验的源图像。原始光条如图8(a)所示,图8(b)~图8(f)为图8(a)实框内分别使用Steger 算法、方向模板法、灰度重心法、文献[13]以及本文算法提取效果图,其上排是原图中提取激光中心线的位置图,下排则是激光中心线的单独效果图。
图8 各种算法提取效果图Fig. 8 Effect diagram extracted by various algorithms
从图8(b)可以看出,Steger 算法提取的激光中心线有较好的连通性,但其中心分布并不在能量真正集中的像素点上,在激光条纹曲率较大时并不适用,反被其算法性平滑掉,这在精度需求极高时不适用;
图8(c)中,方向模板法得出效果图有一部分中心线并没有分布在能量集中的点上,凹陷处也没能很好地反映出物体表面形状,在工业测量中是一种致命缺陷;
图8(d)效果则是用灰度重心法提取的激光线,虽能将细节粗略反映出来,但是其他地方出现许多杂点,并且模糊不清,很难与真正的缺陷识别开;
图8(e)为文献[13]效果图,可以看出,在激光线边缘较稳定时,能够较好地提取激光线中心点,当边缘出现抖动时,所参与的计算点少而不稳定,产生很大的中心点波动,对边缘梯度幅值较大的点依赖性强;
而图8(f)则是用本文方法提取中心线,提取的中心线不仅分布在能量集中的点上,还能较好地反映出物体表面的形变情况,其他地方则是比灰度重心法更加平滑,并且只在几何中心点两侧沿法线寻找有效点集,不易受边界点影响,客观地将凹陷处与其他地方区分开。
为了客观评价本文算法的稳定性,将各种算法提取的中心点进行曲线拟合,求取点到拟合曲线之间的均方根误差(root mean square error,RMSE)eRMSE,其数学表达式为
式中:(xi,yi) 表示真实中心线上像素点坐标;
(Xi,Yi)表示提取到中心线上像素点坐标;
Ω 表示中心线各像素点的横坐标集合;
n则表示提取中心点的个数。根据表2 各算法的RSME 数据可知,本文算法比传统的灰度重心法提高了0.233 9 像素,与Steger算法、方向模板法和文献[13]的误差接近。说明本文算法在提取激光线时既保证了精度也保证了细节,具有较好的实用性。
表2 各种算法的均方根误差Table 2 Root mean square error of various algorithms
为了验证本文算法的适用性,还测试了其他表面粗糙或者具有阶梯式的物体,激光投射在其表面会相应产生形变。图9(a)、图9(c)和图9(e)表示原图,图9(b)、图9(d)及图9(f)表示利用本文算法得到的效果图。由图9 可见,提取结果均与原图激光分布具有很好的纹路一致性。
图9 激光线提取示意图Fig. 9 Schematic diagram of laser line extraction
为了提升激光线的提取精度并保留细节,本文结合各算法特点提出了基于法线角度引导的激光线提取方法。该方法首先对图像做了一定的预处理;
然后利用几何中心法初步提取激光中心线;
再利用主成分分析法求取中心线的法线方向,对中心点划分角度,根据角度提取八邻域中的有效像素;
最后对每个中心点的有效点集使用灰度重心法。该方法能充分发挥提取能量集中且为亚像素中心点。实验结果表明本文算法表现突出,比传统的灰度重心法提升了0.2339 像素,能够很好地反映出物体表面起伏情况,在激光条纹曲率较大的地方能有效提取细节,为后续高精度三维重建奠定了良好的基础。