周傳宏,王懷虎,康少博
(上海大學(xué) 上海市機(jī)械自動(dòng)化及機(jī)器人重點(diǎn)實(shí)驗(yàn)室,上海 200072)
目前我國煙草生產(chǎn)廣泛采用生產(chǎn)流水線方式,生產(chǎn)速度比較快,而且還要保證產(chǎn)品及包裝的質(zhì)量。人工抽檢測顯得非常困難,它檢測效率低,在裝箱的過程中可能會(huì)出現(xiàn)缺條的現(xiàn)象,一旦流入市場,會(huì)給產(chǎn)品和煙廠品牌聲譽(yù)帶來不利的影響。為了杜絕和防止裝箱缺條現(xiàn)象的發(fā)生,就目前我國煙草行業(yè)而言,采用機(jī)器視覺技術(shù)是最好的解決方案。
機(jī)器視覺就是用機(jī)器代替人眼來做測量和判斷。機(jī)器視覺系統(tǒng)是指通過機(jī)器視覺產(chǎn)品(即圖像攝取裝置,分為CMOS和CCD兩種)將被攝取目標(biāo)轉(zhuǎn)換成圖像信號(hào),傳送給專用的圖像處理系統(tǒng),根據(jù)像素分布和亮度、顏色等信息,轉(zhuǎn)變成數(shù)字化信號(hào),圖像系統(tǒng)對(duì)這些信號(hào)進(jìn)行各種運(yùn)算來抽取目標(biāo)的特征,如面積、數(shù)量、位置、長度,再根據(jù)預(yù)設(shè)的允許度和其他條件輸出結(jié)果,包括尺寸、角度、個(gè)數(shù)、合格/不合格、有/無等,實(shí)現(xiàn)自動(dòng)識(shí)別功能,進(jìn)而根據(jù)判別的結(jié)果來控制現(xiàn)場的設(shè)備動(dòng)作[1]。
機(jī)器視覺系統(tǒng)通常由硬件和軟件兩大部分組成,硬件主要包括:光源、鏡頭、CCD相機(jī)、工業(yè)PC機(jī)、圖像采集卡、監(jiān)視器和通訊/輸入輸出單元等;軟件則是根據(jù)具體的檢測內(nèi)容和精度要求由設(shè)計(jì)人員自行開發(fā)。
OpenCV是由Intel公司開發(fā)的開源計(jì)算機(jī)視覺庫,該庫由一系列C函數(shù)和少量C++類構(gòu)成,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺方面的很多通用算法,機(jī)器視覺研發(fā)人員在軟件開發(fā)過程中可以直接調(diào)用庫內(nèi)函數(shù),從而省去常用圖像處理算法的編寫,可以提高軟件的檢測速度和精度。
OpenCV主體分為五個(gè)模塊:CV模塊包含基本的圖像處理函數(shù)和高級(jí)的計(jì)算機(jī)視覺算法;ML是機(jī)器學(xué)習(xí)庫,包含一些基于統(tǒng)計(jì)的分類和聚集工具;HighGUI包含圖像和視頻輸入/輸出的函數(shù);CXCore包含OpenCV的一些基本數(shù)據(jù)結(jié)構(gòu)和相關(guān)函數(shù);CvAux模塊主要存放一些即將被淘汰的算法和函數(shù),同時(shí)還有一些新出現(xiàn)的實(shí)驗(yàn)性的算法和函數(shù)[2]。
本次設(shè)計(jì)的視覺檢測系統(tǒng)是在Visual C++ 6.0環(huán)境下開發(fā)的,安裝好的OpenCV在VC6.0中配置如下:首先用VC新建一個(gè)工程,選擇菜單Tools>Options>Directories:分別設(shè)置lib路徑、include路徑、src路徑。接著進(jìn)行項(xiàng)目配置,選擇Project>Settings...進(jìn)入工程設(shè)置對(duì)話框,點(diǎn)擊Link選項(xiàng)卡,在Object/library modules文本框中添加OpenCV lib庫。
“裝箱缺條視覺檢測系統(tǒng)”是針對(duì)封裝機(jī)偶爾出現(xiàn)箱缺條現(xiàn)象而研制的在線圖像檢測系統(tǒng),它安裝在封裝機(jī)25條煙裝箱推板入口處,在原機(jī)缺條檢測點(diǎn)位置,裝箱作業(yè)過程中進(jìn)行在線檢測,從根本上預(yù)防和杜絕箱缺條現(xiàn)象的發(fā)生。
該算法主要是對(duì)采集到的圖像進(jìn)行實(shí)時(shí)處理,采用自適應(yīng)閾值處理方法進(jìn)行圖像分割,將檢測輪廓的面積與閾值比較,從而判斷缺條與否。算法流程圖如圖1所示。
圖1 裝箱缺條圖像檢測算法流程圖
2.2.1 ROI設(shè)置的實(shí)現(xiàn)
OpenCV提供了對(duì)感興趣區(qū)域操作的函數(shù),如果想設(shè)置ROI,可以使用函數(shù)cvSetImageROI(),并為其傳遞一個(gè)圖像指針和矩形。而取消ROI,只需要為函數(shù)cvResetImageROI()傳遞一個(gè)圖像指針。函數(shù)原型如下[4]:
2.2.2 自適應(yīng)閾值處理的實(shí)現(xiàn)
圖像二值化處理的關(guān)鍵是最佳閾值的選擇和確定。二值化處理的最理想的方法就是對(duì)圖像的自動(dòng)閾值選擇。比較常用的一種方法就是Otsu方法,該方法一直被認(rèn)為是閾值自動(dòng)選取的最佳方法[5]。
Otsu算法選擇使類間方差最大的灰度值為閾值。這里設(shè)計(jì)一個(gè)函數(shù)cvThresholdOtsu()來實(shí)現(xiàn)Otsu算法的原理,該函數(shù)的設(shè)計(jì)思路如下:1)首先計(jì)算圖像的直方圖并歸一化;2)計(jì)算圖像灰度均值;3)計(jì)算直方圖的零階和一階距;4)計(jì)算最大的類間方差,找到對(duì)應(yīng)的閾值。
經(jīng)過實(shí)驗(yàn)驗(yàn)證,直接使用函數(shù)cvThresholdOtsu()計(jì)算出的的閾值進(jìn)行圖像分割,由于照明系統(tǒng)的不同,圖像的效果不同,效果也一般。經(jīng)過實(shí)驗(yàn)計(jì)算出的閾值乘以一個(gè)修正系數(shù)0.70,效果更佳。
2.2.3 輪廓檢測的實(shí)現(xiàn)
OpenCV提供了在二值圖像中尋找輪廓的方法cvFindContours(),函數(shù)原型如下:
若計(jì)算得到的輪廓面積大于設(shè)定的閾值面積,就判定出現(xiàn)缺條現(xiàn)象,繪制該缺條區(qū)域的輪廓。OpenCV提供了一個(gè)繪制輪廓的函數(shù)cvDraw Contours(),它可以把篩選出來的輪廓繪制出來。
經(jīng)過以上三步的圖像處理,得到的效果圖如圖2 所示。
圖2 圖像處理ROI、圖像分割、檢測輪廓圖
圖3 缺條區(qū)域矩形邊界框圖
2.2.4 缺條區(qū)域邊界框繪制的實(shí)現(xiàn)
缺條區(qū)域選用矩形邊界框,比較符合煙條形狀且繪制比較簡單。OpenCV提供了得到矩形邊界框的函數(shù)cvBoundingRect(),該函數(shù)得到的是四邊水平和豎直的矩形,函數(shù)的原型如下:
該函數(shù)返回的是一個(gè)包圍輪廓的CvRect對(duì)象。為了繪制這個(gè)包圍輪廓的矩形框,可以使用繪圖函數(shù)cvRectangle(),它可以繪制一個(gè)矩形框。同時(shí)我們還可以利用cvPutText()函數(shù)來進(jìn)行繪制文字操作。繪制結(jié)果如圖3所示。
目前,機(jī)器視覺技術(shù)已經(jīng)廣泛應(yīng)用于煙草行業(yè)的產(chǎn)品質(zhì)量檢測領(lǐng)域,極大地促進(jìn)了工業(yè)自動(dòng)化的發(fā)展。OpenCV作為一款優(yōu)秀的開源視覺庫,也將隨著機(jī)器視覺技術(shù)的發(fā)展而不斷成熟。本文采用Otsu算法進(jìn)行自適應(yīng)閾值圖像分割, 基于OpenCV進(jìn)行算法設(shè)計(jì),縮短了檢測軟件的開發(fā)周期,檢測快速、識(shí)別準(zhǔn)確,從現(xiàn)場調(diào)試的情況看,該系統(tǒng)的各項(xiàng)指標(biāo)都達(dá)到了要求。
[1] 賈云得.機(jī)器視覺[M].北京:科學(xué)出版社,2000.
[2] Gary Bradski, Adrian Kaebler.Learning OpenCV[M].O'Reilly Media, Inc,2009.
[3] http://www.opencv.org.cn設(shè)計(jì).
[4] 黎松,平西建,丁益宏.開放源代碼的計(jì)算機(jī)視覺類庫OpenCV的應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2005,22(8):134-136.
[5] 薛孝琴,吳懷宇.一種改進(jìn)Otsu算法在Kirsch邊緣檢測中的應(yīng)用[J].計(jì)算機(jī)與數(shù)字工程,2009,3(37):167.
[6] 陳磊.計(jì)算機(jī)視覺類庫OpenCV在VC中的應(yīng)用[J].微計(jì)算機(jī)信息,2007,23(4):169-171.
[7] 張留剛.基于機(jī)器視覺技術(shù)的煙條檢測系統(tǒng)研究[D].南京:南京航空航天大學(xué),2008.
[8] Sonka M,Hlavac V,Boyle R.圖像處理與機(jī)器視覺[M].北京:人民郵電出版社,2009.
[9] 賈小軍,喻擎蒼.基于開源計(jì)算機(jī)視覺庫OpenCV的圖像處理[J].計(jì)算機(jī)應(yīng)用與軟件,2008,25(4):276-278.