本發(fā)明涉及工件檢測方法,特別是涉及一種數(shù)字圖像的圓形工件檢測方法。
背景技術(shù):
圓形物體檢測是工業(yè)檢測和機器人的一大重點,在工業(yè)生產(chǎn)中,很多工件都是圓形或球形的,比如軸承、滾珠、瓶蓋、車輪等,對這些工件的檢測與定位是相當(dāng)重要的。經(jīng)典的圓檢測方法有hough圓檢測和基于邊緣追蹤的最小二乘擬合算法。
hough圓檢測算法的其基本思想是將圖像空間的一點變換到參量空間的一條曲線或一個曲面,而具有同一參量特征的點經(jīng)變換后在參量空間中相交,通過判斷交點處的累積程度來完成特征曲線的檢測。它是一種檢測二進制圖像中圖形的有效方法,如直線、圓、橢圓等。它的優(yōu)勢是在噪聲變形、部分區(qū)域殘缺的狀態(tài)依然有很好的效果,且一次可以檢測多個圓。但是也存在明顯的不足:(1)計算量大,所需的計算時間長。(2)需要將參數(shù)空間單元預(yù)存到存儲單元中,耗費大量的存儲空間。(3)由于圖像空間和參數(shù)空間的離散化,使得hough變換的檢測精度不高。(4)hough變換采用1值累加的方案對所有的特征點都進行平等投票,無法區(qū)分噪聲點和組成目標的特征點。
最小二乘擬合法的主要思想是計算一組圓的參數(shù),使得測量數(shù)據(jù)到擬合圓的距離和最小。該方法的優(yōu)點是不需要迭代,一次就可以根據(jù)測量數(shù)據(jù)獲得參數(shù)解,速度快。但是也同樣存在不足:(1)對噪聲敏感,因為它是一種擬合算法,自然會盡量使擬合曲線接近所有測量數(shù)據(jù),當(dāng)出現(xiàn)噪聲數(shù)據(jù)時,擬合誤差將很大。當(dāng)被測對象經(jīng)包含圓的邊緣數(shù)據(jù)時,擬合精度高,速度快,但是當(dāng)存在背景噪聲時,擬合效果就很不理想。(2)最小二乘法對所有點進行擬合,一次只能檢測一個圓。
技術(shù)實現(xiàn)要素:
本發(fā)明為了解決上述現(xiàn)有技術(shù)存在的不足之處,提供一種基于數(shù)字圖像的圓形物體檢測方法,以期達到一次檢測出多個圓、殘缺圓,并且速度快、精度高的目的,并能廣泛應(yīng)用于工業(yè)圓形工件檢測、機器人圓形物體識別等領(lǐng)域。
本發(fā)明為解決技術(shù)問題采用如下技術(shù)方案:
本發(fā)明一種基于數(shù)字圖像的圓形物體檢測方法的特點包括以下步驟:
步驟1、獲取邊緣圖像:
首先對采集的任意一幅圖像進行灰度化處理,得到灰度圖像,再使用canny算子從所述灰度圖像中獲取邊緣圖像m,所述邊緣圖像m中任意一個邊緣點用ei表示,i為邊緣點的下標,邊緣點ei所對應(yīng)的坐標為(xi,yi);
步驟2、分割邊緣成連通的單向曲線:
2.1、從邊緣圖像m找到任意一個邊緣點,從與所述邊緣點相鄰的正上方的像素開始以順時針方向使用深度優(yōu)先遍歷算法獲得與所述邊緣點相連通的其他邊緣點,從而得到邊緣連通域
2.2、使用邏輯相鄰距算法將所述邊緣連通域
步驟3、獲取二次邊緣曲線:
使用最大絕對距離和算法將所述單向邊緣曲線l分解為二次曲線s,從而得到二次曲線集合ψ;
步驟4、確定圓?。?/p>
步驟4.1、使用最小滑動窗口擬合誤差算法在所述二次曲線s上初步估計,得到圓弧p;
步驟4.2、使用雙邊伸縮法以所述圓弧p為基礎(chǔ),在所述二次曲線s上進行精確估計,得到圓弧φ;
步驟5、使用最小二乘法擬合所述圓弧φ,從而獲取圓的參數(shù)(x,y,r),其中(x,y)表示圓心,r表示半徑。
本發(fā)明所述的種基于數(shù)字圖像的圓形物體檢測方法的特點也在于:所述步驟2.2中利用邏輯相鄰距算法對邊緣連通域
2.2.1)稱邊緣連通域
2.2.2)初始化j=0;
2.2.3)將j+1賦值給j,并判斷j≥n是否成立,如果成立,執(zhí)行步驟2.2.4),否則按照式(1)計算d(j),并返回執(zhí)行步驟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是否成立,如果成立,則執(zhí)行步驟2.2.7),否則判別d(j)≥2是否成立,如果成立,執(zhí)行步驟2.2.6),否則返回執(zhí)行步驟2.2.5;
2.2.6)獲得單向曲線lc={ek,ek+1,...ej},更新
2.2.7)判別d(n-1)≥2是否成立,如果成立,則獲得單向曲線lc={ek,ek+1,...en-1},否則,獲得單向曲線lc={ek,ek+1,...en-1,en};
由此獲取單向曲線l={l1,l2,....lc},結(jié)束算法。
所述步驟3中利用最大絕對距離和算法將步驟2中的任一單向曲線l分解為二次曲線s是按如下步驟進行的:
3.1)假設(shè)單向邊緣曲線l一共有q個邊緣點,并表示為{el1,el2,......elq},其中,任意兩個邊緣點elu和elv所確定的直線記作luv,并用式(2)描述;在區(qū)間[u,v]內(nèi)的任意一個邊緣點ela的坐標記為(xa,ya),邊緣點ela到直線luv的有向距離記作da,并按式(3)定義;用duv表示邊緣點elu到elv點之間所有點到直線luv的有向距離和記作duv,并按照式(4)定義:
luv:ax+by+c=0(2)
3.2)初始化α=0,γ=0,β=α+δ,其中δ為步進的一個常數(shù);
3.3)如果β<q-δ成立,則先將γ+1賦值給γ,然后將[α,β]區(qū)間內(nèi)的邊緣點劃分為一個新的二次曲線sγ,并將sγ放入二次曲線集合ψ中,且結(jié)束算法,否則,計算dαβ和dα(β+δ);
3.4)如果dαβ<dα(β+δ)成立,則將β+δ賦值給β,并返回步驟3.3),否則執(zhí)行步驟3.5);
3.5)將γ+1賦值給γ后,將[α,β+δ/2]區(qū)間內(nèi)的邊緣點劃分為一個新的二次曲線sγ,并將sγ放入二次曲線集合ψ中,再將β+δ/2賦值給α,s+δ賦值給β后,返回步驟3.3)。
所述步驟4.1中利用最小滑動窗口擬合誤差算法在所述二次曲線集合ψ中的任一二次曲線s上初步估計圓弧區(qū)域,獲得圓弧p是按如下步驟進行:
4.1.1)計算二次曲線s中的邊緣點的個數(shù)為n,所述二次曲線s中的邊緣點表示為{es1,es2,...esg,...esn},設(shè)置閾值tn,如果n<tn,則刪除所述二次曲線s,否則,執(zhí)行步驟4.1.2);
4.1.2)選定滑動窗口寬度τ為n/3,并初始化窗口的左端點lp為0;
4.1.3)如果lp>n/2成立,則執(zhí)行步驟4.1.4),否則使用最小二乘法擬合點集{eslp,eslp+1,....eslp+τ},得到圓擬合參數(shù)(xlp,ylp,rlp),再根據(jù)式(5)計算平均擬合誤差flp后,將lp+1賦值給lp,并繼續(xù)執(zhí)行步驟4.1.3);
4.1.4)按式(6)計算最小擬合誤差fmin:
fmin=min{fk,1≤k≤lp}(6)
4.1.5)如果fmin小于閾值tf成立,則記與fmin相對應(yīng)的邊緣點下標范圍為[λ1,λ2],從而得到初步估計后的圓弧區(qū)域,得到圓弧p,否則刪除所述二次曲線s。
所述步驟4.2中利用雙邊伸縮法對所述通過初步估計得到的圓弧p的范圍精確估計,從而得到范圍更精確的圓弧φ,是按如下步驟進行的:
4.2.1)用fρ,π表示邊緣點esρ到esπ之間邊緣點的擬合誤差,用start表示在二次曲線s上動態(tài)伸縮擬合的起點位置,用end表示在曲線s上動態(tài)伸縮擬合的終點位置,所述圓弧p包含的邊緣點下標范圍為[λ1,λ2];
4.2.2)初始化start=0,end=n-1;
4.2.3)計算
4.2.4)如果start=0成立,則執(zhí)行步驟4.2.5),否則,將start賦值給λ1,將start/2賦值給start后,返回步驟4.2.3);
4.2.5)將(start+λ1)/2賦值給start,如果λ1-start≤1成立,則執(zhí)行步驟4.2.6),否則返回步驟4.2.3);
4.2.6)計算
4.2.7)如果end=n-1成立,則結(jié)束算法,否則,將end賦值給λ2,將(n-1+end)/2賦值給end后,返回步驟4.2.6);
4.2.8)將(end+λ2)/2賦值給end,并判斷end-λ2≤1是否成立,若成立,則結(jié)束算法,從而得到的start和end分別是圓弧φ在二次曲線s上的精確起點和終點位置,否則返回步驟4.2.6)。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:
1、本發(fā)明首先獲取連通的邊緣曲線,然后根據(jù)邊緣點得邏輯相鄰距將邊緣曲線分解為多個單向曲線,接著分別使用最小滑動窗口擬合誤差法和雙邊伸縮法逐次從單向曲線中分割出精確的圓弧,最后使用最小二乘法擬合圓弧,從而獲取圓參數(shù),從而能一次檢測多個圓形物體、被部分遮擋的圓形物體,并且速度快、精度高。
2、本發(fā)明通過使用邏輯相鄰距法獲取單向的連續(xù)邊緣,并在單向的連續(xù)邊緣上識別圓,而不是圖像中所有的離散邊緣點,相比hough圓檢測法,計算量大大降低,且精度更高。
3、本發(fā)明通過使用邏輯相鄰距法將圖像中的邊緣分割成多條單向的連續(xù)邊緣,然后在每條邊緣曲線上檢測圓,最后使用最小二乘法擬合圓,相比傳統(tǒng)的最小二乘法,具有多圓檢測能力。
4、本發(fā)明通過使用邏輯相鄰距法獲取單向的連續(xù)邊緣,在邊緣點數(shù)量少的單向連續(xù)邊緣曲線上檢測圓,相比hough圓檢測法的在所有邊緣點上檢測,縮小了圓檢測范圍,定位速度更高,且對小圓弧更加敏感,因此具有更好的殘缺圓檢測能力。
5、本發(fā)明使用滑動窗口最小擬合誤差法和雙邊伸縮法可以精確地確定邊緣曲線中的圓弧位置,相比hough圓檢測法,圓檢測范圍更小,對小圓弧具有更高的因此具有更好的殘缺圓檢測能力。
6、本發(fā)明使用滑動窗口最小擬合誤差法和雙邊伸縮法可以精確地確定邊緣曲線中的圓弧位置,因為沒有圓弧以外的邊緣噪聲點,克服了傳統(tǒng)最小二乘法對噪聲敏感的缺點。
附圖說明
圖1是本發(fā)明基于數(shù)字圖像識別圓形物體的整體流程圖;
圖2是本發(fā)明單向邊緣曲線分割的示意圖;
圖3是本發(fā)明計算最大絕對距離和的示意圖;
圖4是本發(fā)明最小滑動窗口擬合誤差初步確定圓弧示意圖;
圖5a是本發(fā)明實施例圓形物體檢測的原圖;
圖5b是本發(fā)明實施例圓形物體檢測的邊緣圖;
圖5c是本發(fā)明實施例圓形物體檢測的檢測圖。
具體實施方式
本實施例中,一種基于數(shù)字圖像的軸圓形物體檢測方法對多個圓形物體、被部分遮擋的圓形物體具有準確的檢測能力,可以廣泛應(yīng)用于工業(yè)圓形工件檢測、機器人圓形物體識別等領(lǐng)域,具有很高的應(yīng)用價值。其步驟包括1獲取圖像的邊緣;2分割邊緣成連通的單向曲線;3分割單向曲線成二次曲線;4確定圓弧區(qū)域;5圓擬合;流程圖如圖1,其中:
第2步的分割邊緣成連通的單向曲線,首先使用深度優(yōu)先遍歷法獲取連通的邊緣域,然后使用邏輯相鄰距法(logicalneighborhoodalgorithm,lna)根據(jù)邏輯相鄰的兩個邊緣點之間的距離將連通的邊緣域分割為多條單向的連通曲線。
第3步的分割單向曲線成二次曲線,使用最大絕對距離和算法(maximumabsolutedistancesum,mads)通過計算邊緣點到直線的有向距離和將單向曲線分割成數(shù)條二次曲線。
第4步的圓弧的確定,首先使用最小滑動窗口擬合誤差法(minimumslidingwindowfittingerror,mswfe)獲取范圍初步估計的圓弧,然后使用雙邊伸縮法(bilateralstretchmethod,bsm)進一步精確圓弧區(qū)域。具體的,是按照如下步驟進行的:
步驟1、獲取邊緣圖像:
首先對采集的任意一幅圖像進行灰度化處理,得到灰度圖像,canny邊緣檢測算子幾乎在所有場景中比其他邊緣檢測算子(sobel、roberts、prewitt等)均具有更好的檢測效果,所以再使用canny算子從所述灰度圖像中獲取邊緣圖像m,邊緣圖像m中任意一個邊緣點用ei表示,i為邊緣點的下標,邊緣點ei所對應(yīng)的坐標為(xi,yi);
步驟2、分割邊緣成連通的單向曲線:
由步驟1獲取的邊緣圖像中的邊緣是離散的,邊緣之間沒有建立領(lǐng)域關(guān)系,所以此步驟將根據(jù)邊緣點之間的領(lǐng)域關(guān)系對邊緣點進行分類,彼此連通的邊緣點將歸為一類,即構(gòu)成邊緣連通域,然后再根據(jù)邏輯距離將連通域進一步分割為單向邊緣曲線,具體如下:
2.1、從邊緣圖像m找到任意一個邊緣點,從與此邊緣點相鄰的正上方的像素開始以順時針方向使用深度優(yōu)先遍歷算法獲得與邊緣點相連通的其他邊緣點,從而得到邊緣連通域
2.2、使用邏輯相鄰距算法將邊緣連通域
2.2.1)稱邊緣連通域
2.2.2)初始化j=0;
2.2.3)將j+1賦值給j,并判斷j≥n是否成立,n為所述邊緣連通域
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是否成立,如果成立,則執(zhí)行步驟2.2.7),否則判別d(j)≥2是否成立,如果成立,執(zhí)行步驟2.2.6),否則返回執(zhí)行步驟2.2.5;
2.2.6)獲得單向曲線lc={ek,ek+1,...ej},更新
2.2.7)判別d(n-1)≥2是否成立,如果成立,則獲得單向曲線lc={ek,ek+1,...en-1},否則,獲得單向曲線lc={ek,ek+1,...en-1,en}。
至此,獲取單向曲線l={l1,l2,....lc},結(jié)束算法。
如圖2,連通域
步驟3、獲取二次邊緣曲線:
因為圓是二次曲線的一種,所以將單向曲線先分解為數(shù)條二次曲線,然后在二次曲線的基礎(chǔ)上進一步確定圓弧是可行的。使用最大絕對距離和算法將單向邊緣曲線l分解為二次曲線s,從而得到二次曲線集合ψ,具體如下:
3.1)假設(shè)單向邊緣曲線l一共有q個邊緣點,并表示為{el1,el2,......elq},其中,任意兩個邊緣點elu和elv所確定的直線記作luv,并用式(2)描述,其中a、b、c為常數(shù);在區(qū)間[u,v]內(nèi)的任意一個邊緣點ela的坐標記為(xa,ya),邊緣點ela到直線luv的有向距離記作da,并按式(3)定義,由式(3)可知,當(dāng)兩個邊緣點位于直線luv兩側(cè)時,所得到的有向距離方向是相反的,乘積為負;用duv表示邊緣點elu到elv點之間所有點到直線luv的有向距離和記作duv,并按照式(4)定義,當(dāng)在區(qū)間[u,v]內(nèi)的所有邊緣點位于直線一側(cè)時,每個有向距離方向相同,所得到的絕對和duv最大:
luv:ax+by+c=0(2)
3.2)初始化α=0,γ=0,β=α+δ,其中δ為步進的一個常數(shù),它的大小決定了對二次曲線的敏感程度,δ越大,小的二次曲線段越容易被忽略。本方法中選擇δ=10;
3.3)如果β<q-δ成立,則先將γ+1賦值給γ,然后將[α,β]區(qū)間內(nèi)的邊緣點劃分為一個新的二次曲線sγ,并將sγ放入二次曲線集合ψ中,且結(jié)束算法,否則,計算dαβ和dα(β+δ);
3.4)如果dαβ<dα(β+δ)成立,則將β+δ賦值給β,并返回步驟3.3),否則執(zhí)行步驟3.5);
3.5)將γ+1賦值給γ后,將[α,β+δ/2]區(qū)間內(nèi)的邊緣點劃分為一個新的二次曲線sγ,并將sγ放入二次曲線集合ψ中,再將β+δ/2賦值給α,s+δ賦值給β后,返回步驟3.3)。具體分析參考圖3,開始曲線起點為a,終點為b,然后步進δ,得到點c,dac>dab,所以再次步進δ,得到點d,dad>dac,再步進δ,得到點e,因為dae<dad,所以取d和e的中點作為前面二次曲線段的終點,并將a-f之間的點放入二次曲線點集中,接下來以f為起點,終點為e,發(fā)現(xiàn)此時e已經(jīng)為曲線終點,所以將f-e段之間的點放入一個新的二次曲線中,結(jié)束算法。
步驟4、確定圓?。?/p>
由步驟3確定了數(shù)條二次曲線,有的二次曲線包含圓弧,可能一條也可能數(shù)條,而有的二次曲線不包含圓弧,所以需要從二次曲線中檢測出圓弧,具體如下:
步驟4.1、使用最小滑動窗口擬合誤差算法在所述二次曲線s上初步估計,得到圓弧p;
4.1.1)計算二次曲線s中的邊緣點的個數(shù)為n,所述二次曲線s中的邊緣點表示為{es1,es2,...esg,...esn},設(shè)置閾值tn,如果n<tn,則刪除所述二次曲線s,本實例中將tn設(shè)置為20,否則,執(zhí)行步驟4.1.2);
4.1.2)選定滑動窗口寬度τ為n/3,并初始化窗口的左端點lp為0;
4.1.3)如果lp>n/2成立,則執(zhí)行步驟4.1.4),否則使用最小二乘法擬合點集{eslp,eslp+1,....eslp+τ},得到圓擬合參數(shù)(xlp,ylp,rlp),再根據(jù)式(5)計算平均擬合誤差flp后,將lp+1賦值給lp,并繼續(xù)執(zhí)行步驟4.1.3);
4.1.4)按式(6)計算最小擬合誤差fmin:
fmin=min{fk,1≤k≤lp}(6)
4.1.5)如果fmin小于閾值tf成立,則記與fmin相對應(yīng)的邊緣點下標范圍為[λ1,λ2],從而得到初步估計后的圓弧區(qū)域,得到圓弧p,否則刪除所述二次曲線s;
在本實例中tf設(shè)置為0.01,因為圖像中的邊緣點的坐標為整數(shù),所以相鄰坐標的最小坐標差為1,取值為0.01的意思就是平均每個邊緣點到圓心的距離與半徑的差為0.01個單位坐標差。具體實例參考圖4,已知二次曲線s,起點為a,終點為d,數(shù)據(jù)邊緣點個數(shù)為n,滑動窗口寬度為n/3。起初,滑動窗口的左端位于曲線的最左端,然后沿著箭頭方向依次向右滑動,每次滑動步進為δ,取10,每次滑動窗口內(nèi)邊緣點的圓擬合誤差對應(yīng)于曲線正下方的擬合誤差曲線,從圖可以看出,當(dāng)滑動窗口的左端移動到b點時,所對應(yīng)的圓擬合誤差最小,當(dāng)滑動窗口的左端移動到c點時,滑動窗口的右端已經(jīng)到了曲線的末端,停止移動。所以最終確定曲線s上的圓弧為p。
步驟4.2、使用雙邊伸縮法以圓弧p為基礎(chǔ),在二次曲線s上進行精確估計,得到圓弧φ;
4.2.1)用fρ,π表示邊緣點esρ到esπ之間邊緣點的擬合誤差,用start表示在二次曲線s上動態(tài)伸縮擬合的起點位置,用end表示在曲線s上動態(tài)伸縮擬合的終點位置,所述圓弧p包含的邊緣點下標范圍為[λ1,λ2];
4.2.2)初始化start=0,end=n-1;
4.2.3)計算
4.2.4)如果start=0成立,則執(zhí)行步驟4.2.5),否則,將start賦值給λ1,將start/2賦值給start后,返回步驟4.2.3);
4.2.5)將(start+λ1)/2賦值給start,如果λ1-start≤1成立,則執(zhí)行步驟4.2.6),否則返回步驟4.2.3);
4.2.6)計算
4.2.7)如果end=n-1成立,則結(jié)束算法,否則,將end賦值給λ2,將(n-1+end)/2賦值給end后,返回步驟4.2.6);
4.2.8)將(end+λ2)/2賦值給end,并判斷end-λ2≤1是否成立,若成立,則結(jié)束算法,從而得到的start和end分別是圓弧φ在二次曲線s上的精確起點和終點位置,否則返回步驟4.2.6)。
步驟5、使用最小二乘法擬合所述圓弧φ,從而獲取圓的參數(shù)(x,y,r),其中(x,y)表示圓心,r表示半徑。如圖5a為包含被部分遮擋的軸承,軸承有內(nèi)圈和外圈,如圖5b為使用canny算子檢測的邊緣圖,可以看出內(nèi)外圈的邊緣并不是完整的圓,而是一個圓弧,且與其他邊緣相互粘連,如圖5c為最終的檢測結(jié)果,成功地檢測出了內(nèi)圈圓和外圈圓,驗證了本發(fā)明所提算法的有效性。
以上所述僅為本發(fā)明的實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。