余 輝 王 林 王德勝
(1 中國電子科技集團(tuán)公司第四十一研究所,安徽蚌埠233010;2.四川煙草工業(yè)有限責(zé)任公司成都分廠,四川成都610051;3.江蘇中煙有限責(zé)任公司南京卷煙廠,江蘇南京210019)
隨著科學(xué)技術(shù)的發(fā)展,機(jī)器視覺技術(shù)也取得了長足的發(fā)展,目前已經(jīng)廣泛的應(yīng)用在各個(gè)領(lǐng)域。運(yùn)動(dòng)目標(biāo)檢測是視頻檢測中基礎(chǔ)而關(guān)鍵的部分,該技術(shù)廣泛地應(yīng)用于工業(yè)流水線產(chǎn)品外觀特征檢測。 本文將以煙包外觀金拉線的檢測來闡述系統(tǒng)的工作原理和軟件算法實(shí)現(xiàn)。由于煙包生產(chǎn)速度較快,檢測任務(wù)非常繁重,采用機(jī)器視覺技術(shù)提高產(chǎn)品質(zhì)量和生產(chǎn)效率。
機(jī)器視覺就是用機(jī)器代替人眼來做測量和判斷。機(jī)器視覺系統(tǒng)是指通過圖像采集裝置將攝取目標(biāo)轉(zhuǎn)換成圖像信息,傳送給圖像處理系統(tǒng),根據(jù)像素分布和亮度等信息,轉(zhuǎn)變?yōu)閿?shù)字化信號(hào),機(jī)器視覺系統(tǒng)從這些信息中獲取目標(biāo)特征,然后根據(jù)預(yù)設(shè)的條件輸出處理結(jié)果,進(jìn)而根據(jù)判斷結(jié)果控制執(zhí)行機(jī)構(gòu)進(jìn)行相應(yīng)的處理動(dòng)作。
整個(gè)檢測系統(tǒng)主要由硬件和軟件兩部分組成, 硬件主要包括:光源、鏡頭、CMOS 工業(yè)相機(jī)、工控板等;軟件由系統(tǒng)軟件和用戶軟件組成,系統(tǒng)軟件是微軟公司的WINXP,用戶軟件是開發(fā)人員基于VC++6.0自主開發(fā)設(shè)計(jì)的。
OpenCV 的全稱是Open Source Computer Vision Library, 是由Intel 公司開發(fā)的開源、 跨平臺(tái)計(jì)算機(jī)視覺庫。 OpenCV 可以運(yùn)行在Linux、Windows 操作系統(tǒng)上,該庫由一系列C 函數(shù)和部分C++類組成,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法,機(jī)器視覺開發(fā)人員在軟件開發(fā)的過程中可以直接調(diào)用庫函數(shù),省去常用圖像處理算法的編寫,同時(shí)也可以提高軟件的速度、精度和可靠性。
OpenCV 開發(fā)平臺(tái)的搭建并不復(fù)雜, 首先按照提示安裝好OpenCV 軟件,然后在Visual C++6.0 下編譯所要的靜態(tài)和動(dòng)態(tài)鏈接庫文件,包括lib 路徑的設(shè)置、include files 路徑的添加,再進(jìn)行工程項(xiàng)目的鏈接設(shè)置就可以了。
在VC++6.0 中建立新工程以后, 在工程設(shè)置里添加需要的OpenCV 庫, 并在程序文件中包含需要的頭文件, 就可以在Windows下基于VC6.0 進(jìn)行圖像程序開發(fā)了。
圖像的預(yù)處理是為接下來的圖像處理做準(zhǔn)備的一個(gè)環(huán)節(jié),通過圖像預(yù)處理可以對圖像進(jìn)行去噪、灰度化、二值化、數(shù)學(xué)形態(tài)學(xué)中的膨脹和腐蝕等操作。
圖像灰度化就是將彩色圖像中的彩色信息剔除, 只包含亮度信息。 這類圖像通常顯示從最暗黑色到最亮白色的灰度,計(jì)算機(jī)中把亮度值進(jìn)行量化等分成0-255 共256 個(gè)級別,0 表示最暗(全黑),255 表示最亮(全白)。圖像的二值化是指按一定閾值將灰度圖像分割為由灰度0 和灰度255 組成的無中間灰度過度值的圖像。
數(shù)學(xué)形態(tài)學(xué)是一種可以提取出圖像成分(如圖像的邊界、骨架和凸殼等)的工具,它的主要操作方法就是上文所提到的膨脹、腐蝕。 腐蝕是消除物體的所有邊界點(diǎn)的一種過程,其結(jié)果使剩下的物體沿其周邊比原物體小一定像素的面積,腐蝕對于從一幅分割圖像中去除小且無意義的物體來說是很有用的。膨脹是將與某物體接觸的所有背景點(diǎn)合并到該物體中的過程, 其結(jié)果是使物體的面積增大了相應(yīng)數(shù)量的點(diǎn)。先腐蝕后膨脹的過程稱為打開運(yùn)算,具有消除細(xì)小物體、在纖細(xì)點(diǎn)處分離物體、 和平滑較大物體的邊界時(shí)又不明顯改變其面積的作用。先膨脹后腐蝕的過程稱為關(guān)閉運(yùn)算, 它具有填充物體那細(xì)小空洞、連接領(lǐng)近物體、在不明顯改變物體面積的情況下平滑圖像邊界的作用。
在機(jī)器運(yùn)轉(zhuǎn)的固定相位,單片機(jī)控制系統(tǒng)向工業(yè)相機(jī)發(fā)送圖像采集信號(hào),工業(yè)相機(jī)把獲取的圖像通過USB 接口傳送到工控板。
煙包金拉線的檢測主要是檢測金拉線是否存在、拉線位置是否偏離。 金拉線的檢測方法是對獲取煙包圖像的拉線區(qū)域進(jìn)行灰度化、二值化、腐蝕和膨脹等處理,查找出拉線輪廓,然后根據(jù)輪廓的面積判斷拉線是否合格。
金拉線檢測算法如圖1 所示。
圖1 金拉線檢測算法
OpenCV 提供了在二值化圖像中查找輪廓的方法cvFindContours(),函數(shù)原型如下:
Int cvFindContours(
IpIImage* image; //輸入的單通道二值化圖像
CvMemStorage* storage; //得到輪廓的存儲(chǔ)容器
CvSeq* firstContour; //輸出參數(shù):包含第一個(gè)輸出輪廓的指針
Int headerSize = sizeof(CvContour); //序列頭的大小
CvContourRetrievalMode mode = CV_RETR_LIST; //提取模式
CvChainApproxMethod method = CV_CHAIN_APPROX_SIM_PLE;//逼近方法
};
從灰度圖像中得到二值化圖像可以用cvThreshold(),然后再采用cvErode()和cvDilate()函數(shù)對二值化圖像進(jìn)行腐蝕和膨脹處理。
目前,機(jī)器視覺技術(shù)已經(jīng)廣泛應(yīng)用于各個(gè)工業(yè)領(lǐng)域,促進(jìn)了工業(yè)自動(dòng)化的發(fā)展,提高了企業(yè)的生產(chǎn)效率和產(chǎn)品合格率。OpenCV 作為一款優(yōu)秀的開源視覺庫, 必將隨著機(jī)器視覺技術(shù)的發(fā)展而不斷成熟。 將OpenCV 應(yīng)用于產(chǎn)品金拉線檢測系統(tǒng)中,極大地的縮短了軟件的開發(fā)周期,并可以快速、準(zhǔn)確的檢測出拉線不合格產(chǎn)品,系統(tǒng)的各項(xiàng)指標(biāo)均達(dá)到要求。
[1]Rafael C.Gonzalez,Richard E.Woods.數(shù)字圖像處理[M].北京:電子工業(yè)出版社,2005.
[2]劉直芳,王運(yùn)瓊,朱敏.數(shù)字圖像處理與分析[M].北京:清華大學(xué)出版社,2006.
[3]陳勝勇,劉勝.基于OpenCV 的計(jì)算機(jī)視覺技術(shù)實(shí)現(xiàn)[M].北京:科學(xué)出版社,2008.
[4]劉瑞禎,于仕琪.OpenCV 教程[M].北京航空航天大學(xué)出版社,2007.
[5]林洪文,等.基于背景差技術(shù)的運(yùn)動(dòng)目標(biāo)檢測方法研究[J].國防科技大學(xué)學(xué)報(bào),2003,13(6):77-81.