劉 剛,黃一鳴,陸雨婷,任興龍
(華中農(nóng)業(yè)大學(xué),湖北武漢 430070)
在工業(yè)生產(chǎn)中,當(dāng)前仍主要采用人工的方法進(jìn)行機(jī)床上下物料的工作。由于機(jī)器人的重復(fù)定位精度很高(±0.5 mm左右),而人工操作存在錯(cuò)誤率高等問(wèn)題,因此機(jī)器人(手臂)代替人工可以大大提高準(zhǔn)確率。但是,機(jī)器人并不知道自己需要從哪里抓取目標(biāo)物體。現(xiàn)實(shí)情況中,螺母不可能是完全平放的,很多時(shí)候是層疊在一起的,這無(wú)疑加大了機(jī)器人進(jìn)行視覺(jué)識(shí)別的難度。
本文從機(jī)器視覺(jué)系統(tǒng)出發(fā),基于Kinect傳感器獲得的深度圖像,利用圖像處理技術(shù)與Python語(yǔ)言編程,實(shí)現(xiàn)了對(duì)復(fù)雜擺放情況下螺母中心位置的擬合,從而實(shí)現(xiàn)對(duì)螺母的定位。
在桌面上有如圖1所示放置的螺母。采用Kinect傳感器獲得如圖2所示的深度圖。

圖1 實(shí)物圖

圖2 深度圖
為了增強(qiáng)圖像質(zhì)量,提高擬合精度,需對(duì)傳感器獲得的深度圖像進(jìn)行預(yù)處理。圖像的預(yù)處理包括插值填充、二值化和圖像平滑。通過(guò)編寫(xiě)Python代碼實(shí)現(xiàn)了以上過(guò)程,經(jīng)過(guò)圖像預(yù)處理后結(jié)果的如圖3所示。插值填充的目的是為了去除圖像中的噪聲;二值化處理的目的是為了分割圖像中的螺母與背景環(huán)境;圖像平滑的目的是為了提高圖像質(zhì)量。
為了有效去除背景等因素的影響,采用Canny邊緣檢測(cè)的方法對(duì)二值化之后的圖像進(jìn)行邊緣檢測(cè)。

圖3 圖像預(yù)處理結(jié)果

圖4 邊緣檢測(cè)結(jié)果
Canny邊緣檢測(cè)的最優(yōu)性與以下因素有關(guān)[1-3]:
(1)高信噪比,即在進(jìn)行邊緣判斷時(shí)的準(zhǔn)確率高;
(2)定位準(zhǔn)確,即檢測(cè)出的邊緣點(diǎn)要盡可能在實(shí)際邊緣的中心;
(3)對(duì)單一邊緣具有唯一一個(gè)像素響應(yīng)。處理結(jié)果如圖4所示。
螺母為類圓圖像,因此在螺母的圖像中,經(jīng)常會(huì)出現(xiàn)類圓螺母粘連和重疊的現(xiàn)象,為了更準(zhǔn)確的統(tǒng)計(jì)類圓螺母的數(shù)量,首先需要將類圓目標(biāo)分割成單獨(dú)螺母[4]。本文應(yīng)用基于凹點(diǎn)的分割方法,對(duì)粘連的類圓螺母進(jìn)行分割。
本文提出的凹點(diǎn)判斷原理[5]:在圓域邊緣上取3點(diǎn)C1,C2和A,其中A處于C1,C2之間,連接以上三點(diǎn)構(gòu)成三角形,如圖5所示。
取連線的中點(diǎn)為D,根據(jù)D點(diǎn)左邊對(duì)應(yīng)像素的灰度值來(lái)判斷D是否在層疊的目標(biāo)螺母上。
在進(jìn)行判定時(shí),有兩種情況,一種情況是D在邊緣內(nèi)側(cè),則D∈O1O2,則直線AD上面所有的點(diǎn)都在圓域內(nèi),;另一種情況是D不在邊緣內(nèi)側(cè),則若直線AD上除A點(diǎn)以外的點(diǎn)不在邊際圓域內(nèi),則邊緣形成凹陷,點(diǎn)A為凹點(diǎn)。
將n個(gè)相鄰凹點(diǎn)集聚在一起構(gòu)成的群稱為凹點(diǎn)群,當(dāng)僅存在著唯一凹點(diǎn),即當(dāng)n=1時(shí),稱凹點(diǎn)群為獨(dú)立凹點(diǎn)群。
設(shè)凹點(diǎn)深度d為邊緣特征點(diǎn)xi與線段xi-1、xi+1之間的直線距離p稱為凹點(diǎn)深度,其中xi-1、xi+1分別為點(diǎn)xi的鄰繼特征點(diǎn)。

借助輪廓圖,建立一個(gè)數(shù)組S用于存放凹點(diǎn)對(duì)應(yīng)的邊緣特征點(diǎn)序號(hào),同時(shí)將這些凹點(diǎn)分為孤立的凹點(diǎn)群以便于找出分割點(diǎn)。在搜索分割點(diǎn)的過(guò)程中,將每個(gè)凹點(diǎn)群中的凹點(diǎn)深度與閾值Y進(jìn)行比較,如果某一凹點(diǎn)的深度值超過(guò)了閾值Y,則視這一凹點(diǎn)為備選分割凹點(diǎn)。當(dāng)凹點(diǎn)群中有且僅有唯一備選分割凹點(diǎn)時(shí),則認(rèn)為該點(diǎn)就是分割凹點(diǎn);對(duì)于另一種情況,即當(dāng)凹點(diǎn)群中的備選分割凹點(diǎn)有多個(gè)時(shí),需要依據(jù)N點(diǎn)方向編碼差法[6]減去非凹點(diǎn)。處理結(jié)果如圖6所示。

圖5 凹點(diǎn)搜索原理

圖6 類圓分割結(jié)果
經(jīng)過(guò)以上的處理,可以認(rèn)為螺母邊緣實(shí)際上已經(jīng)弱化接近為一個(gè)圓。因此,擬合螺母的中心位置的問(wèn)題可以轉(zhuǎn)化為尋找圓心的問(wèn)題。Hough變換是目前應(yīng)用較為廣泛的圓檢測(cè)方法,很多情況下,一些干擾或其他事物的遮蓋會(huì)引起目標(biāo)區(qū)域邊界的間斷,對(duì)于這些情況,Hough變換具有很好的容錯(cuò)性和魯棒性[6]。
由于圖像出現(xiàn)了邊緣被干擾的情況,因此選擇Hough變換以實(shí)現(xiàn)較好的擬合效果。
但是,由于其自身的原理,Hough變換也存在著一些不足。比如,在進(jìn)行運(yùn)算時(shí),Hough變換往往要進(jìn)行全局的累加運(yùn)算,會(huì)導(dǎo)致計(jì)算量急劇上升從而耗費(fèi)大量的存儲(chǔ)空間,同時(shí)所用時(shí)間也會(huì)隨之增加。事實(shí)上,通過(guò)Kinect傳感器獲得的圖像往往受到外界噪聲的干擾,這會(huì)造成傳統(tǒng)Hough變換在進(jìn)行參數(shù)空間的搜索時(shí)性能急劇下降。
為了克服Hough變換的這一不足,利用OpenCV對(duì)Hough變換進(jìn)行了改進(jìn)。改進(jìn)之后的算法不僅對(duì)噪聲敏感度低,而且在檢測(cè)圓心時(shí)速度大大增加。
改進(jìn)Hough算法尋找圓心的基本步驟如下。
(1)利用遍歷法找到滿足以下條件的像素點(diǎn)不是邊緣點(diǎn):對(duì)相鄰的像素點(diǎn)分別進(jìn)行向左和向右搜索,分別找到兩邊的第一個(gè)相鄰的邊緣像素點(diǎn),記為rwp(右 )和lwq(左 ) ;pwj-lwq=rwp-owj。
(2)對(duì)滿足上一步驟條件的owj,采用改進(jìn)后的Hough變換在一維的空間中進(jìn)行累加計(jì)數(shù)。
(3)在參數(shù)空間中,通過(guò)步驟(2)累加計(jì)數(shù)的最大值所對(duì)應(yīng)的owj即為圓心對(duì)應(yīng)的橫坐標(biāo)c=owj。
同理,可以求出圓心的縱坐標(biāo),這樣就可以得到圓心坐標(biāo)(c,d)。
根據(jù)以上步驟求得的圓心坐標(biāo)(c,d),將邊際像素點(diǎn)代入(x-c)2+(x-d)2=r2(圓的方程),可得出一個(gè)備選半徑,然后在單維空間中再利用經(jīng)過(guò)OpenCV改進(jìn)后的Hough變換對(duì)備選半徑進(jìn)行累加計(jì)算。最后,依據(jù)的計(jì)數(shù)值是否滿足構(gòu)成圓所允許的最小點(diǎn)數(shù)來(lái)確定圓,得到如圖7所示的圖像。

圖7 改進(jìn)Hough變換結(jié)果

圖8 邊緣曲率處理結(jié)果
通過(guò)先得出的四個(gè)類圓環(huán),可以得到其他三個(gè)重疊類圓環(huán)的邊緣曲率范圍。由于螺母相互重疊的區(qū)域在彼此交界處,邊緣點(diǎn)曲率會(huì)發(fā)生突變,利用這一特征可以實(shí)現(xiàn)重疊區(qū)域邊緣的分割[7]。

式(2)中,x1、y1為前采樣點(diǎn)的坐標(biāo),x2、y2為后采樣點(diǎn)坐標(biāo)。θ是兩相鄰采樣點(diǎn)連線與x軸夾角。

式(3)中,v代表采樣間隔,θ1是當(dāng)前點(diǎn)到前一點(diǎn)連線與x軸夾角,θ2是后一點(diǎn)到當(dāng)前點(diǎn)連線與x軸夾角,C為當(dāng)前采樣點(diǎn)曲率。

式(4)中,x,y表示圓上點(diǎn)坐標(biāo),b,c,d表示方程系數(shù)。
由于各邊緣點(diǎn)未必都恰好在同一圓上,這些邊緣點(diǎn)有可能處在不同的圓上,邊緣點(diǎn)處在不同的圓上時(shí)情形與處在同一圓上有巨大的差距。因此,不能確保所有邊緣點(diǎn)的E值都恰好等于0。各點(diǎn)與回歸圓(即擬合出的圓)上相應(yīng)點(diǎn)的偏差為

式(5)中,xi、yi表示輪廓邊緣點(diǎn)坐標(biāo)。
用最小二乘原理,使各點(diǎn)偏差平方和最小,進(jìn)而求得圓的回歸方程,擬合出螺母邊緣圓,擬合出的圓為回歸圓。將回歸圓疊加到原圖上,如圖8所示。
本文采用OpenCV改進(jìn)的Hough算法進(jìn)行螺母中心位置的確定。改進(jìn)后的Hough算法不僅具有很好的魯棒性和容錯(cuò)性,而且在檢測(cè)圓心時(shí)速度大大增加。結(jié)果證明,本文所用方法不僅在圓邊界輕微間斷的情況下表現(xiàn)出了很好的擬合效果,而且當(dāng)實(shí)物在空間中重疊導(dǎo)致圖像中實(shí)物部分遮蓋時(shí)也同樣表現(xiàn)出了很好的擬合效果。因此,在螺母定位時(shí)能夠?qū)崿F(xiàn)很好的效果。
參考文獻(xiàn):
[1]蔡健榮,周小軍,李玉良,等.基于機(jī)器視覺(jué)自然場(chǎng)景下成熟柑橘識(shí)別[J].農(nóng)業(yè)工程學(xué)報(bào),2008,24(01):175-178.
[2]王植,賀賽先.一種基于Canny理論的自適應(yīng)邊緣檢測(cè)方法[J].中國(guó)圖像圖形學(xué)報(bào),2004,9(08):957-962.
[3]王會(huì)江.結(jié)合Canny算法和Hough變換的軸類零件邊緣提取[J].機(jī)電工程技術(shù),2016(9):27-30.
[4]陳健,廖唯.機(jī)器視覺(jué)概況及其在軸系部件測(cè)量中的應(yīng)用[J].現(xiàn)代機(jī)械,2011(03):24-26.
[5]蘇威.基于機(jī)器視覺(jué)的重疊類圓顆粒計(jì)數(shù)系統(tǒng)[D].鎮(zhèn)江:江蘇大學(xué),2009.
[6]謝忠紅,姬長(zhǎng)英,郭小清,等.基于凹點(diǎn)搜索的重疊果實(shí)定位檢測(cè)算法研究[J].農(nóng)業(yè)機(jī)械學(xué)報(bào),2011,42(12):191-196.
[7]尚璐,李銳,宋信玉.改進(jìn)的Hough變換圓檢測(cè)算法[J].電子設(shè)計(jì)工程,2011,19(14):168-171.