一种基于机器视觉的快速亚像素边缘检测与定位方法
技术领域
本发明属于机器视觉图像处理技术领域,涉及一种基于机器视觉的快速亚像素边缘检测与定位方法。
背景技术
在电子制造生产线PCB板的机器视觉质量检测和分拣系统中,图像处理是一个非常重要的环节。在视觉引导上料的过程中,需要获取上料台的实时图像,采用快速准确的图像处理算法,进行目标识别,获得PCB板的数量、位置、姿态等信息;在质量检测过程中,采用图像拼接技术,快速获取PCB板的尺寸、偏移等信息并对粘贴在PCB板上的条形码进行缺陷检测,再根据检测数据标记结果;在视觉引导下料分拣的过程中,又需要对传送装置上的PCB板进行目标识别。所用的图像处理算法的快速精确与否,将直接影响整个系统的工作效率和可靠性。
边缘存在于图像的不规则结构和不平稳现象中,也即存在于信号的突变点处,往往携带着图像的大部分信息。这些边缘点能够给出目标轮廓的位置,而这些轮廓常常包含着我们在图像处理时所感兴趣目标的重要特征,是形状目标检测的基础,同时也是图像分割所依赖的重要特征,为人们描述或识别目标提供了重要的特征信息。边缘检测是图像处理领域中最基本的问题,也是经典的技术难题之一,它的解决对于进行高层次的特征提取、特征描述、目标识别和图像理解等有着重大的影响。因此,边缘检测在图像分割、模式识别、计算机视觉等众多方面都有着非常重要的地位。
在电子制造生产线PCB板的机器视觉质量检测和分拣系统中,要实现实时视觉引导上料、分拣,快速精确的边缘检测与定位算法,对提高采用模板匹配的目标识别速度和准确度有着至关重要的作用。在质量检测过程中,基于图像拼接的尺寸测量的检测速度和精度,也在很大程度上依赖于边缘检测与定位的速度和精度。
边缘检测的实质是通过一些算法来提取图像中灰度不连续的边缘像素,而传统边缘检测算法是观察图像的每个像素在某个区域内灰度的变化,如Sobel算子、Laplacian算子和Robert算子等,形式简单,易于实现,但定位精度差,只有一个像素级的精度,实际上,边缘的位置存在于像素的任何位置,随着工业检测等对精度要求的不断提高,传统的边缘检测算法已经不能满足实际需要。
要提高图像测量系统的测量精度,可以从两个方面入手。一方面可以从硬件方面入手,如选用高分辨率的摄像机,采用频率较高的图像卡,提高传感器的分辨率等,然而,用提高的硬件性能来提高测量精度的方法代价较高,难度较大;另一方面可以利用目标的成像特性,采用亚像素定位技术提高测量定位的精度,如果用软件方法将图像上的特征目标定位在亚像素级别,就相当于提高了测量系统精度。这种方法简单、有效且成本低廉。因此,亚像素技术具有十分重要的理论意义和实践意义。
目前国内外研究的亚像素边缘检测理论与技术,在数学上可以归纳为插值法、拟合法、矩方法等三种类型。与像素级边缘检测方法不同,由于其定位精度和计算速度的矛盾,实现亚像素边缘检测,面临着以下主要技术难题:
(1)计算速度的要求。三种实现亚像素边缘检测的方法中,基于矩的方法包括基于灰度矩的方法、基于空间矩的方法、质心法等,其中基于灰度矩和空间矩的方法能获得较高的定位精度,但是由于其模板尺寸大,计算复杂等原因,计算速度相对较慢。
(2)定位精度的要求。基于插值的方法由于计算简单,在亚像素边缘检测中获得了广泛的应用,这些插值方法包括线性插值法、二次抛物线插值法、三次样条插值法、高斯插值法等。其中线性插值法、二次抛物线插值法、三次样条插值法计算速度较快,但定位精度较低。由于高斯插值法中高斯函数最接近真实的边缘模型,因而其不仅计算速度快,且能获得较高精度。
发明内容
本发明针对上述问题提出了一种基于机器视觉的快速亚像素边缘检测与定位方法,解决现有的PCB板的图像处理过程中检测定位精度低及处理速度慢的问题。
本发明的技术解决方案如下:
一种基于机器视觉的快速亚像素边缘检测与定位方法,包括以下步骤:
步骤1:获取待检测的PCB板图像:
当电子制造生产线上的PCB板机器视觉质量检测与分拣系统运行时,获取待检测PCB板图像;
步骤2:对待检测的PCB板图像进行灰度化处理与去噪操作,获得去噪图像:
采用基于模板操作的自适应中值滤波方法去除噪声的干扰;
步骤3:计算去噪图像上每个像素点在水平方向上的直角水平梯度Gx和在垂直方向上的直角垂直梯度Gy;
步骤4:采用分象限的CORDIC算法将每个像素点在直角坐标下的直角水平梯度Gx和直角垂直梯度Gy分别转换为极坐标下的极角梯度幅值G0和极角梯度方向Gθ;
步骤5:根据步骤4获得的每个像素点的极角梯度方向Gθ,确定像素点在八分梯度方向上的八分梯度邻域像素点P+和P-;
所述八分梯度方向是指将每个像素点的邻域梯度方向划分成均匀的八个梯度方向,每个梯度方向对应一个角度范围,当像素点的极角梯度方向角度落入某一八分梯度方向的角度范围中,则当前八分梯度方向为该像素点的八分梯度方向;
步骤6:对每个像素点以及其八分梯度邻域像素点,进行梯度邻域峰值检测和左右邻域连接性判断,确定去噪图像中的像素级边缘点;
所述像素级边缘点是指坐标为整数的边缘点;
步骤7:利用对数高斯函数插值法计算每个像素级边缘点在八分梯度方向上的理论亚像素边缘点,并计算该理论亚像素边缘点到对应像素级边缘点的距离r;
其中,G+和G-分别为像素级边缘点对应的八分梯度邻域像素点P+和P-的极角梯度幅值;
步骤8:计算每个理论亚像素边缘点在对应像素级边缘点极角梯度方向Gθ上的实际亚像素边缘点位置与到对应像素级边缘点的距离d,包括以下步骤:
首先,通过理论亚像素边缘点作到对应像素级边缘点极角梯度方向Gθ所在直线的最短距离点,作为实际亚像素边缘点;
然后,利用8分梯度方向上的理论亚像素边缘点到该像素级边缘点的距离r与极角梯度方向Gθ计算实际亚像素边缘点到像素级边缘点的距离d;
步骤9:对每一个实际亚像素边缘点,利用实际亚像素边缘点的极角梯度方向Gθ和到对应像素级边缘点的距离d,计算实际亚像素边缘点的直角坐标位置,实现边缘检测与定位。
所述步骤3中每个像素点直角水平梯度Gx和直角垂直梯度Gy,是使用Sobel算子与去噪图像中每个像素点进行卷积操作得到,采用以下公式表示:
Gx=-g(x-1,y-1)+g(x-1,y+1)-2g(x,y-1)+2g(x,y+1)-g(x+1,y-1)+g(x+1,y+1)
Gy=g(x-1,y-1)-g(x+1,y-1)+2g(x-1,y)-2g(x+1,y)+g(x-1,y+1)-g(x+1,y+1)
其中,g(x,y)为去噪图像的灰度函数,(x,y)表示像素点坐标;Gx和Gy均为16位二进制数。
所述步骤4中,采用分象限的CORDIC算法对每个像素点(x,y)在直角坐标下的水平梯度Gx和垂直梯度Gy转换为极坐标下的梯度幅值G0和梯度方向Gθ的具体过程如下:
①确定梯度方向Gθ所在的象限,包括以下步骤;
步骤a:记录Gy的最高位即符号位A1和Gx的最高位即符号位A2,A1=0表示Gy≥0,A1=1表示Gy<0,A2=0表示Gx≥0,A2=1表示Gx<0;
步骤b:对Gy和Gx取绝对值,取R0=|Gx|,S0=|Gy|,R0和S0均为16位二进制数,将R0和S0作为CORDIC算法的输入;
步骤c:根据A1A2确定像素点(x,y)所在的象限;
②执行CORDIC算法,细化梯度方向,包括以下步骤:
步骤a:令i=0,di=1,N=6;
其中,i为迭代次数,di为迭代方向控制位,N为迭代终止条件;
步骤b:Ri+1=Ri+di *Si>>i,Si+1=Si-di *Ri>>i;
其中,“*”为乘号;“>>”表示逻辑右移运算,Si>>i是指将Si右移i位,Ri和Si分别表示第i次循环后得到的值;
步骤c:将Si+1的最高位记为符号位Bi+1,若Si+1≥0则Bi+1=1且令di+2=1,若Si+1<0则Bi+1=0且令di+2=-1;
步骤d:令i=i+1,若i<N,返回步骤b,否则结束;
③将B1B2B3B4B5进行二进制编码,将二进制编码转化为0°-90°中对应的角度,即得到|Gy|和|Gx|的夹角Zθ=arctan(|Gy|/|Gx|);
④根据A1A2对应的象限和Zθ计算得到Gθ;
⑤计算梯度幅值G0:梯度幅值G0=K*R4,K为CORDIC算法中的校正因子,取K=1。
所述步骤6中像素级边缘点的确定过程如下:
步骤a:判断像素点(x,y)的梯度幅值G0是否大于下限阈值Tl,若G0>Tl,则转步骤b,否则将像素点(x,y)标记为非边缘点,并结束本次判断并返回;
步骤b:判断像素点(x,y)的梯度幅值G0是否为局部极大值:即若G0>G-且G0≥G+,则像素点(x,y)的梯度幅值G0是局部极大值,转步骤c,否则转步骤d;
其中,G+和G-分别为像素级边缘点对应的八分梯度邻域像素点P+和P-的极角梯度幅值;
步骤c:判断像素点(x,y)的梯度幅值G0是否大于上限阈值Tl:若G0>Th,则将像素点(x,y)标记为像素级边缘点P,否则转步骤d;
步骤d:判断像素点(x,y)的八分梯度左邻域像素点P-和八分梯度右邻域像素点P+是否是已确定的像素级边缘点,若是,则确定像素点(x,y)为像素级边缘点,记为P,否则像素点(x,y)为非像素级边缘点。
所述步骤5中确定像素点在八分梯度方向上的八分梯度邻域像素点P+和P-的具体过程如下:
①获得像素点(x,y)梯度方向Gθ的高四位G4h;(将Gθ逻辑右移四位得到);
②将G4h的二进制编码,按照下表查找左右邻域像素位置的地址索引step,得到八分梯度领域像素点的坐标;
其中,col为输入图像矩阵的列数。
所述步骤8中实际亚像素边缘点位置与到对应像素级边缘点的距离d的计算方法如下:
1)Gθ在[337.5°,22.5°)时,d=r*cosθ;
2)Gθ在[22.5°,67.5°)时,
3)Gθ在[67.5°,112.5°)时,d=r*sinθ;
4)Gθ在[112.5°,157.5°)时,
5)Gθ在[157.5°,202.5°)时,d=r*cosθ;
6)Gθ在[202.5°,247.5°)时,d=-r*cosθ;
7)Gθ在[247.5°,292.5°)时,
8)Gθ在[292.5°,337.5°)时,d=-r*sinθ;
其中,θ即为Gθ对应的角度。
所述亚像素级边缘点的直角坐标(xs,ys)的计算方法如下:
1)当Gθ在[337.5°,22.5°)时,有:
xs=x+d*cosθ=x+r*cosθ*cosθ
ys=y+d*sinθ=y+r*cosθ*sinθ
2)当Gθ在[22.5°,67.5°)时,进一步推得:
3)Gθ在[67.5°,112.5°)时,进一步推得:
xs=x+d*cosθ=x+r*sinθ*cosθ
ys=y+d*sinθ=y+r*sinθ*sinθ
4)Gθ在[112.5°,157.5°)时,进一步推得:
5)Gθ在[157.5°,202.5°)时,进一步推得:
xs=x+d*cosθ=x+r*cosθ*cosθ
ys=y+d*sinθ=y+r*cosθ*sinθ
6)Gθ范围在[202.5°,247.5°)时,进一步推得:
xs=x+d*cosθ=x-r*cosθ*cosθ
ys=y+d*sinθ=y-r*cosθ*sinθ
7)Gθ在[247.5°,292.5°)时,进一步推得:
8)Gθ在[292.5°,337.5°)时,进一步推得:
xs=x+d*cosθ=x-r*sinθ*cosθ
ys=y+d*sinθ=y-r*sinθ*sinθ
其中,(x,y)表示亚像素级边缘点对应的像素级边缘点的整数坐标,θ为Gθ所对应的的角度。
由于本发明只近似估计梯度方向,像素级边缘点P的梯度方向Gθ实际只能取有限个离散值,实际计算中只需要用到0°~90°(对应Gθ值为0~64,45°对应Gθ值32)的余弦计算(Gθ不在此范围时可转换到此范围,正弦可转换为余弦),为加快计算速度,可将此范围内的余弦值做成查找表,实际计算时做相应转换再根据Gθ值查表即可得相应余弦值,这样可大大加快计算速度。
有益效果
与现有技术相比,本发明的优点在于:
(1)检测和定位速度快。在计算梯度幅值和梯度方向时,采用了高效的分象限CORDIC算法,只需少量的移位和加减运算,就能获得该像素点的梯度幅值和梯度方向,在不影响计算精度的同时,最大限度节约了计算时间;在查找邻域像素进行峰值比较的过程中,采用由梯度方由高四位查找表的方法,程序设计简单而高效;在计算亚像素的实际直角坐标时,根据梯度方向取值的量化和正余弦函数的特点,提出由梯度方向直接查找余弦表的方法,大大节约了计算时间。
(2)定位精度高。在估计亚像素位置时,采用了高斯对数插值法,巧妙地将求取高斯函数均值的过程转换为求取抛物线对称轴的过程。并将基于邻域的插值结果转换为实际梯度方向上的距离,大大提高了定位精度。
(3)将本算法应用于电子制造生产线CB板机器视觉质量检测与分拣系统中,实践结果表明,该算法能大大加快基于模板匹配的目标识别以及质量检测中的尺寸测量速度和精度。
附图说明
图1为本发明的总体流程示意图。
图2为CORDIC算法过程示意图。
图3为CORDIC算法一步迭代示意图。
图4为八分空间邻域分布示意图。
图5为像素级边缘检测流程示意图。
图6为求取抛物线对称轴的示意图
图7为实际梯度方向为337.5°~22.5°时计算亚像素位置到在梯度方向上到像素坐标点的距离d的示意图。
图8为实际梯度方向为22.5°~67.5°时计算亚像素位置到在梯度方向上到像素坐标点的距离d的示意图。
图9为视觉引导上料过程获取的目标图像。
图10为使用本算法检测到的边缘图像。
图11为基于本算法的模板匹配目标识别结果图像。
图12为基于本算法的图像拼接尺寸测量应用图像。
图13亚像素边缘检测与定位输入原始测试图像。
图14亚像素边缘检测与定位输出结果图像。
具体实施方式
以下将结合图和具体实施过程对本发明做进一步详细说明。
一种基于机器视觉的快速亚像素边缘检测与定位方法,包括以下步骤:
步骤1:获取待检测的PCB板图像:
当电子制造生产线上的PCB板机器视觉质量检测与分拣系统运行时,获取待检测PCB板图像;
步骤2:对待检测的PCB板图像进行灰度化处理与去噪操作,获得去噪图像:
采用基于模板操作的自适应中值滤波方法去除噪声的干扰;
步骤3:计算去噪图像上每个像素点在水平方向上的直角水平梯度Gx和在垂直方向上的直角垂直梯度Gy;
步骤4:采用分象限的CORDIC算法将每个像素点在直角坐标下的直角水平梯度Gx和直角垂直梯度Gy分别转换为极坐标下的极角梯度幅值G0和极角梯度方向Gθ;
步骤5:根据步骤4获得的每个像素点的极角梯度方向Gθ,确定像素点在八分梯度方向上的八分梯度邻域像素点P+和P-;
所述八分梯度方向是指将每个像素点的邻域梯度方向划分成均匀的八个梯度方向,每个梯度方向对应一个角度范围,当像素点的极角梯度方向角度落入某一八分梯度方向的角度范围中,则当前八分梯度方向为该像素点的八分梯度方向;
步骤6:对每个像素点以及其八分梯度邻域像素点,进行梯度邻域峰值检测和左右邻域连接性判断,确定去噪图像中的像素级边缘点;
所述像素级边缘点是指坐标为整数的边缘点;
步骤7:利用对数高斯函数插值法计算每个像素级边缘点在八分梯度方向上的理论亚像素边缘点,并计算该理论亚像素边缘点到对应像素级边缘点的距离r;
其中,G+和G-分别为像素级边缘点对应的八分梯度邻域像素点P+和P-的极角梯度幅值;
步骤8:计算每个理论亚像素边缘点在对应像素级边缘点极角梯度方向上的实际亚像素边缘点位置与到对应像素级边缘点的距离d,包括以下步骤:
首先,通过理论亚像素边缘点作到对应像素级边缘点极角梯度方向Gθ所在直线的最短距离点,作为实际亚像素边缘点;
然后,利用8分梯度方向上的理论亚像素边缘点到该像素级边缘点的距离r与极角梯度方向Gθ计算实际亚像素边缘点到像素级边缘点的距离d;
步骤9:对每一个实际亚像素边缘点,利用实际亚像素边缘点的极角梯度方向Gθ和到对应像素级边缘点的距离d,计算实际亚像素边缘点的直角坐标位置,实现边缘检测与定位。
所述的步骤2的具体步骤为:
自适应中值滤波,使用一个大小为5×5的模板扫描图像f(x,y),比较模板中心点像素的灰度值与窗口中最大的灰度值,若两者相等,则使用窗口的灰度中值代替窗口中心点像素的灰度值,否则不替换;
所述的步骤3的具体步骤为:
计算每个像素点水平方向上的梯度Gx和垂直方向上的梯度Gy,使用Sobel算子与灰度图像每个像素点进行卷积操作,设图像的灰度函数为g(x,y),像素点f(x,y)处的水平梯度Gx和垂直梯度Gy定义为:
Gx=-g(x-1,y-1)+g(x-1,y+1)-2g(x,y-1)+2g(x,y+1)-g(x+1,y-1)+g(x+1,y+1)
Gy=g(x-1,y-1)-g(x+1,y-1)+2g(x-1,y)-2g(x+1,y)+g(x-1,y+1)-g(x+1,y+1)(1)
步骤4对每个像素点,采用分象限的CORDIC算法将其直角坐标下的水平梯度Gx和垂直梯度Gy转换为极坐标下的梯度幅值(模)G0和梯度方向Gθ;CORDIC算法是一种用于计算一些常用的基本运算函数和算术操作的循环迭代算法,它通过对输入向量进行旋转必要的角度,使得向量最终调整到x轴上。由于其迭代过程只用到简单的移位和加减运算,因此能大大加快计算速度。
这里主要利用CORDIC算法计算反正切函数求角度和计算平方根函数求向量幅值。
为使计算简便而又保证精度,Gθ用8位无符号整型数表示。如图2和图3,其具体步骤为:
①确定梯度方向所在的象限,包括以下步骤;
步骤a:记录Gy的符号A1和Gx的符号A2,A1=0表示Gy≥0,A1=1表示Gy<0,A2同理取值。
步骤b:对Gy和Gx取绝对值,取R0=|Gx|,S0=|Gy|,将R0和S0作为CORDIC算法的输入。
②执行CORDIC算法,细化梯度方向,包括以下步骤:
步骤a:令i=0,di=1,N=6;
其中,i为迭代次数,di为迭代方向控制位,N为迭代终止条件;
步骤b:Ri+1=Ri+di *Si>>i,Si+1=Si-di *Ri>>i;
其中,“*”为乘号;“>>”表示逻辑右移运算,Si>>i是指将Si右移i位,Ri和Si分别表示第i次循环后得到的值;
步骤c:将Si+1的最高位记为符号位Bi+1,若Si+1≥0则Bi+1=1且令di+2=1,若Si+1<0则Bi+1=0且令di+2=-1;
步骤d:令i=i+1,若i<N,返回步骤b,否则结束;
③将B1B2B3B4B5进行二进制编码,将二进制编码转化为0°-90°中对应的角度,即得到|Gy|和|Gx|的夹角Zθ=arctan(|Gy|/|Gx|);
表1 B1B2B3B4B5编码规则表
④将得到的象限标志A1A2和Zθ查表2,得到Gθ。
表2用Gθ象限标志A1A2和Gθ实际值的编码规则表
⑤计算梯度幅值Gf:梯度幅值G0=K*R4,令K=1。
步骤5根据步骤4获得的每个像素点f(x,y)的梯度方向Gθ,在8邻域(如图4)内选择其的左右(或上下)邻域像素点F-和F+,设图像尺寸行数为row,列数为col,具体步骤如下:
①获得像素点f(x,y)梯度方向Gθ的高四位G4h:即将Gθ逻辑右移四位,如10011001右移四位→00001001。
②用得到的Gθ的高四位G4h查表3得到像素点f(x,y)的左邻域F-和右邻域F+以及相应的地址索引step;
表3用Gθ高四位编码得到各梯度方向下左右邻域及其地址索引的规则表
步骤6对每个像素点以及其邻域像素点,进行梯度邻域峰值检测,确定初始像素级边缘点,如图4,具体步骤如下;
①对每个像素点f(x,y)(梯度幅值为Gf)及步骤3所选择的邻域点F+(梯度幅值G+)和F-(梯度幅值G-),全局高阈值Th,低阈值Tl,执行如下步骤:
步骤a:判断像素点f(x,y)的梯度幅值Gf是否大于低阈值Tl,若Gf>Tl,则转步骤b,否则将像素点f(x,y)标记为非边缘点,并结束本次判断返回;
步骤b:判断像素点f(x,y)的梯度幅值Gf是否为局部极大值:即若Gf>G-且Gf≥G+,则像素点f(x,y)的梯度幅值Gf是局部极大值,转步骤c,否则转步骤d;
步骤c:判断像素点f(x,y)的梯度幅值Gf是否大于高阈值Tl:若Gf>Th,则将像素点f(x,y)标记为边缘点P(x,y),否则转步骤d;
步骤d:判断像素点f(x,y)的左邻域F-和右邻域F+是否是已确定的边缘点,若是,则可确定像素点f(x,y)也为边缘点,标记为P(x,y),否则像素点f(x,y)为非边缘点。
②对①确定的每个像素级边缘点P(x,y),同时执行步骤7的操作。
步骤7对步骤6获得的每个像素级边缘点P(x,y),利用对数高斯函数插值法计算其在8分梯度方向上的亚像素边缘点到该像素级边缘点的距离r。由于实际的图像边缘并不是理想的阶跃边缘,其梯度幅值Gp在梯度方向上近似符合高斯分布,高斯分布的中心即高斯分布的均值是在沿该梯度方向上灰度值变化最大的地方,也就是边缘的实际位置。因此只要求出高斯分布的均值,就能准确定位亚像素位置坐标。插值法求取边缘的亚像素位置的目标就是通过一定的方法求取或近似求取该均值的过程。
具体步骤如下:
如图6,在像素级边缘点P(x,y)处表示利用其邻域像素点P+和P-插值出抛物线中心位置。
为简化计算,将P+置于y轴上,点P与P+和P-水平距离为1(当梯度方向为4个坐标轴方向时,P与其邻域像素点距离为1,当梯度方向为其他方向时,可简单地在最后求出的距离r乘以系数即可),将f(0)=lnG+,f(1)=lnG0,f(2)=lnG-代入,可得像素点P到抛物线对称轴的距离r为:
步骤8对步骤6获得的每个像素级边缘点P(x,y),将其在步骤7中计算得到的8分梯度方向上的亚像素边缘点到该像素级边缘点的距离r转换成实际梯度方向Gθ上的亚像素边缘点到像素级边缘点的距离d。步骤7用插值法计算出的r值是基于邻域的8个可能梯度方向的,但实际边缘方向应该是步骤4计算得到的梯度方向Gθ,因此需要将8分梯度方向上的亚像素边缘点到像素级边缘点的距离r转换成实际梯度方向Gθ上亚像素边缘点到像素级边缘点的距离,这里采取求距离r在梯度方向Gθ上的投影的方法,以使亚像素边缘点距离像素坐标点最近。
如图7,像素级边缘点P(x,y)的实际梯度方向Gθ大约为15°,由步骤3所选择的左邻域点P-=Pw,右邻域点P+=Pe,点P的八分梯度方向为直线l(x轴),θ是实际梯度方向直线l1与x轴的夹角(即Gθ),A是步骤5计算得到亚像素位置,点A到点P的距离为r,过点A作直线l1的垂线l2与l1交于点B,点B到点P的距离d即为实际的亚像素位置,由上述可得:
d=r*cosθ (3)
如图8,当像素级边缘点P(x,y)的实际梯度方向Gθ范围在22.5°~67.5°时,由步骤3所选择的左邻域点P-=PWS,右邻域点P+=PEN,采用上述同样方法可以求得d与r以及Gθ的关系为:
步骤9对步骤6获得的每个像素级边缘点P(x,y),根据步骤8计算得到的实际梯度方向Gθ上的亚像素边缘点到像素级边缘点的距离d,采用余弦查找表法计算其实际梯度方向Gθ上的亚像素边缘点的直角坐标(浮点型实数坐标点),进而实现图像边缘点的检测和亚像素级定位。在实际应用中,经常用到的是亚像素边缘点的实际直角坐标,因此,利用步骤8计算出亚像素边缘点在实际梯度方向Gθ上到像素坐标点的距离d,进一步计算出亚像素边缘点的直角坐标Ps(xs,ys)。具体步骤为:
①步骤6获得的每个像素级边缘点P(x,y),推导其亚像素级边缘点的直角坐标Ps(xs,ys),可得:
xs=x+d*cosθ
ys=y+d*sinθ(5)
对于如图7所示条件下,结合式(3)可进一步推得:
xs=x+d*cosθ=x+r*cosθ*cosθ
ys=y+d*sinθ=y+r*cosθ*sinθ(6)
对于如图8所示条件下,结合式(3)可进一步推得:
其他情况下,可推得类似结论。
②由于本发明只近似估计梯度方向,像素级边缘点P(x,y)的梯度方向Gθ实际只能取有限个离散值,实际计算中只需要用到0°~90°(对应Gθ值为0~64,45°对应Gθ值32)的余弦计算(Gθ不在此范围时可转换到此范围,正弦可转换为余弦),为加快计算速度,可将此范围内的余弦值做成查找表,实际计算时做相应转换再根据Gθ值查表4可得相应余弦值,这样可大大加快计算速度。
表40°~90°量化余弦查找表
表5是运用本发明对图13所示测试图像进行边缘检测和定位的部分结果和实际数据的对比,图13所示图像是一个边缘被模糊化的直角梯形,其上底边实际横坐标为21.5,下底边实际横坐标为60.5,通过表5数据可以看出,本发明对边缘检测和定位具有很高的精度。
表5本发明亚像素边缘定位数据与实际数据的对比
图9-图12是本发明在机器视觉领域实际应用的实例。其中,图9-图11演示了本发明在基于机器视觉的电子制造生产线上PCB板的自动视觉引导分拣与质量检测系统上的应用实例,图9是该系统视觉引导相机获取的分拣台实时图像,图10是利用本算法获取的图像边缘,图11是利用本算法结合模板匹配技术实现的目标自动识别与定位的结果图像。图12是本发明在基于图像拼接的尺寸测量算法中的应用,该尺寸测量算法先利用本发明获取待检测图像精确地亚像素及边缘,再利用图像拼接技术,对PCB板的尺寸进行检测,实践证明,本发明具有速度快、精度高的特点。