基于边缘检测和Hough变换的圆定位算法
2018-08-24,,2
, ,2
(1.浙江理工大学机械与自动控制学院,杭州 310018;2.浙江大学能源工程学院,杭州 310007)
0 引 言
图形识别是图像处理和模式识别领域的一个重要问题,圆形的识别和位置检测是机器视觉常见的问题之一,广泛应用于工业测量。目前机器视觉中检测圆形算法主要有标准Hough变换算法及其优化算法。但是由于标准Hough算法使用三维空间参数累积的方法,数据量大,大量占用计算内存,运算速度较慢。针对这一缺陷Xu等[1]提出了随机Hough变换算法,通过随机采样三个非共线的边缘点进行累积得出圆的位置参数,对复杂图像进行处理时,由于该方法大量引入无关样本点,造成计算量过大。目前一些改进算法[2-7]主要对Hough变换进行降维处理,以减少计算量。陈珂等[6]提出了以线段为投票主体的一维概率Hough变换,对标准Hough变换进行了降维处理,但是其对于半径小于8像素的圆较难捕获。Manznaera等[7]通过估计灰度图像中的曲率导数,对所有像素进行投票,通过Hough变换直接计算相关参数,不需要计算轮廓即可得出圆孔相关位置参数。但当圆孔有瑕疵时,该算法也会对瑕疵点进行投票,得到无关参数,影响检测结果的准确性。相关文献[8-10]对预处理阶段的边缘检测算法进行了优化,减少干扰噪声提升检测精度。陈小艳等[8]提出在Canny边缘检测后过滤图像边界的方法来提升Hough变换的检测效率,但并没考虑Canny算法自身的缺点。刘可平等[9]针对传统Canny算法的缺点,提出了用双边滤波代替算法中的高斯滤波,该方法能够有效去除干扰并保留边缘信息,但当边缘有瑕疵时,该方法也会提取瑕疵边缘,对检测结果造成影响。以上文献多是对大直径少量圆进行研究,在对小直径多圆进行检测时,由于圆直径小数量多,这些基于提取圆特征的改进算法并不适合,且计算量大。
本文主要对机器视觉系统中圆检测算法进行研究和改进,提出了基于边缘检测和Hough变换的圆定位算法,该算法可运用于小直径多圆的检测场合。首先对传统Canny边缘检测算法相关步骤进行改进,削弱无关瑕疵点对检测结果的影响,并完整提取出孔位边缘;在此基础上,对边缘像素点采取75%的抽样并限定检测圆直径,以提升Hough变换圆检测的效率。将算法应用在具有多圆小直径特征的牙刷头上,以验证其有效性。
1 Canny算法的改进
传统Canny算法能较好地去除图像噪声并提取出图像边缘,但在相机采集图像的过程中,由于受到各方面的影响,传统Canny算法存在以下缺陷:a)高斯滤波对图像平滑处理过度,丢失部分边缘信息。b) 采用2×2邻域求解梯度容易将噪声提取为边缘。c) 人为设定高、低阈值具有较大的随机性,自适应能力较差。这些缺陷影响了Canny算法边缘提取的效果,进而影响圆检测结果的准确性。本文从滤波方法、梯度计算和阈值选取三方面对传统Canny算法进行改进。
1.1 采用中值滤波替换高斯滤波
传统Canny算法采用高斯滤波对图像进行滤波处理,难以在去噪和保边取得好的平衡,这个缺点普遍存在于线性滤波器中。故本文采用非线性滤波器中的中值滤波[11]对图像进行滤波处理。
中值滤波采用像素点领域灰度值中的中值替代该像素的灰度值,在去除噪声的同时又能保留图像边缘细节。但是传统中值滤波会对每个像素点进行滤波处理,造成边缘像素点在滤波后变得模糊。故本文引进边缘点判断机制解决该问题,以像素点A(x,y)为中心选取十字领域的4个像素,设T为阈值,f(xi,yi)(i=1,2,3,4)为邻近4像素灰度值,f(x,y)为中心像素灰度值,s为中心像素与边缘像素灰度值相似个数。具体实现步骤如下:
a) 计算d=fxi,yi-fx,y,若d b)s加1,若a c) 判定该点为边缘像素点,输出像素值f(x,y); d) 判定该点为噪声点或不是边缘像素点,进行中值滤波,输出滤波后的像素值f′(x,y)。 传统Canny算法采用2×2的邻域对含有较强噪声的图片进行梯度计算时,检测时会引入无关边缘并丢失边缘细节,所以本文采用3×3邻域求解梯度幅值。为了使边缘能够进行多方向的检测,在原算法的基础上增加了45°方向和135°方向进行梯度幅值计算。首先计算图像G(x,y)各个方向的一阶偏导数: (1) 其中:Mx(x,y)为x方向偏导数,My(x,y)为y方向偏导数,Mi(x,y)为45°方向偏导数,Mj(x,y)为135°方向偏导数。然后,分别求出水平方向和垂直方向的差分: (2) 其中:MH(x,y)为水平方向差分,MV(x,y)为垂直方向差分。最后分别求得梯度幅值g和梯度方向θ: 对梯度幅值在梯度方向上进行非极大值抑制,将局部最大值之外的所有梯度值抑制为0,保留所有可能是边缘的像素点。 传统Canny算法阈值由人工设定,难以获得良好的边缘效果,采用最大类间方差法[12]进行改进,使其能够自主选取最高阈值。设图像G(x,y)总像素为N,灰度等级为[0,L-1],灰度等级i对应的像素数为Ni,t为目标与背景的分割阈值,则背景类像素灰度值在[0,t]内,目标类像素灰度值在[t+1,L-1],设u0(t)为背景灰度均值,u1(t)为目标灰度均值,则 (3) 总的灰度均值定义为: ut=w0t×u0t+w1t×u1t (4) 图像背景和目标两类像素的类间方差表示为: (5) 传统Hough变换检测圆时会对圆直径从0~∞进行累积,计算量巨大检测效率较低,本文采取限定目标圆直径并对边缘像素点采取75%抽样的方法来减少无关累积。设边缘上随机采样点(x1,y1),该点为圆直径的一个端点,限定直径的取值范围[dmin,dmax],则直径的另一端点(x2,y2)在以(x1,y1)为圆心,以dmin为小径,dmax为大径的圆环内,如图1所示。 图1 点(x2,y2)的范围 通过Hough变换进行累加,若(x2,y2)点在图2所在的圆环内,则可确定该点为圆直径的另一端点,可得到圆的参数为: (6) 计算所有抽样像素点可得到数组A(a,b,r),对数组进行累加,累加结果中的峰值(a0,b0,r0)即为圆孔的圆心坐标和半径。 采用本文算法对植毛孔进行检测的算法流程如图2所示,主要步骤为: a) 原图灰度化后进行边缘点判断,对非边缘点进行中值滤波处理; b) 在3×3邻域求解滤波后图像的梯度幅值和方向; c) 对梯度幅值进行非极大值抑制,将局部极大值之外的所有梯度幅值抑制为0,剔除非边缘像素点; d) 最大类间方差法求出的高低阈值对边缘像素点进行检测和连接,将阈值之外的像素点剔除; e) 对抽样像素点在限定检测圆直径范围内进行Hough变换圆检测并输出参数。 图2 改进算法流程 为了验证本文改进边缘检测算法的效果,以VS2010为实验平台进行模拟仿真,实验用图为200万像素的CMOS相机在背光源的情况下拍摄的牙刷头图像,图3(a)和(b)示出两种牙刷头图像,图3(c)示出瑕疵圆孔。将本文算法与文献[9]的改进算法和传统Canny算法进行对比,对比结果如图3所示,为突出对圆孔瑕疵的处理,仅示出瑕疵圆的处理结果。可见,图3(d)中传统Canny算法边缘检测引入较多伪边缘,并存在较多噪声;图3(e)中文献[9]用双边滤波替代高斯滤波,一定程度上减少了伪边缘,但削弱细小瑕疵的能力较差;图3(f)中本文算法通过对Canny算法进行改进,很好地消除了图像噪声和圆孔内细小瑕疵,边缘检测清晰,保留了真实边缘。可见本文检测算法检测效果优于传统Canny算法和文献[9]的算法。 图3 瑕疵圆边缘检测效果图 圆孔边缘的提取直接关系到Hough变换圆检测的准确性,为了验证本文改进的边缘检测算法和Hough变换圆检测算法的效果,将本文算法检测结果应用在数控牙刷植毛机系统中。对植毛孔进行识别和定位时,通过图像处理得到的结果是基于像素的,为了得到实际几何尺寸,需要找到两者的对应关系。在标准状态下,取d=10 mm的卡尺作为系统的标定工件,经过图像采集,图像处理获取出标定工件的像素长度为dpixel=160.1690,即标定系数k=d/dpixel=0.0624。利用求出的标定系数k将像素尺寸转化为实际物理尺寸,同时利用人工测量的方式用三坐标测量仪对图3(a)和图3(b)圆孔进行位置检测。 将Hough变换得到的检测误差与允许误差对比分析如图4所示。图4分别示出两种牙刷头在Hough变换圆检测后植毛孔圆心坐标在x方向和y方向的误差,图4(c)和(f)示出Hough变换测得圆心位置与真实圆心位置的偏移,从图中可以看出本文算法的检测误差在允许误差范围0~0.06 mm之间,检测精度为0.06 mm,可见算法检测结果是合理的,且所用相机的分辨率越高,圆心位置的检测结果越准确。 图4 误差对比 本文提出了一种改进的小直径多圆检测算法。通过对传统Canny边缘检测算法进行改进提升边缘检测效果;在此基础上利用Hough变换寻找抽样像素点在限定直径范围内的最佳累积圆,实现圆孔定位。该方法具有如下特点:a) 适合小直径多圆的检测场合;b) 当圆孔中有细小瑕疵时也能进行圆检测。对两种具有多圆小直径特征的牙刷植毛孔进行检测,结果表明在圆孔内有瑕疵的情况下也能较精确得出圆位置参数,实验结果表明检测精度可达0.06 mm。1.2 改进的梯度计算方法
1.3 阈值的改进算法
2 改进的Hough变换圆检测算法
3 算法流程与实验分析
4 结 论