張 葉,靳衛(wèi)國,于朋揚(yáng)
(中國電子科技集團(tuán)公司第四十五研究所,北京 100176)
圖像對準(zhǔn)是絲網(wǎng)印刷的關(guān)鍵技術(shù),圖像對準(zhǔn)的精度直接決定了絲網(wǎng)印刷的好壞,因此,圖像Mark點(diǎn)的定位具有非常重要的意義。本文針對帶膜電感基片的圓環(huán)Mark點(diǎn)的定位需求,基于開源計(jì)算機(jī)視覺庫OpenCV進(jìn)行開發(fā),對圓環(huán)圖像進(jìn)行形態(tài)學(xué)處理,再利用OpenCV提供的cvCanny()函數(shù)對圖像進(jìn)行邊緣檢測,進(jìn)而利用cvFind-Counters()函數(shù)檢索輪廓,有效地實(shí)現(xiàn)圓環(huán)Mark的定位。
圖1所示為電感基片的Mark圖像。該圖像由CCD、鏡頭、光源、圖像采集卡和計(jì)算機(jī)組成的機(jī)器視覺系統(tǒng)采集。圖像定位需要在圖像中找到圓環(huán),并給出圓環(huán)中心在圖像中的位置。
由圖1可知,圓環(huán)Mark作為圖像目標(biāo),與圖像背景的對比度不太明顯,需要對圖像預(yù)處理才能實(shí)現(xiàn)定位。圖像處理流程如圖2所示,先對圖像進(jìn)行預(yù)處理、邊緣檢測,進(jìn)而檢索輪廓,實(shí)現(xiàn)圓環(huán)Mark的定位。
圖1 電感基片的圓環(huán)Mark圖像
圖2 圖像處理流程圖
OpenCV (OpenSourceComputerVisionLibrary)是一個(gè)開源的計(jì)算機(jī)視覺庫,它包含大量的圖像處理函數(shù),這些函數(shù)涵蓋多個(gè)領(lǐng)域,如圖像處理、模式識別、動(dòng)態(tài)運(yùn)動(dòng)、攝像機(jī)標(biāo)定、三維視覺以及機(jī)器學(xué)習(xí)等,并且執(zhí)行速度快、效率高。本文使用OpenCV1.0進(jìn)行圖像處理并實(shí)現(xiàn)圓環(huán)Mark的定位。
本文原始圖像全部由CCD采集。CCD采集的圖像包含很大的信息量,并且存在著各種噪聲。噪聲對圓環(huán)Mark點(diǎn)的定位產(chǎn)生干擾問題,因此有必要對圖像進(jìn)行預(yù)處理。圖像預(yù)處理主要通過軟件編程完成圖像的噪聲去除、幾何變換。
3.1.1 圖像平滑
圖像平滑是一種抑制圖像噪聲、改善圖像質(zhì)量的圖像預(yù)處理方法。噪聲會(huì)造成圖像中原本均勻和連續(xù)變化的灰度發(fā)生突變,生成虛假的邊緣信息干擾圓環(huán)Mark點(diǎn)的定位。圖像平滑的作用主要是保留圖像的主要結(jié)構(gòu)、消除干擾信息、突出目標(biāo)的區(qū)域。
在本文中,圖像平滑采用OpenCV中的cvS-mooth()函數(shù)實(shí)現(xiàn),如圖3所示。
圖3 平滑圖像
3.1.2 圖像二值化
圖像二值化是圖像處理中重要的處理手段。經(jīng)過二值化處理的圖像只有明顯的黑白兩色,從而將灰度范圍劃分為目標(biāo)和背景兩類,這樣使圖像變得簡單,凸顯出圓環(huán)Mark的輪廓,而且更容易獲取目標(biāo)區(qū)域的特征,方便圖像的進(jìn)一步處理。在本文中,圖像二值化采用OpenCV中的cvThreshold()函數(shù)實(shí)現(xiàn),如圖4所示。
圖4 二值化圖像
3.1.3形態(tài)學(xué)處理
在圖像處理中,形態(tài)學(xué)處理通常用來消除噪聲、提取圖像特征、檢測圖像邊緣、紋理分析以及圖像分割等。
開運(yùn)算、閉運(yùn)算是常見的形態(tài)學(xué)處理方法。開運(yùn)算數(shù)學(xué)上是先腐蝕后膨脹的結(jié)果,它平滑了圖像目標(biāo)的邊緣,斷開了較窄的連接,消除了細(xì)小的突出部分。閉運(yùn)算是先膨脹后腐蝕的過程,它可以平滑目標(biāo)的輪廓,但與開運(yùn)算不同,它會(huì)填充物體內(nèi)細(xì)小空洞、連接鄰近物體。
經(jīng)過二值化后的圖像,目標(biāo)的邊界非常不平滑,需要連續(xù)的開和閉運(yùn)算改善圖像。實(shí)際上是對圖像進(jìn)行連續(xù)的非線性濾波去噪操作。
在本文中,采用OpenCV中的cvMorphologyEx()函數(shù)實(shí)現(xiàn)開運(yùn)算、閉運(yùn)算,如圖5、6所示,有效地平滑了物體的邊界。
圖5 開運(yùn)算圖像
圖6 閉運(yùn)算圖像
邊緣是圖像最基本的特征,包含豐富的信息,它是圖像中像素發(fā)生急劇變化的區(qū)域邊界。邊緣檢測的實(shí)質(zhì)是提取出圖像中目標(biāo)與背景的交界線。
本文采用的是Canny邊緣檢測算子來檢測目標(biāo)形狀的邊緣。Canny邊緣檢測算子是對信噪比與定位乘積進(jìn)行檢測,從而得到最優(yōu)化算子。Canny邊緣檢測算子除了能夠有效地消除噪聲之外,還能清晰地提取目標(biāo)形狀的輪廓,并且邊界曲線的連續(xù)性也比較好。圖7所示為OpenCV中的cvCanny()函數(shù)實(shí)現(xiàn)的Canny邊緣檢測效果圖。
圖7Canny邊緣檢測結(jié)果圖
圖7 所示的Canny邊緣檢測結(jié)果圖包含了所有的邊緣信息,因此有必要對圖7中的邊緣信息進(jìn)行輪廓檢索。OpenCV提供了cvFindContours()函數(shù)用于從cvCanny()函數(shù)得到的有邊緣信息的圖像中檢索輪廓,并且函數(shù)將檢測到的每個(gè)輪廓都存儲在序列里。對圖7的Canny邊緣檢測結(jié)果圖進(jìn)行輪廓檢索,結(jié)果如圖8所示,檢索得到了所有的輪廓。
圖8 輪廓檢索圖
為識別出圓環(huán)的輪廓,需要對輪廓進(jìn)行篩選。為篩選出圓環(huán)的輪廓,對利用cvFindContours()函數(shù)得到的所有輪廓進(jìn)行排序,cvFindContours()函數(shù)將輪廓存儲在序列里,將該序列利用算法進(jìn)行排序。OpenCV提供cvContourPerimeter()函數(shù)用于計(jì)算輪廓的周長,可利用該函數(shù)篩選符合圓環(huán)的輪廓。
利用 OpenCV的 cvMinEnclosingCircle()函數(shù)求最小閉合外接圓,得到最小外接圓的圓心(x0,y0),如圖9所示。
圖9 圓環(huán)定位
采用其他圖像驗(yàn)證該算法的可行性及合理性,其處理結(jié)果如圖10、11、12所示。
由圖可見,該算法能夠有效地實(shí)現(xiàn)圓環(huán)Mark的定位。
圖10 圓環(huán)定位
圖11 圓環(huán)定位
圖12 圓環(huán)定位
本文面對圓環(huán)Mark的定位需求,基于OpenCV進(jìn)行圓環(huán)Mark的定位研究。利用OpenCV對圖像進(jìn)行預(yù)處理、邊緣檢測,進(jìn)而檢索輪廓,有效地實(shí)現(xiàn)了圓環(huán)Mark的定位。