一种基于数字图像的圆形物体检测方法与流程

文档序号:11621280阅读:421来源:国知局
一种基于数字图像的圆形物体检测方法与流程

本发明涉及工件检测方法,特别是涉及一种数字图像的圆形工件检测方法。



背景技术:

圆形物体检测是工业检测和机器人的一大重点,在工业生产中,很多工件都是圆形或球形的,比如轴承、滚珠、瓶盖、车轮等,对这些工件的检测与定位是相当重要的。经典的圆检测方法有hough圆检测和基于边缘追踪的最小二乘拟合算法。

hough圆检测算法的其基本思想是将图像空间的一点变换到参量空间的一条曲线或一个曲面,而具有同一参量特征的点经变换后在参量空间中相交,通过判断交点处的累积程度来完成特征曲线的检测。它是一种检测二进制图像中图形的有效方法,如直线、圆、椭圆等。它的优势是在噪声变形、部分区域残缺的状态依然有很好的效果,且一次可以检测多个圆。但是也存在明显的不足:(1)计算量大,所需的计算时间长。(2)需要将参数空间单元预存到存储单元中,耗费大量的存储空间。(3)由于图像空间和参数空间的离散化,使得hough变换的检测精度不高。(4)hough变换采用1值累加的方案对所有的特征点都进行平等投票,无法区分噪声点和组成目标的特征点。

最小二乘拟合法的主要思想是计算一组圆的参数,使得测量数据到拟合圆的距离和最小。该方法的优点是不需要迭代,一次就可以根据测量数据获得参数解,速度快。但是也同样存在不足:(1)对噪声敏感,因为它是一种拟合算法,自然会尽量使拟合曲线接近所有测量数据,当出现噪声数据时,拟合误差将很大。当被测对象经包含圆的边缘数据时,拟合精度高,速度快,但是当存在背景噪声时,拟合效果就很不理想。(2)最小二乘法对所有点进行拟合,一次只能检测一个圆。



技术实现要素:

本发明为了解决上述现有技术存在的不足之处,提供一种基于数字图像的圆形物体检测方法,以期达到一次检测出多个圆、残缺圆,并且速度快、精度高的目的,并能广泛应用于工业圆形工件检测、机器人圆形物体识别等领域。

本发明为解决技术问题采用如下技术方案:

本发明一种基于数字图像的圆形物体检测方法的特点包括以下步骤:

步骤1、获取边缘图像:

首先对采集的任意一幅图像进行灰度化处理,得到灰度图像,再使用canny算子从所述灰度图像中获取边缘图像m,所述边缘图像m中任意一个边缘点用ei表示,i为边缘点的下标,边缘点ei所对应的坐标为(xi,yi);

步骤2、分割边缘成连通的单向曲线:

2.1、从边缘图像m找到任意一个边缘点,从与所述边缘点相邻的正上方的像素开始以顺时针方向使用深度优先遍历算法获得与所述边缘点相连通的其他边缘点,从而得到边缘连通域

2.2、使用逻辑相邻距算法将所述边缘连通域分割为单向边缘曲线l;

步骤3、获取二次边缘曲线:

使用最大绝对距离和算法将所述单向边缘曲线l分解为二次曲线s,从而得到二次曲线集合ψ;

步骤4、确定圆弧:

步骤4.1、使用最小滑动窗口拟合误差算法在所述二次曲线s上初步估计,得到圆弧p;

步骤4.2、使用双边伸缩法以所述圆弧p为基础,在所述二次曲线s上进行精确估计,得到圆弧φ;

步骤5、使用最小二乘法拟合所述圆弧φ,从而获取圆的参数(x,y,r),其中(x,y)表示圆心,r表示半径。

本发明所述的种基于数字图像的圆形物体检测方法的特点也在于:所述步骤2.2中利用逻辑相邻距算法对边缘连通域进行分割是按如下步骤进行的:

2.2.1)称边缘连通域中遍历顺序相邻的两个边缘点为逻辑相邻边缘点;定义边缘连通域中逻辑相邻的两个边缘点ej和ej+1之间的距离为d(j);

2.2.2)初始化j=0;

2.2.3)将j+1赋值给j,并判断j≥n是否成立,如果成立,执行步骤2.2.4),否则按照式(1)计算d(j),并返回执行步骤2.2.3;其中,n为所述边缘连通域中边缘点的个数;

d(j)=max{|xj-xj+1|,|yj-yj+1|}(1)

2.2.4)初始化k=1,c=1,j=0;

2.2.5)将j+1赋值给j,并判断j≥n-1是否成立,如果成立,则执行步骤2.2.7),否则判别d(j)≥2是否成立,如果成立,执行步骤2.2.6),否则返回执行步骤2.2.5;

2.2.6)获得单向曲线lc={ek,ek+1,...ej},更新并将c+1赋值给c,j+1赋值给k,执行步骤2.2.5);

2.2.7)判别d(n-1)≥2是否成立,如果成立,则获得单向曲线lc={ek,ek+1,...en-1},否则,获得单向曲线lc={ek,ek+1,...en-1,en};

由此获取单向曲线l={l1,l2,....lc},结束算法。

所述步骤3中利用最大绝对距离和算法将步骤2中的任一单向曲线l分解为二次曲线s是按如下步骤进行的:

3.1)假设单向边缘曲线l一共有q个边缘点,并表示为{el1,el2,......elq},其中,任意两个边缘点elu和elv所确定的直线记作luv,并用式(2)描述;在区间[u,v]内的任意一个边缘点ela的坐标记为(xa,ya),边缘点ela到直线luv的有向距离记作da,并按式(3)定义;用duv表示边缘点elu到elv点之间所有点到直线luv的有向距离和记作duv,并按照式(4)定义:

luv:ax+by+c=0(2)

3.2)初始化α=0,γ=0,β=α+δ,其中δ为步进的一个常数;

3.3)如果β<q-δ成立,则先将γ+1赋值给γ,然后将[α,β]区间内的边缘点划分为一个新的二次曲线sγ,并将sγ放入二次曲线集合ψ中,且结束算法,否则,计算dαβ和dα(β+δ);

3.4)如果dαβ<dα(β+δ)成立,则将β+δ赋值给β,并返回步骤3.3),否则执行步骤3.5);

3.5)将γ+1赋值给γ后,将[α,β+δ/2]区间内的边缘点划分为一个新的二次曲线sγ,并将sγ放入二次曲线集合ψ中,再将β+δ/2赋值给α,s+δ赋值给β后,返回步骤3.3)。

所述步骤4.1中利用最小滑动窗口拟合误差算法在所述二次曲线集合ψ中的任一二次曲线s上初步估计圆弧区域,获得圆弧p是按如下步骤进行:

4.1.1)计算二次曲线s中的边缘点的个数为n,所述二次曲线s中的边缘点表示为{es1,es2,...esg,...esn},设置阈值tn,如果n<tn,则删除所述二次曲线s,否则,执行步骤4.1.2);

4.1.2)选定滑动窗口宽度τ为n/3,并初始化窗口的左端点lp为0;

4.1.3)如果lp>n/2成立,则执行步骤4.1.4),否则使用最小二乘法拟合点集{eslp,eslp+1,....eslp+τ},得到圆拟合参数(xlp,ylp,rlp),再根据式(5)计算平均拟合误差flp后,将lp+1赋值给lp,并继续执行步骤4.1.3);

4.1.4)按式(6)计算最小拟合误差fmin:

fmin=min{fk,1≤k≤lp}(6)

4.1.5)如果fmin小于阈值tf成立,则记与fmin相对应的边缘点下标范围为[λ1,λ2],从而得到初步估计后的圆弧区域,得到圆弧p,否则删除所述二次曲线s。

所述步骤4.2中利用双边伸缩法对所述通过初步估计得到的圆弧p的范围精确估计,从而得到范围更精确的圆弧φ,是按如下步骤进行的:

4.2.1)用fρ,π表示边缘点esρ到esπ之间边缘点的拟合误差,用start表示在二次曲线s上动态伸缩拟合的起点位置,用end表示在曲线s上动态伸缩拟合的终点位置,所述圆弧p包含的边缘点下标范围为[λ1,λ2];

4.2.2)初始化start=0,end=n-1;

4.2.3)计算如果成立,则执行步骤4.2.4,否则执行步骤4.2.5);

4.2.4)如果start=0成立,则执行步骤4.2.5),否则,将start赋值给λ1,将start/2赋值给start后,返回步骤4.2.3);

4.2.5)将(start+λ1)/2赋值给start,如果λ1-start≤1成立,则执行步骤4.2.6),否则返回步骤4.2.3);

4.2.6)计算如果成立,则执行步骤4.2.7),否则执行步骤4.2.8);

4.2.7)如果end=n-1成立,则结束算法,否则,将end赋值给λ2,将(n-1+end)/2赋值给end后,返回步骤4.2.6);

4.2.8)将(end+λ2)/2赋值给end,并判断end-λ2≤1是否成立,若成立,则结束算法,从而得到的start和end分别是圆弧φ在二次曲线s上的精确起点和终点位置,否则返回步骤4.2.6)。

与现有技术相比,本发明的有益效果在于:

1、本发明首先获取连通的边缘曲线,然后根据边缘点得逻辑相邻距将边缘曲线分解为多个单向曲线,接着分别使用最小滑动窗口拟合误差法和双边伸缩法逐次从单向曲线中分割出精确的圆弧,最后使用最小二乘法拟合圆弧,从而获取圆参数,从而能一次检测多个圆形物体、被部分遮挡的圆形物体,并且速度快、精度高。

2、本发明通过使用逻辑相邻距法获取单向的连续边缘,并在单向的连续边缘上识别圆,而不是图像中所有的离散边缘点,相比hough圆检测法,计算量大大降低,且精度更高。

3、本发明通过使用逻辑相邻距法将图像中的边缘分割成多条单向的连续边缘,然后在每条边缘曲线上检测圆,最后使用最小二乘法拟合圆,相比传统的最小二乘法,具有多圆检测能力。

4、本发明通过使用逻辑相邻距法获取单向的连续边缘,在边缘点数量少的单向连续边缘曲线上检测圆,相比hough圆检测法的在所有边缘点上检测,缩小了圆检测范围,定位速度更高,且对小圆弧更加敏感,因此具有更好的残缺圆检测能力。

5、本发明使用滑动窗口最小拟合误差法和双边伸缩法可以精确地确定边缘曲线中的圆弧位置,相比hough圆检测法,圆检测范围更小,对小圆弧具有更高的因此具有更好的残缺圆检测能力。

6、本发明使用滑动窗口最小拟合误差法和双边伸缩法可以精确地确定边缘曲线中的圆弧位置,因为没有圆弧以外的边缘噪声点,克服了传统最小二乘法对噪声敏感的缺点。

附图说明

图1是本发明基于数字图像识别圆形物体的整体流程图;

图2是本发明单向边缘曲线分割的示意图;

图3是本发明计算最大绝对距离和的示意图;

图4是本发明最小滑动窗口拟合误差初步确定圆弧示意图;

图5a是本发明实施例圆形物体检测的原图;

图5b是本发明实施例圆形物体检测的边缘图;

图5c是本发明实施例圆形物体检测的检测图。

具体实施方式

本实施例中,一种基于数字图像的轴圆形物体检测方法对多个圆形物体、被部分遮挡的圆形物体具有准确的检测能力,可以广泛应用于工业圆形工件检测、机器人圆形物体识别等领域,具有很高的应用价值。其步骤包括1获取图像的边缘;2分割边缘成连通的单向曲线;3分割单向曲线成二次曲线;4确定圆弧区域;5圆拟合;流程图如图1,其中:

第2步的分割边缘成连通的单向曲线,首先使用深度优先遍历法获取连通的边缘域,然后使用逻辑相邻距法(logicalneighborhoodalgorithm,lna)根据逻辑相邻的两个边缘点之间的距离将连通的边缘域分割为多条单向的连通曲线。

第3步的分割单向曲线成二次曲线,使用最大绝对距离和算法(maximumabsolutedistancesum,mads)通过计算边缘点到直线的有向距离和将单向曲线分割成数条二次曲线。

第4步的圆弧的确定,首先使用最小滑动窗口拟合误差法(minimumslidingwindowfittingerror,mswfe)获取范围初步估计的圆弧,然后使用双边伸缩法(bilateralstretchmethod,bsm)进一步精确圆弧区域。具体的,是按照如下步骤进行的:

步骤1、获取边缘图像:

首先对采集的任意一幅图像进行灰度化处理,得到灰度图像,canny边缘检测算子几乎在所有场景中比其他边缘检测算子(sobel、roberts、prewitt等)均具有更好的检测效果,所以再使用canny算子从所述灰度图像中获取边缘图像m,边缘图像m中任意一个边缘点用ei表示,i为边缘点的下标,边缘点ei所对应的坐标为(xi,yi);

步骤2、分割边缘成连通的单向曲线:

由步骤1获取的边缘图像中的边缘是离散的,边缘之间没有建立领域关系,所以此步骤将根据边缘点之间的领域关系对边缘点进行分类,彼此连通的边缘点将归为一类,即构成边缘连通域,然后再根据逻辑距离将连通域进一步分割为单向边缘曲线,具体如下:

2.1、从边缘图像m找到任意一个边缘点,从与此边缘点相邻的正上方的像素开始以顺时针方向使用深度优先遍历算法获得与边缘点相连通的其他边缘点,从而得到边缘连通域深度优先遍历的思想是一旦遍历到一个边缘点,将一直沿着此边缘点延伸访问它的相邻边缘点,直到无边缘点可访问,然后再返回访问与第一个边缘点相邻的第二个边缘点,所以深度优先遍历是一种方向纵深的遍历方法,所得到的边缘点一定是访问完一个方向的边缘点后才访问另一个方向的边缘点,如图2,根据深度优先遍历可以得到一个连通域包含边缘点e1到e9,边缘点e1到e9彼此连通,且访问顺序依次是e1、e2、e3、e4、e5、e6、e7、e8、e9、e10;

2.2、使用逻辑相邻距算法将边缘连通域分割为单向边缘曲线l;

2.2.1)称边缘连通域中遍历顺序相邻的两个边缘点为逻辑相邻边缘点,逻辑相邻不一定物理相邻,而物理相邻也不一定逻辑相邻,如图2中的e4和e8彼此空间上相邻,但是逻辑上并不相邻,而e7和e8逻辑相邻,但是空间位置上并不相邻;定义边缘连通域中逻辑相邻的两个边缘点ej和ej+1之间的距离为d(j);

2.2.2)初始化j=0;

2.2.3)将j+1赋值给j,并判断j≥n是否成立,n为所述边缘连通域中边缘点的个数,如果成立,执行步骤2.2.4),否则按照式(1)计算d(j),并返回执行步骤2.2.3;

d(j)=max{|xj-xj+1|,|yj-yj+1|}(1)

式(1)中,xj,yj分别是边缘点ej的横纵坐标,可以看出,d(j)是两个边缘点ej和ej+1的最大坐标差;

2.2.4)初始化k=1,c=1,j=0;

2.2.5)将j+1赋值给j,并判断j≥n-1是否成立,如果成立,则执行步骤2.2.7),否则判别d(j)≥2是否成立,如果成立,执行步骤2.2.6),否则返回执行步骤2.2.5;

2.2.6)获得单向曲线lc={ek,ek+1,...ej},更新并将c+1赋值给c,j+1赋值给k,执行步骤2.2.5);

2.2.7)判别d(n-1)≥2是否成立,如果成立,则获得单向曲线lc={ek,ek+1,...en-1},否则,获得单向曲线lc={ek,ek+1,...en-1,en}。

至此,获取单向曲线l={l1,l2,....lc},结束算法。

如图2,连通域中的边缘点是e1、e2、e3、e4、e5、e6、e7、e8、e9、e10,逻辑距离分别为:可以看到d(7)≥2成立,而其他的逻辑距离都为1,根据分割条件,将在e7处进行分割,从而获取包含边缘点{e1、e2、e3、e4、e5、e6、e7}的方向a上的边缘点曲线和包含边缘点{e8、e9、e10}的方向b的边缘点曲线,两个方向的分叉是在边缘点e4处发生的。逻辑距离阈值之所以选择为2,是因为按照深度优先遍历的法则,当逻辑距离大于2时,这两个边缘点必然不是在一个方向上的。

步骤3、获取二次边缘曲线:

因为圆是二次曲线的一种,所以将单向曲线先分解为数条二次曲线,然后在二次曲线的基础上进一步确定圆弧是可行的。使用最大绝对距离和算法将单向边缘曲线l分解为二次曲线s,从而得到二次曲线集合ψ,具体如下:

3.1)假设单向边缘曲线l一共有q个边缘点,并表示为{el1,el2,......elq},其中,任意两个边缘点elu和elv所确定的直线记作luv,并用式(2)描述,其中a、b、c为常数;在区间[u,v]内的任意一个边缘点ela的坐标记为(xa,ya),边缘点ela到直线luv的有向距离记作da,并按式(3)定义,由式(3)可知,当两个边缘点位于直线luv两侧时,所得到的有向距离方向是相反的,乘积为负;用duv表示边缘点elu到elv点之间所有点到直线luv的有向距离和记作duv,并按照式(4)定义,当在区间[u,v]内的所有边缘点位于直线一侧时,每个有向距离方向相同,所得到的绝对和duv最大:

luv:ax+by+c=0(2)

3.2)初始化α=0,γ=0,β=α+δ,其中δ为步进的一个常数,它的大小决定了对二次曲线的敏感程度,δ越大,小的二次曲线段越容易被忽略。本方法中选择δ=10;

3.3)如果β<q-δ成立,则先将γ+1赋值给γ,然后将[α,β]区间内的边缘点划分为一个新的二次曲线sγ,并将sγ放入二次曲线集合ψ中,且结束算法,否则,计算dαβ和dα(β+δ);

3.4)如果dαβ<dα(β+δ)成立,则将β+δ赋值给β,并返回步骤3.3),否则执行步骤3.5);

3.5)将γ+1赋值给γ后,将[α,β+δ/2]区间内的边缘点划分为一个新的二次曲线sγ,并将sγ放入二次曲线集合ψ中,再将β+δ/2赋值给α,s+δ赋值给β后,返回步骤3.3)。具体分析参考图3,开始曲线起点为a,终点为b,然后步进δ,得到点c,dac>dab,所以再次步进δ,得到点d,dad>dac,再步进δ,得到点e,因为dae<dad,所以取d和e的中点作为前面二次曲线段的终点,并将a-f之间的点放入二次曲线点集中,接下来以f为起点,终点为e,发现此时e已经为曲线终点,所以将f-e段之间的点放入一个新的二次曲线中,结束算法。

步骤4、确定圆弧:

由步骤3确定了数条二次曲线,有的二次曲线包含圆弧,可能一条也可能数条,而有的二次曲线不包含圆弧,所以需要从二次曲线中检测出圆弧,具体如下:

步骤4.1、使用最小滑动窗口拟合误差算法在所述二次曲线s上初步估计,得到圆弧p;

4.1.1)计算二次曲线s中的边缘点的个数为n,所述二次曲线s中的边缘点表示为{es1,es2,...esg,...esn},设置阈值tn,如果n<tn,则删除所述二次曲线s,本实例中将tn设置为20,否则,执行步骤4.1.2);

4.1.2)选定滑动窗口宽度τ为n/3,并初始化窗口的左端点lp为0;

4.1.3)如果lp>n/2成立,则执行步骤4.1.4),否则使用最小二乘法拟合点集{eslp,eslp+1,....eslp+τ},得到圆拟合参数(xlp,ylp,rlp),再根据式(5)计算平均拟合误差flp后,将lp+1赋值给lp,并继续执行步骤4.1.3);

4.1.4)按式(6)计算最小拟合误差fmin:

fmin=min{fk,1≤k≤lp}(6)

4.1.5)如果fmin小于阈值tf成立,则记与fmin相对应的边缘点下标范围为[λ1,λ2],从而得到初步估计后的圆弧区域,得到圆弧p,否则删除所述二次曲线s;

在本实例中tf设置为0.01,因为图像中的边缘点的坐标为整数,所以相邻坐标的最小坐标差为1,取值为0.01的意思就是平均每个边缘点到圆心的距离与半径的差为0.01个单位坐标差。具体实例参考图4,已知二次曲线s,起点为a,终点为d,数据边缘点个数为n,滑动窗口宽度为n/3。起初,滑动窗口的左端位于曲线的最左端,然后沿着箭头方向依次向右滑动,每次滑动步进为δ,取10,每次滑动窗口内边缘点的圆拟合误差对应于曲线正下方的拟合误差曲线,从图可以看出,当滑动窗口的左端移动到b点时,所对应的圆拟合误差最小,当滑动窗口的左端移动到c点时,滑动窗口的右端已经到了曲线的末端,停止移动。所以最终确定曲线s上的圆弧为p。

步骤4.2、使用双边伸缩法以圆弧p为基础,在二次曲线s上进行精确估计,得到圆弧φ;

4.2.1)用fρ,π表示边缘点esρ到esπ之间边缘点的拟合误差,用start表示在二次曲线s上动态伸缩拟合的起点位置,用end表示在曲线s上动态伸缩拟合的终点位置,所述圆弧p包含的边缘点下标范围为[λ1,λ2];

4.2.2)初始化start=0,end=n-1;

4.2.3)计算如果成立,则执行步骤4.2.4,否则执行步骤4.2.5),之所以取值1.2,是基于两个因素考虑的,一是曲线边缘中存在噪声,因此即使扩展后的曲线仍然是好的圆弧,拟合误差也可能不会比之前圆弧拟合误差小,二是基于圆弧最大化原则,即尽可能地获取大范围的圆弧,即使圆弧并不是很完美,更小的取值一般只会得到可见圆弧的一部分,如果取值更大,则可能包含更多非圆弧边缘点,然而,1.2只是一个经过多次实验获取的经验值,并不是最优值。

4.2.4)如果start=0成立,则执行步骤4.2.5),否则,将start赋值给λ1,将start/2赋值给start后,返回步骤4.2.3);

4.2.5)将(start+λ1)/2赋值给start,如果λ1-start≤1成立,则执行步骤4.2.6),否则返回步骤4.2.3);

4.2.6)计算如果成立,则执行步骤4.2.7),否则执行步骤4.2.8);

4.2.7)如果end=n-1成立,则结束算法,否则,将end赋值给λ2,将(n-1+end)/2赋值给end后,返回步骤4.2.6);

4.2.8)将(end+λ2)/2赋值给end,并判断end-λ2≤1是否成立,若成立,则结束算法,从而得到的start和end分别是圆弧φ在二次曲线s上的精确起点和终点位置,否则返回步骤4.2.6)。

步骤5、使用最小二乘法拟合所述圆弧φ,从而获取圆的参数(x,y,r),其中(x,y)表示圆心,r表示半径。如图5a为包含被部分遮挡的轴承,轴承有内圈和外圈,如图5b为使用canny算子检测的边缘图,可以看出内外圈的边缘并不是完整的圆,而是一个圆弧,且与其他边缘相互粘连,如图5c为最终的检测结果,成功地检测出了内圈圆和外圈圆,验证了本发明所提算法的有效性。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1