1. 引言
角点的检测在对图像进行分析和理解中起着重要的作用。目前常用的角点检测算法 [1] 主要有基于灰度图形的角点检测算法、基于二值图像的角点检测算法以及基于轮廓曲线的角点检测算法。其中基于二值图像的角点检测算法因不能满足准确度要求用的较少。
王建琦 [2] 采用了在方形窗边界上的线性插值的方法,计算出边缘角,通过它来对角点候选点作进一步的筛选从而提高角点识别的准确率。但是该算法需要人工选取阈值耗时长,抗噪性能也有待提升;赵万金 [3] 提出在不影响Harris角点检测算法计算简便性和稳定性的前提下,避免了原算法中因阈值选取而带来的不便解决了角点聚簇问题,但存在关键角点识别不全的问题,从而影响到后续图像匹配的结果;王崴 [4] 提出了改进的Harris算法。该算法分析了目标像素点8-邻域内的灰度分布,计算与之相似的像素点数目(K),通过分析K的取值,剔除一些非角点像素点。识别时间大大缩短但是没有对识别准确率进行对比分析;毛雁明 [5] 通过对同一图像不同阈值的角点信息进行对比能够很好地解决角点信息丢失和位置偏移且去除部分伪角点,但是识别出的角点结果中也存在着伪角点,角点检测的准确率并没有很大的提高,但相比Harris角点检测效果好;龚平 [6] 通过对图像像素点的Rharris值拟合曲线在X方向和Y方向上“波峰”的分析,直接检测出角点,避免了Harris算法依靠经验选择阈值的不确定性而带来的角点丢失或冗余,该算法虽然检测出了Harris角点检测所没有识别出来的湖面上的交点,但是天空中不是角点部分也被误识别为交点,角点识别的准确率并没有很大提高;张从鹏 [7] 提出了一种基于Harris角点检测的矩形识别技术,直接通过检测矩形的特征点来完成矩形的检测。能够准确、快速地检测出矩形,实时性高,但是检测结果会受到角点质量的干扰。
针对Harris角点检测的种种不足,本文基于轮廓曲线跟踪算法,提出一钟新的角点检测方法以提高角点检测的准确率。首先,利用Canny算子对采集到的工件图像进行边缘检测;再基于八邻域轮廓跟踪算法提取出边缘识别后的工件轮廓曲线;最后,针对提取出的工件边缘轮廓特点利用创新的角点检测技术识别出工件角点。本文定量研究了传统的Harris角点检测算法和该创新的角点检测算法针对同一工件的角点检测准确率。
2. 利用Canny算子检测图像边缘
本研究针对Canny算子对识别水平和垂直边缘效果最好的特点选用Canny算子 [8] 结合OTSU自适应阈值 [9] 对工件图像进行边缘检测 [10] ,通过搜索计算类间方差最大值,得到最优阈值 [11] ,从而自适应的设定高、低阈值,可以对各种图像获得较好的边缘检测效果。图1为工件原图。
1) 首先将采集到的工件图像灰度化,再对该灰度图像进行高斯滤波 [12] 处理,高斯滤波窗口大小设置为5 × 5,去掉图像中的噪声 [13]。
2) 计算图像梯度,获取图像中每个像素的边缘幅值和角度。
3) 在局部像素区域中保留梯度最大的点,通过非极大值抑制 [14] ,将其他像素点的值设置为零,从而达到边缘细化的效果。
4) 滞后阈值化。滞后阈值化设定两个阈值,用OTSU算法计算得出为高阈值 [15] ,并将低阈值设置为高阈值的三分之一。用该算法检测出来的工件图像边缘如图2所示:
Figure 2. Edge image detected by Canny operator optimization algorithm
图2. Canny算子优化算法检测到的边缘图像
3. 八邻域轮廓跟踪提取轮廓边缘
用Harris角点检测算法对上述处理过的图像边缘进行角点检测,检测结果显示标识出很多错误的角点信息。分析原因,由于将Canny算子结合OTSU自适应阈值检测出的工件轮廓相比仅用Canny算子检测出的工件轮廓虽然清晰了很多,但是仍有少量的噪声曲线存在,对进一步针对Canny算子结合OTSU自适应阈值识别出来的边缘轮廓都是被细化过的边缘,每个方向上都只有单个像素宽度的特点,又由于工件轮廓都是闭合曲线,因此只需要去除非闭合的噪声曲线和伪边缘即可得到所需要的边缘轮廓。
针对此需求,根据细化后的边缘像素排布有八个方向,因此尝试采用八领域轮廓跟踪算法识别并保留真实的工件轮廓边缘。具体识别步骤如下:遍历整张图像找到第一个非零像素点,那么这个点一定是边缘轮廓上的点。设这个点为起点(i, j)。以这个点为起点,在它的3 × 3领域中,有图3所示a~h八个方向可以查找。
当检测到非零像素点时,则在其邻域内先查找a、c、e、g方向上是否有像素点,若没有再查找b、d、f、h方向上是否有像素点。若是a方向上有像素点,则下一步只在与a方向垂直的区域,以a、c、g、b、h为顺序查找该邻域的像素是否非零;若是g方向上有非零像素,则下一步查找与g方向垂直的区域以a、e、g、f、h的顺序查找是否存在非零像素点。以此类推。
按照此方法遍历整张图像,每遍历一个像素点,保留该像素点的位置,若回到最初的像素点(i, j),则保留该封闭轮廓;若检测的终点非起始像素点的坐标,则剔除该伪边缘或噪声曲线。进行轮廓跟踪处理后的工件图像如图4所示:
Figure 4. Workpiece image after contour tracking processing
图4. 进行轮廓跟踪处理后的工件图像
Harris角点检测技术在原理上是设置一个窗口函数,当窗口函数在图像区域内部移动时计算窗口内部的像素变化量E(x, y)。对于每一个窗口,都有一个对应的角点响应函数R。
对R进行阈值处理 [15]。当该相应函数值大于所设定阈值时,表示该窗口内部有一个角点特征存在。但是在上述边缘检测的结果中,会将像素集中变化的位置误检测为角点。针对此情况,观察提取出的边缘轮廓的特征,如图5所示:
Figure 5. Extract edge contour features
图5. 提取出边缘轮廓特征
轮廓线并非是直线而是呈现锯齿状。图像边缘位置都只有单个像素值,在角点的位置才存在阶梯状的像素变化,且该阶梯状的像素变化仅有图6所示的四种情况:
Figure 6. Pixel characteristics at corners: (a), (b), (c), (d)
图6. 角点处像素特点:(a), (b), (c), (d)
针对这一特点,遍历每个边缘像素点的周围八个像素点,检查其分布情况。假设点
是像素点坐标,当如(a)所示
与
的位置有边缘像素时则认为
为一个角点。当如(b)所示
与
的位置存在边缘像素点的时候则认为
为一个角点。当如(c)所示
与
位置有边缘像素点额时候则认为
为一个角点。当如(d)所示当
与
处存在边缘像素点时则认为
为一个角点。当在阶梯像素点处检测出多个角点则将该处检测出来的所有角点的横纵坐标取平均值作为该处角点的位置,并将检测出的角点在工件图上标记出来。
4. 利用Harris角点检测技术检测角点
在直接基于图像灰度的算子中,最著名的就是Harris算子,Harris角点检测具有比较理想的结果 [16]。Harris角点检测算法 [17] 的具体检测步骤如下:
1) 设置一个窗口函数,当窗口函数在图像区域内部移动时计算窗口内部的像素变化量
。
2) 对于每一个窗口,都有一个对应的角点响应函数R。
3) 对R进行阈值处理 [18]。当该相应函数值大于所设定阈值时,表示该窗口内部有一个角点特征存在。
设窗口中心位置为灰度图像中的点坐标
,其对应的像素灰度值为
。假设这个窗口向x和y方向分别移动u和y个单位,窗口中心到达新的位置为
,新位置对应的像素灰度值为
。则
就是窗口移动过程中图像局部的灰度变化值。设坐标(
位置对应的窗口函数为
,将该点权重系数设置大一些,离中心较远的点权重系数设置小一些,在经过高斯滤波之后,窗口的移动所造成的该区域像素点灰度值的变化量为:
(1)
对该公式进行二维的泰勒公式展开之后得到的结果为:
(2)
其中Ix和Iy是I的偏导数,在图像中表现为x和y方向的梯度,即
(3)
(4)
将该式子代入到
中得到:
(5)
提出u和v之后得到:
(6)
设矩阵
,将实对称矩阵M对角化后可得如下对角矩阵形式:
,其中R为角度相应函数。
(7)
(8)
(9)
其中k是经验值,在(0.04, 0.06)范围内。
当|R|值很小,即Ix和Iy值都比较小时,对应该窗口在平面区域滑动;当|R|值为负数时,表明仅在x或者y方向上有较大的像素变化,对应窗口经过图像的边缘;当|R|值很大的时候,说明在x和y方向上的像素变化都很大,对应在窗口区域存在角点的情况。将R的值与所设定的阈值作比较,当R大于这个阈值则将该像素点检测为角点。由于阈值的选择不同,所检测出的角点的数量及准确率也有所不同。用Harris角点检测算法对工件图像进行角点检测,记录角点检测结果。
5. 实验结果对比分析
5.1. 对比Harris角点检测算法与本文提出算法检测出的角点像素坐标值
对图7(a)所示的八角点工件1处理后分别用Harris角点检测算法和本文创新的角点检测算法进行比较,检测出的角点像素坐标如表1所示。
(a) (b) (c)
Figure 7. Test workpieces: (a) Octagonal workpiece 1; (b) Octagonal workpiece 2 and (c) Quadrangular workpiece
图7. 测试工件:(a) 八角点工件1;(b) 八角点工件2;(c) 四角点工件
Table 1. Comparison of pixel coordinates of corners identified by Harris corner detection algorithm and the algorithm proposed in this paper
表1. Harris角点检测算法与本文提出算法识别出的角点像素坐标比较
从表格数据可以看出两种角点检测算法所识别出的角点像素坐标基本保持一致,最多相差一个像素值。当用Harris角点检测算法时,需要从检测出的角点当中挑选出可以用的角点。而本文创新的角点检测算法的优势在于能够直接准确找到工件的角点进行进一步的测量和三维建模操作,达到提高效率减少数据冗余的目的。
5.2. 对比Harris角点检测算法与本文提出算法识别角点的准确率
角点检测方法的一个重要评价标准是其对多幅图像中相同或相似特征的检测能力。并且能否应对光照变化、图像旋转等图像变化情况。用拍摄的三张工件图对本文提出的角点检测算法进行测试。图7为测试工件,图7(a)和图7(b)为同一八角点工件不同角度和光照条件下拍摄所得,图7(c)为四角点工件的图片。
直接用Harris角点检测算法分别对上述工件图片边缘识别后的工件轮廓进行检测,其结果如图8所示:
Figure 8. Harris corner detection results of test workpiece
图8. 测试工件的Harris角点检测结果
提取工件边缘轮廓后再用本文创新的角点检测算法对工件进行角点检测,其结果如图9所示。
Figure 9. Corner detection results of innovative algorithm for testing workpiece
图9. 测试工件的创新算法角点检测结果
对两种算法的角点检测准确率进行比较,其结果统计如表2所示,实验结果表明该算法对工件轮廓上角点检测的准确率有显著提高。
Table 2. Corner detection of two algorithms
表2. 两种算法角点检测情况
6. 结束语
本文针对Harris角点检测存在的角点检测存在的不足,提出了一种新的角点检测方法。该方法首先对比各种算子对工件图像边缘的识别结果,最终选择采用抗噪声干扰效果较好的Canny算子进行边缘识别。其次针对识别出的边缘图像存在大量噪声和伪边缘的问题,在边缘识别过程中选择阈值时采用OTSU自适应阈值方法减少图像进一步处理时的数据冗余。由于识别出来的边缘线直接用Harris角点检测技术检测会识别出很多错误的角点,针对此情况,最后利用八邻域轮廓跟踪法提取出图像外轮廓,剔除掉边缘识别结果中的噪声和伪边缘,再用本文提出的角点检测算法进行检测。研究结果表明:该算法识别出来的角点与实际情况相符,相比传统的Harris角点检测算法,角点的识别准确率有了显著的提高。
NOTES
*通讯作者。