于 兵,程建邦,姚愛(ài)英,陳占春
(1.太原理工大學(xué)機(jī)械與運(yùn)載工程學(xué)院,山西 太原 030024;2.太原理工大學(xué)山西省塑料機(jī)械工程虛擬仿真實(shí)驗(yàn)教學(xué)中心,山西 太原 030024)
隨著高頻焊管越來(lái)越多地應(yīng)用于條件惡劣的工作場(chǎng)合,保證焊縫質(zhì)量也成為業(yè)內(nèi)關(guān)注的重點(diǎn),在生產(chǎn)加工中對(duì)焊管焊縫進(jìn)行檢測(cè)變得十分重要[1]。檢測(cè)過(guò)程常常需要人為控制焊縫位置來(lái)突出檢測(cè)焊縫處。這種方法費(fèi)時(shí)費(fèi)力,依靠人工長(zhǎng)時(shí)間工作后產(chǎn)生疲勞;影響檢測(cè)質(zhì)量。近年來(lái)隨著機(jī)器視覺(jué)的快速發(fā)展,機(jī)器視覺(jué)逐漸代替人進(jìn)行判斷和控制,具有可靠性,結(jié)構(gòu)簡(jiǎn)單和成本低廉[2]。
進(jìn)行機(jī)器視覺(jué)焊縫位置識(shí)別的首要視覺(jué)任務(wù)是提取焊縫邊緣與焊管邊緣。國(guó)內(nèi)外研究人員針對(duì)邊緣提取任務(wù)做了大量工作,可以分為傳統(tǒng)邊緣檢測(cè)算法與現(xiàn)代邊緣檢測(cè)算法。傳統(tǒng)邊緣檢測(cè)算法包括Log算法、Laplace算法、Sobel算法等實(shí)時(shí)性高,實(shí)現(xiàn)成本低,但易受噪聲干擾,信噪比低?,F(xiàn)代邊緣檢測(cè)算法包括利用神經(jīng)網(wǎng)絡(luò)、遺傳算法、蟻群算法等進(jìn)行邊緣檢測(cè),具有魯棒性高,邊緣定位精度高等特點(diǎn)。但也存在實(shí)時(shí)性差與檢測(cè)成本高等特點(diǎn),不適合在線檢測(cè)[3-4]。
Canny提出評(píng)價(jià)邊緣提取的三條準(zhǔn)則[1]:信噪比準(zhǔn)則、定位精度準(zhǔn)則和單邊響應(yīng)準(zhǔn)則,并基于這三條準(zhǔn)則提出了Canny 算法。Canny 算法在焊縫邊緣提取中相對(duì)于其他傳統(tǒng)邊緣算法抗噪性能較好,定位精確高[1]。但同樣易受噪聲干擾,信噪比低。文獻(xiàn)[5]根據(jù)梯度方向,利用插值法在準(zhǔn)確的方向上進(jìn)行了非極大值抑制對(duì)Canny 算法做出改進(jìn)。但同樣梯度噪聲也會(huì)對(duì)插值結(jié)果產(chǎn)生影響,最終導(dǎo)致邊緣點(diǎn)被錯(cuò)誤抑制,保留了更多噪聲點(diǎn)。文獻(xiàn)[6]將非極大值進(jìn)行二次篩選,能夠提高Canny算法檢測(cè)結(jié)果連續(xù)性,但二次篩選要從大量備選點(diǎn)選出個(gè)別邊緣點(diǎn)實(shí)時(shí)性較差。
實(shí)現(xiàn)機(jī)器視覺(jué)識(shí)別直縫焊管焊縫位置需要快速準(zhǔn)確地獲得焊管邊緣與焊縫邊緣,然而在實(shí)際應(yīng)用中,焊管表面常出現(xiàn)銹漬以及輥輪劃痕對(duì)邊緣提取產(chǎn)生干擾,現(xiàn)有算法無(wú)法有效提取焊縫邊緣與焊管邊緣。
根據(jù)直縫焊管圖像目標(biāo)邊緣簡(jiǎn)單且只能獲得部分焊管圖像的特點(diǎn)提出一種改進(jìn)的Canny 算法,利用梯度方向局部均值偏差進(jìn)行非極大值抑制并且利用捕捉到焊管圖像特征建立焊管焊縫強(qiáng)弱邊緣連接規(guī)則。實(shí)驗(yàn)結(jié)果表明該方法能夠改善傳統(tǒng)Canny算法在直縫焊管焊縫檢測(cè)中易受噪聲干擾強(qiáng)弱邊緣連接不佳等問(wèn)題。
傳統(tǒng)Canny算法主要經(jīng)過(guò)四個(gè)步驟[1]:首先對(duì)灰度圖像進(jìn)行二維高斯卷積進(jìn)行濾波;對(duì)濾波后的圖像進(jìn)行一階差分計(jì)算梯度幅值與方向;之后對(duì)每個(gè)點(diǎn)梯度方向相鄰點(diǎn)進(jìn)行大小比較,把不是極大值的點(diǎn)設(shè)置為0;將大于高閾值的點(diǎn)作為強(qiáng)邊緣,直接輸出為邊緣。梯度介于高閾值與低閾值的點(diǎn)作為弱邊緣,如果弱邊緣點(diǎn)8鄰域內(nèi)存在強(qiáng)邊緣點(diǎn),那么該弱邊緣點(diǎn)作為邊緣輸出。傳統(tǒng)Canny算法需要人為設(shè)計(jì)高低閾值參數(shù),閾值過(guò)高將會(huì)造成邊緣缺失,閾值過(guò)低將出現(xiàn)大量偽邊緣,因此閾值選取需要進(jìn)行大量試驗(yàn)以及經(jīng)驗(yàn)判斷。
傳統(tǒng)Canny算法利用梯度信息進(jìn)行邊緣判斷,梯度信息容易受噪聲干擾。梯度非極大值抑制對(duì)目標(biāo)點(diǎn)與梯度方向?qū)?yīng)相鄰點(diǎn)進(jìn)行大小比較,如果出現(xiàn)目標(biāo)點(diǎn)小于某個(gè)梯度方向上的相鄰點(diǎn),則將目標(biāo)點(diǎn)梯度設(shè)置為0。該方法判別依據(jù)單一,容易受噪聲干擾,將邊緣點(diǎn)判斷為非邊緣點(diǎn)[7]。
傳統(tǒng)Canny算法通過(guò)大于高閾值的強(qiáng)邊緣像素點(diǎn)8鄰域范圍內(nèi)檢索弱邊緣來(lái)獲得連續(xù)的邊緣,然而在利用機(jī)器視覺(jué)檢測(cè)直縫焊管中,只能獲得焊管的部分位置圖像,割裂了整個(gè)目標(biāo)強(qiáng)弱邊緣的獲取。焊管邊緣受背景環(huán)境影響呈現(xiàn)出不同的對(duì)比度,當(dāng)背景變化使焊管邊緣對(duì)比度升高,焊縫邊緣可能會(huì)被視為弱邊緣,傳統(tǒng)Canny算法將會(huì)丟失焊縫邊緣。
噪聲對(duì)梯度具有較大干擾,利用非極大值抑制能夠消除部分非邊緣點(diǎn),8 鄰域內(nèi)直接比較容易造成邊緣點(diǎn)被噪聲梯度點(diǎn)抑制,影響非邊緣點(diǎn)判斷的準(zhǔn)確度。為解決這一問(wèn)題,對(duì)8鄰域進(jìn)行擴(kuò)張至16 鄰域。將梯度方向角度對(duì)應(yīng)像素點(diǎn)由4 個(gè)提升至8個(gè),利用對(duì)應(yīng)像素點(diǎn)(3×3)鄰域(如圖1所示)內(nèi)均值M替代對(duì)應(yīng)點(diǎn),并計(jì)算對(duì)應(yīng)點(diǎn)(3×3)鄰域各點(diǎn)局部鄰域偏差值均值D。使待判斷邊緣點(diǎn)與梯度方向鄰域內(nèi)多點(diǎn)均值和局部鄰域偏差均值之和進(jìn)行比較,待判斷邊緣點(diǎn)為極大值時(shí)該邊緣點(diǎn)保留,即同時(shí)滿足:
圖1 梯度方向?qū)?yīng)(3×3)鄰域Fig.1 Gradient Direction Corresponds to(3×3)Neighborhood
圖2 梯度方向θ對(duì)應(yīng)鄰域中心點(diǎn)編號(hào)Fig.2 Gradient Direction θ Corresponds to the Number of the Center Point of the Neighborhood
計(jì)算k×k鄰域局部均值M和局部鄰域偏差均值D可通過(guò)積分圖[8]的方式進(jìn)行計(jì)算,可以提高算法實(shí)時(shí)性。以局部均值M為例,具體步驟如下:
對(duì)每行每列開(kāi)頭增補(bǔ)(k-1)個(gè)該列或該行首位數(shù)字。
對(duì)行列進(jìn)行累加計(jì)算積分圖I:
最大類(lèi)間方差法又稱(chēng)大津法,是利用直方圖分布對(duì)區(qū)域均值方差進(jìn)行聚類(lèi),選擇最大類(lèi)間方差時(shí)的分割閾值作為最佳閾值。最大類(lèi)間方差法能夠在最小誤分誤差下將目標(biāo)像素點(diǎn)與背景像素點(diǎn)的灰度值進(jìn)行區(qū)分[6]。
對(duì)所有未被抑制邊緣點(diǎn)進(jìn)行分類(lèi),分為前景與背景。根據(jù)梯度幅值將未被抑制的點(diǎn)均等間隔劃分為64級(jí)。
式中:S—未被抑制的所有像素點(diǎn)個(gè)數(shù);
ni—第i級(jí)像素點(diǎn)個(gè)數(shù);
pi—第i級(jí)在所有極值點(diǎn)中的概率。
目標(biāo)梯度均值和背景梯度均值為:
式中:T—區(qū)分目標(biāo)點(diǎn)于背景點(diǎn)閾值;
所有點(diǎn)梯度均值為:
目標(biāo)點(diǎn)與背景點(diǎn)類(lèi)間方差為:
當(dāng)類(lèi)間方差最大時(shí),背景點(diǎn)與目標(biāo)點(diǎn)的錯(cuò)分概率最小。
選擇最大類(lèi)間方差對(duì)應(yīng)梯度幅值Th作為高閾值。
若Th個(gè)數(shù)大于1,為了獲得豐富的弱邊緣信息選擇Th的最小值為高閾值。低閾值Tl選取Tl=Th*0.4。
傳統(tǒng)Canny算法利用滯后閾值補(bǔ)充目標(biāo)物體弱邊緣,當(dāng)強(qiáng)邊緣像素點(diǎn)8連通區(qū)域內(nèi)存在弱邊緣像素點(diǎn)時(shí),將此弱邊緣像素點(diǎn)作為邊緣像素點(diǎn)輸出。由于直縫焊管具有較大長(zhǎng)徑比,在圖像中只能夠截取到部分焊管圖像,當(dāng)焊管邊緣與背景對(duì)比度遠(yuǎn)遠(yuǎn)大于焊縫邊緣與焊管邊緣對(duì)比度時(shí),焊縫邊緣會(huì)被識(shí)別為弱邊緣,導(dǎo)致傳統(tǒng)Canny算法滯后閾值無(wú)法連接弱邊緣中有效的焊縫邊緣信息。針對(duì)上述問(wèn)題,采用強(qiáng)邊緣連通區(qū)域8個(gè)極點(diǎn)(左上、左下、頂左、頂右、右上、右下、底左、底右,如圖3所示)鄰域內(nèi)尋找弱邊緣連通區(qū)域,連接新找到的連通區(qū)域直到?jīng)]有出現(xiàn)新的連通區(qū)域出現(xiàn)為止。在此連接規(guī)則上,如果強(qiáng)邊緣連通區(qū)域8個(gè)極點(diǎn)中某個(gè)極點(diǎn)連接到圖像邊界,則該條邊界上的像素點(diǎn)相連的弱邊緣視為與強(qiáng)邊緣連通區(qū)域相連,檢索出所有與強(qiáng)邊緣相連的弱邊緣作為邊緣輸出。
圖3 連通區(qū)域8個(gè)極點(diǎn)Fig.3 8 Poles in the Connected Area
實(shí)驗(yàn)算法在Matlab2016b平臺(tái)上進(jìn)行驗(yàn)證,實(shí)驗(yàn)環(huán)境為Inter i5200u 2.2GHz 4G 內(nèi)存。為了驗(yàn)證改進(jìn)算法針對(duì)非極大值抑制做出的改進(jìn),筆者構(gòu)造帶有強(qiáng)弱邊緣的圖象添加不同噪聲進(jìn)行實(shí)驗(yàn)。對(duì)改進(jìn)算法、傳統(tǒng)Canny算法和文獻(xiàn)[9]所述8鄰域內(nèi)根據(jù)梯度方向插值比較的非極大值抑制后保留的點(diǎn)進(jìn)行對(duì)比,統(tǒng)計(jì)非極大值抑制后保留的正確邊緣點(diǎn)和噪聲干擾點(diǎn)數(shù)量,如表1所示。受噪聲影響邊緣線兩側(cè)相鄰像素點(diǎn)位置都檢出或者一側(cè)檢出都記為檢出該邊緣點(diǎn)。構(gòu)造圖片可以獲得準(zhǔn)確的邊緣位置,從而進(jìn)行客觀的評(píng)價(jià),如圖4 所示。帶有強(qiáng)弱邊緣的理想圖像,如圖4(a)所示。圖4(a)中添加噪聲方差為0.1的高斯噪聲,如圖4(b)所示。改進(jìn)非極大值算法抑制算法對(duì)圖4(b)處理結(jié)果,如圖4(c)所示。傳統(tǒng)非極大值抑制算法對(duì)圖4(b)處理結(jié)果,如圖4(d)所示。文獻(xiàn)[9]對(duì)圖4(b)非極大值抑制處理結(jié)果,如圖4(e)所示。
表1 高斯噪聲下非極大值抑制后保留點(diǎn)個(gè)數(shù)Tab.1 Number of Retained Points after Non-Maximum Suppression under Gaussian Noise
圖4 噪聲下非極大值抑制后保留點(diǎn)Fig.4 Retained Points after Non-Maximum Suppression under Noise
從表1可以看出改進(jìn)非極大值抑制算法相比傳統(tǒng)Canny算法和文獻(xiàn)[9]的方法在噪聲中能夠保留更多強(qiáng)弱邊緣像素點(diǎn),同時(shí)能夠有效減少保留的偽邊緣點(diǎn)數(shù)量。說(shuō)明改進(jìn)的非極大值抑制算法能夠在原有降噪濾波的基礎(chǔ)上進(jìn)一步抑制噪聲和保留邊緣點(diǎn)。為了驗(yàn)證所提改進(jìn)方法最終效果,選擇焊管邊緣與背景對(duì)比度遠(yuǎn)高于焊縫邊緣與焊管的圖像作為研究對(duì)象,與傳統(tǒng)Canny算法在取相同閾值和以0.01為步長(zhǎng)手動(dòng)目測(cè)選擇最佳閾值進(jìn)行比較,檢測(cè)結(jié)果,如圖5所示。從圖5中可以看出雖然這里的方法檢測(cè)邊緣存在斷邊,但是沒(méi)有損失焊管邊緣與焊縫邊緣主要特征。這里的方法在沒(méi)有引入過(guò)多噪聲前提下能夠較完整的得到焊管邊緣位置與焊縫邊緣位置。傳統(tǒng)Canny算法在選取與改進(jìn)算法同樣閾值時(shí),丟失了弱邊緣焊縫邊緣位置。人為的調(diào)整閾值到Canny算法在能夠捕捉到焊管邊緣位置與焊縫位置的最高閾值時(shí),引入了大量噪聲邊緣。
圖5 邊緣檢測(cè)結(jié)果Fig.5 Edge Detection Results
針對(duì)直縫焊管焊縫位置識(shí)別過(guò)程中易受銹漬、輥道劃痕干擾和焊縫邊緣不易檢出等問(wèn)題干擾,對(duì)傳統(tǒng)Canny算法做出改進(jìn)。改進(jìn)算法通過(guò)局部均值偏差非極大值抑制代替?zhèn)鹘y(tǒng)非極大值抑制,對(duì)未被抑制的點(diǎn)通過(guò)最大類(lèi)間方差法選取閾值,最后根據(jù)焊管圖像特點(diǎn)設(shè)定強(qiáng)弱邊緣連接規(guī)則得到最終邊緣檢測(cè)結(jié)果。實(shí)驗(yàn)結(jié)果表明:通過(guò)局部均值偏差進(jìn)行非極大值抑制比傳統(tǒng)8鄰域內(nèi)直接比較和進(jìn)行插值的非極大值抑制能夠更有效的保留邊緣點(diǎn)信息和抑制噪聲。利用最大類(lèi)間方差法選取閾值,并通過(guò)外加邊界的強(qiáng)弱邊緣連接規(guī)則能夠有效地檢測(cè)出焊管焊縫圖像。