发明内容
本发明所要解决的技术问题是针对现有技术的不足提供一种复杂场景中精确的实时曲线检测方法。
本发明的技术方案如下:
一种复杂场景中精确的实时曲线检测方法,通过图像获取设备得到待检测的图像,对该图像实施灰度化转换后利用Laplacian(4向)算子进行边缘检测,得到二值待检测图像。对于该二值图像,首先由随机采样点计算得到一个曲线参数,通过在测试区域选择若干个图像点,统计这些图像点中位于该曲线参数所对应的曲线上的个数。若位于该曲线上的点数大于某一阈值,则认为该曲线为候选曲线。然后利用证据积累方法进一步确定该候选曲线是否为真实曲线。本发明采用了新颖的候选曲线确定方法来有效提高曲线的检测速度。实验结果表明该方法具有快速、高精度、强鲁棒性等特点。
所述算法的具体步骤为:
A1创建边缘点集D、数组E以及数组I,初始化采样次数f=0;
A2从D中随机选取n个相互距离均大于阈值Td的不同点d1,...,dn,计算由这n个点所确定的可能曲线;
A3判断位于可能曲线上的测试点数s是否大于阈值t;若s>t,则这条可能曲线被视为候选曲线,转A5;否则这条可能曲线不是候选曲线,转A4;
A4f=f+1;若f的值大于可允许的最大连续采样失败次数,检测结束;否则,转A2;
A5统计测试区域内所有边缘点中位于这条候选曲线上的点数;若该点数大于阈值mmin,转A6;否则,这条曲线为虚假曲线,转A4;
A6该候选曲线被视为真实曲线;判断已检测到的曲线条数是否达到预设的数目;若是,检测完成;否则,从D中删除位于该曲线上的所有点,更新数组E和I,重置f=0,转A2。
所述的算法,所述步骤A3中,为了能快速地选取测试点,需定义一个用于存储边缘点集中坐标信息的一维整型数组E,存储顺序为:按横坐标从小到大依次存储各边缘点的纵坐标,对于横坐标相同的点,按纵坐标从小到大依次存储各边缘点的纵坐标;为了能够快速获取横坐标为i的那些边缘点坐标,需定义一维整型数组I[width],这里的width是待测图像的宽度,设横坐标为i(0≤i<width)的边缘点共有c
i个,令I[0]=0,则可定义
于是,对于横坐标为i的所有边缘点的纵坐标,很方便地能够从E中得到,即第一个纵坐标为E[I[i]],最后一个纵坐标为E[I[i]+c
i-1];对于c
i=0的情形,因I[i]>I[i]+0-1,所以这种情况下,横坐标为i的边缘点不存在。
所述的算法,所述选取测试点的方法如下:
B1令j=0;
B2随机生成一个位于测试区域左边界和右边界横坐标之间的整数i;若0≤i<width,转B3;否则,转B5;
B3从数组E中可以获取横坐标为i的所有边缘点的纵坐标;
B4从这些边缘点中得到横坐标为i的测试点;
B5j=j+1;如果j=k,k是一个包括2、3在内的很小的整数;则结束;否则,转B2。
所述的算法,所述的步骤B2中,由于随机生成的整数i是位于测试区域左、右边界横坐标之间,所以在判断一个图像点是否为测试点时,进行如下优化:
C1)对于直线检测,只要式by<dy<ty成立,则为测试点;
C2)对于圆检测,只要式(4)和式(5)同时成立,则为测试点;
T3<dy<T4 (4);
T3=b-r-δ,T4=b+r+δ;
dx>T5或dx<T6或dy>T7或dy<T8 (5);
(3)对于椭圆检测,只要式T3<dy<T4成立,则为测试点;T3=miny-δ,T4=maxy+δ。
本发明提出的高效的曲线检测算法,包括直线、圆和椭圆。利用随机采样点计算得到一个曲线参数,这个参数所对应的曲线很可能不是一条真实曲线,该算法通过从特定区域中选择若干个点来快速筛选出无效的曲线参数,未被筛选出去的参数决定了一条候选曲线,候选曲线将被通过证据积累进一步确定是否为真实曲线。实验结果表明该算法具有快速、高精度、强鲁棒性等特点。
具体实施方式
以下结合具体实施例,对本发明进行详细说明。
1提出的高效曲线检测算法
1.1RHT中的相关参数信息累积器
假设每次采样n个不同点,都恰好能计算得到一个曲线参数。在RHT中,通过随机采样n个不同点来计算得到一个曲线参数,即图像空间中的这n个点被映射成参数空间中的一个点。每次通过采样计算得到的曲线参数,都需在累积器中进行参数累积,这个累积器是一个链表结构。参数链表结构如图1所示,这里是以直线作为例子来进行阐述的。参数链表P是由一系列如图2所示的元素组成,每个元素包含一个直线参数(a,b)以及该参数的计数(score)。为了实现快速搜索,在创建P时,是根据参数的大小有序地插入元素的。
参数链表中参数累积的具体方式如下:在链表中寻找一个近似等于新生成的曲线参数的元素,如果能找到则对该参数元素的计数score加1;如果不能找到,则将这个新参数作为一个新元素插入到链表的适当位置中。当链表中某个元素的计数一旦达到nt时,这个元素便确定了一条候选曲线。
RHT中引入参数链表的目的是为了寻找候选曲线。由于无目标地随机采样,会产生相当多的元素,从而使链表变得很大,需要大量的存储空间。每采样一次,就需要搜索链表一次,将耗费大量的计算时间。
1.2测试区域与测试点的定义
为了能够快速地判断一点是否位于测试区域内,本发明将测试区域定义为矩形或者两个矩形差运算的结果,只需将该点的坐标值与矩形边界进行简单的比较操作即可。对于不同的曲线,包括直线、圆、椭圆,它们的测试区域是不一样的。下面将分别介绍这三种曲线的测试区域以及判断一个点是否位于测试区域内的方法。
1.2.1直线检测中的测试区域与测试点
任意两点所确定的直线均与图像的边界有两个交点,由这两个交点的坐标可以唯一确定一个矩形或一条线段(两个交点的横坐标或纵坐标相等时)。根据两个交点是否在相邻的图像边界上,可以分为两种情况。
(1)如图3所示,点A和点C为直线l与图像边界的两个交点,θ为直线l与图像下边界所形成的角度,理想情况下矩形ABCD是对应于直线l的测试区域。考虑到图像离散化等因素,实际应用时会允许一个误差δ(δ是一个很小的值,如0.5个像素宽),所以真正的测试区域是矩形EFGH,其中
(2)如图4所示,点B和点D为直线l与图像边界的两个交点,θ为直线l与图像右边界所形成的角度,理想情况下矩形ABCD是对应于直线l的测试区域。同样考虑到误差δ,所以真正的测试区域是矩形EFCG,其中
对于以上两种情况,都可以快速地判断出一个图像点是否位于测试区域内。设测试区域的左右边界的横坐标分别为lx、rx,上下边界的纵坐标分别为ty、by,则判断任一图像点d(dx,dy)是否在测试区域内的方法如下:当式(1)和(2)同时成立时,认为点d(dx,dy)在测试区域内,即该点为测试点;否则点d(dx,dy)不在测试区域内,即该点不是测试点。
lx<dx<rx (1)
by<dy<ty (2)
1.2.2圆检测中的测试区域与测试点
如图5所示,圆O(a,b,r)的竖直外切正方形为ABCD、竖直内接正方形为EFGH,这两个正方形的边长分别为2r和
它们的中心均为点O。圆O上的点只可能位于这两个正方形的差的区域中(即图5中用斜线填充的区域)。因此,理想情况下图5中斜线所在区域是对应于圆O的测试区域。考虑到容许误差δ,真正的测试区域是正方形IJKL与正方形MNPQ的差的区域。
很明显,正方形IJKL的左右边界的横坐标分别为a-r-δ与a+r+δ、上下边界的纵坐标分别为b+r+δ与b-r-δ,正方形MNPQ的左右边界的横坐标分别为
与
上下边界的纵坐标分别为
与
下面给出判断任一图像点d(d
x,d
y)是否在测试区域内的方法:当式(3)~(5)同时成立时,认为点d(d
x,d
y)在测试区域内,即该点为测试点;否则点d(d
x,d
y)不在测试区域内,即该点不是测试点。
T1<dx<T2 (3)
T3<dy<T4 (4)
dx>T5或dx<T6或dy>T7或dy<T8 (5)其中,T1=a-r-δ,T2=a+r+δ,T3=b-r-δ,T4=b+r+δ,
1.2.3椭圆检测中的测试区域与测试点
如图6所示,椭圆E的竖直外切矩形为ABCD,假设椭圆上所有点中的最小、最大横坐标分别为minx、maxx,最小、最大纵坐标分别为miny、maxy,则点A坐标为(minx,miny)、点C坐标为(maxx,maxy)。理想情况下矩形ABCD是对应于椭圆E的测试区域。考虑到容许误差δ,真正的测试区域是矩形FGHI,该矩形的左右边界的横坐标分别为minx-δ与maxx+δ、上下边界的纵坐标分别为maxy+δ与miny-δ。
下面给出判断任一图像点d(dx,dy)是否在测试区域内的方法:当式(6)和(7)同时成立时,认为点d(dx,dy)在测试区域内,即该点为测试点;否则点d(dx,dy)不在测试区域内,即该点不是测试点。
T1<dx<T2 (6)
T3<dy<T4 (7)
其中,T1=minx-δ,T2=maxx+δ,T3=miny-δ,T4=maxy+δ。
如果在椭圆内部找到一个竖直矩形,那么矩形FGHI与这个内部矩形考虑容许误差后的矩形的差的区域,将成为新的测试区域。新的测试区域将会变得更小,有利于提高计算速度。如何快速寻找椭圆内部的合理竖直矩形,是下一步的研究工作。
1.3提出的确定候选曲线的方法
为了解决RHT中的相关参数信息累积器所导致的计算量和内存需求量过大的问题,本发明提出一种新的确定候选曲线的方法。如图7所示,该方法在通过采样点计算得到一个曲线参数后,从图像中的测试区域选取若干个测试点,并统计这些测试点中位于该参数所对应曲线上的点数s,如果s大于阈值t(t是一个很小的整数),则该参数确定了一条候选曲线。该方法不需要参数累积器,从而大幅度减少了计算时间和存储空间。
为了能快速地选取测试点,需定义一个用于存储边缘点集中坐标信息的一维整型数组E,存储顺序为:按横坐标从小到大依次存储各边缘点的纵坐标,对于横坐标相同的点,按纵坐标从小到大依次存储各边缘点的纵坐标。为了能够快速获取横坐标为i的那些边缘点坐标,需定义一维整型数组I[width],这里的width是待测图像的宽度,设横坐标为i(0≤i<width)的边缘点共有c
i个,令I[0]=0,则可定义
于是,对于横坐标为i的所有边缘点的纵坐标,很方便地能够从E中得到,即第一个纵坐标为E[I[i]],最后一个纵坐标为E[I[i]+c
i-1]。对于c
i=0的情形,因I[i]>I[i]+0-1,所以这种情况下,横坐标为i的边缘点不存在。
本发明选取测试点的方法如下:
(1)令j=0。
(2)随机生成一个位于测试区域左边界和右边界横坐标之间的整数i。若0≤i<width,转(3);否则,转(5)。
(3)从数组E中可以获取横坐标为i的所有边缘点的纵坐标。
(4)根据第1.2节的方法,可从这些边缘点中得到横坐标为i的测试点。
(5)j=j+1。如果j=k(k是一个很小的整数,如2、3),则结束。否则,转(2)。
在选取测试点的步骤(2)中,由于随机生成的整数i是位于测试区域左、右边界横坐标之间,所以在判断一个图像点是否为测试点时,可以进行如下优化:
(1)对于直线检测,只要式(2)成立,则为测试点。
(2)对于圆检测,只要式(4)和式(5)同时成立,则为测试点。
(3)对于椭圆检测,只要式(7)成立,则为测试点。
理想情况下,可对k与s之间的关系分析如下:
(1)对于直线检测,k与s的值相等。特殊情况下,当直线为竖直直线时,s的值等于直线上的点数乘以k。
(2)对于圆检测,s的值是k的2倍。特殊情况下,当测试点的横坐标与圆上点的最大(或最小)横坐标相同时,s与k的值相等。
(3)对于椭圆检测,s的值是k的2倍。特殊情况下,当测试点的横坐标与椭圆上点的最大(或最小)横坐标相同时,s与k的值相等。
1.4算法描述
用本发明算法检测具有n个参数的曲线(包括直线、圆和椭圆)的步骤可描述如下。
(1)创建边缘点集D、数组E以及数组I,初始化采样次数f=0。
(2)从D中随机选取n个相互距离均大于阈值Td的不同点d1,...,dn,计算由这n个点所确定的可能曲线。
(3)根据第1.3节的方法,判断位于可能曲线上的测试点数s是否大于阈值t。若s>t,则这条可能曲线被视为候选曲线,转(5);否则这条可能曲线不是候选曲线,转(4)。
(4)f=f+1。若f的值大于可允许的最大连续采样失败次数,检测结束;否则,转(2)。
(5)统计测试区域内所有边缘点中位于这条候选曲线上的点数。若该点数大于阈值mmin,转(6);否则,这条曲线为虚假曲线,转(4)。
(6)该候选曲线被视为真实曲线。判断已检测到的曲线条数是否达到预设的数目。若是,检测完成;否则,从D中删除位于该曲线上的所有点,更新数组E和I,重置f=0,转(2)。
2实验结果
本发明以圆检测为例进行实验来验证提出算法的有效性。这里给出提出的圆检测算法实现时的两点说明:
(1)判断一个点d(dx,dy)是否位于候选圆O(a,b,r)上的方法如下:当式(8)成立时,则认为点d位于候选圆O上;否则,点d不在候选圆O上。
由于开平方运算耗费的计算时间较多,故可通过对式(8)进行化简去掉开平方运算。因r-δ>0,可化简式(8)如式(9)所示,从而提高计算速度。
d1<(dx-a)2+(dy-b)2<d2 (9)
其中,d1=(r-δ)2,d2=(r+δ)2。
另外,随机选取的三点需满足相互距离均大于阈值Td,在计算两点间的距离时,可通过类似的公式化简去掉开平方运算。
(2)判断候选圆是否为真圆时,使用了阈值mmin。考虑到半径大小不同的圆,其阈值mmin是不一样的。因此,可定义mmin=λ×2πr,其中λ是一个比例系数,r是候选圆的半径值。
为验证本发明算法的有效性,进行了大量实验,结果表明,本发明算法的检测速度非常快、检测精度高、鲁棒性强。限于篇幅,这里仅给出其中六例,并与RHT、RCD以及PRCD进行实验对比。为了实验的公平比较,各算法只要检测出图像中的所有圆,检测即结束。这六个实验均是在Core2双核处理器(2.93GHz)、2G内存的计算机上通过C++语言编程实现的。
实验1、2中,RHT的λ、nt、δ分别取0.7、2、0.5,RCD和PRCD的λ、Td、δ均分别取0.7、8、0.5,本发明算法的λ、Td、δ、k、t分别取0.7、8、0.5、3、4;实验3~6中,各算法的λ均取0.6,其他参数值均与实验1、2相同。由于四种算法均通过随机采样来获取采样点,所以每次检测所花费的时间并不相同,本发明所有实验的检测时间都是取50次检测所需时间的平均值。
实验1.参照文献[T.C.Chen,K.L.Chung,An efficient randomized algorithm for detecting circles,ComputerVision and Image Understanding 83(2001)172-191.]的构造。图8(a)是大小为512×512(单位:像素)的合成图像,该图像中存在6个圆,这6个圆上共有2394个图像点。为了比较RHT、RCD、PRCD和本发明算法的检测速度,向图8(a)中随机添加不同比例的噪声,噪声比例为40%~240%,即添加的噪声点数为958~5746。向图8(a)中添加5746个噪声点后的图像如图8(b)所示。应用这四种算法对图8(a)及其添加6种不同比例噪声后的图像分别检测50次的平均时间如表1所示。用本发明算法对图8(b)进行50次检测,均能正确获取每个圆的圆心坐标和半径,具体检测结果如表2和图8(c)所示。
表1四种算法执行时间比较
表2本发明算法对图8(b)的检测结果(单位:像素)
实验2.图9(a)是大小为512×512(单位:像素)的合成图像,该图像中存在5个圆和一些其他图形,该图中共有3152个图像点。为了比较RHT、RCD、PRCD和本发明算法的检测速度,向图9(a)中随机添加不同比例的噪声,噪声比例为30%~180%,即添加的噪声点数为946~5674。向图9(a)中添加5674个噪声点后的图像如图9(b)所示。应用这四种算法对图9(a)及其添加6种不同比例噪声后的图像分别检测50次的平均时间如表3所示。用本发明算法对图9(b)进行50次检测,均能正确获取每个圆的圆心坐标和半径,具体检测结果如表4和图9(c)所示。
表3四种算法执行时间比较
表4本发明算法对图9(b)的检测结果(单位:像素)
实验3.图10(a)是大小为250×180的实际图像,该图像中存在4个圆,应用四种算法分别对其进行如图10所示的圆检测,这四种算法均能正确检测出图像中的每个圆。边缘图像图10(b)中共有1497个图像点,对其进行50次圆检测,RHT、RCD、PRCD和本发明算法所花费的平均时间分别为0.5172秒、0.4117秒、0.3341秒和0.0208秒。应用本发明算法的检测结果如图10(c)所示。
实验4.图11(a)是大小为140×140的实际图像,该图像中存在4个圆,应用四种算法分别对其进行如图11所示的圆检测,这四种算法均能正确检测出图像中的每个圆。边缘图像图11(b)中共有1688个图像点,对其进行50次圆检测,RHT、RCD、PRCD和本发明算法所花费的平均时间分别为5.5368秒、1.9037秒、1.5464秒和0.1503秒。应用本发明算法的检测结果如图11(c)所示。
实验5.图12(a)是大小为200×100的实际图像,该图像中存在3个圆,应用四种算法分别对其进行如图12所示的圆检测,这四种算法均能正确检测出图像中的每个圆。边缘图像图12(b)中共有2222个图像点,对其进行50次圆检测,RHT、RCD、PRCD和本发明算法所花费的平均时间分别为4.4935秒、5.9235秒、4.7413秒和0.1464秒。应用本发明算法的检测结果如图12(c)所示。
实验6.图13(a)是大小为386×180的实际图像,该图像中存在2个圆,应用四种算法分别对其进行如图13所示的圆检测,这四种算法均能正确检测出图像中的每个圆。边缘图像图13(b)中共有6935个图像点,对其进行50次圆检测,RHT、RCD、PRCD和本发明算法所花费的平均时间分别为73.3248秒、87.7747秒、67.5084秒和1.3475秒。应用本发明算法的检测结果如图13(c)所示。
3讨论与结束
RHT使用参数累积器来确定候选曲线,在参数累积过程中,将会产生大量的计算时间以及内存使用量。而本发明算法不需要使用参数累积器,只需统计若干个测试点中位于可能曲线上的个数,即可确定是否为候选曲线。因此,本发明算法在计算时间和内存需求上均比RHT有很大优势。
RCD、PRCD都是通过随机采样四点来确定候选圆,当这四点共圆时,便确定了一个候选圆。而本发明算法只需随机采样三点,有效采样率明显高于RCD和PRCD,因此计算时间要比RCD、PRCD快很多。关于随机采样三点、四点,位于同一圆上的概率比较,容易得出如下两点结论。(1)设图像中w个圆上的点数分别为N
1,N
2,...,N
w。假定图像中不存在噪声,则随机采样三点位于同一圆上的概率约是随机采样四点的
倍。当N
i(1≤i≤w)均相等时随机采样三点位于同一圆上的概率约是随机采样四点的w倍。(2)设图像中噪声点数是所有圆上点数的ε倍,则随机采样四点、三点位于同一圆上的概率约分别是无噪声时的1/(1+ε)
4、1/(1+ε)
3倍。
对于本发明提出的算法有如下几点说明:
(1)若图像的高大于宽,可将图像旋转90度,然后再进行曲线检测,检测完成后,再将检测到的曲线参数进行相应转换,从而得到正确的曲线参数。这种方式可以一定程度上减少判断可能曲线是否为候选曲线的计算时间。
(2)为了提高曲线参数的检测精度,可进行如下优化:每检测到一条曲线,便采用最小二乘法对位于该曲线上的边缘点进行曲线拟合,从而提高曲线参数的检测精度。
(3)本发明算法中的采样点是随机选取的,可通过结合其他改进的采样点选取方法,提高有效采样率,进而提高检测速度。
从实验结果可知,本发明算法在计算速度上比其他三个算法约快一到二个数量级,曲线参数的检测误差小于半个像素,并具有内存需求量小、检测鲁棒性强的特点。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。