周傳宏,王懷虎,康少博
(上海大學 上海市機械自動化及機器人重點實驗室,上海 200072)
目前我國煙草生產廣泛采用生產流水線方式,生產速度比較快,而且還要保證產品及包裝的質量。人工抽檢測顯得非常困難,它檢測效率低,在裝箱的過程中可能會出現缺條的現象,一旦流入市場,會給產品和煙廠品牌聲譽帶來不利的影響。為了杜絕和防止裝箱缺條現象的發生,就目前我國煙草行業而言,采用機器視覺技術是最好的解決方案。
機器視覺就是用機器代替人眼來做測量和判斷。機器視覺系統是指通過機器視覺產品(即圖像攝取裝置,分為CMOS和CCD兩種)將被攝取目標轉換成圖像信號,傳送給專用的圖像處理系統,根據像素分布和亮度、顏色等信息,轉變成數字化信號,圖像系統對這些信號進行各種運算來抽取目標的特征,如面積、數量、位置、長度,再根據預設的允許度和其他條件輸出結果,包括尺寸、角度、個數、合格/不合格、有/無等,實現自動識別功能,進而根據判別的結果來控制現場的設備動作[1]。
機器視覺系統通常由硬件和軟件兩大部分組成,硬件主要包括:光源、鏡頭、CCD相機、工業PC機、圖像采集卡、監視器和通訊/輸入輸出單元等;軟件則是根據具體的檢測內容和精度要求由設計人員自行開發。
OpenCV是由Intel公司開發的開源計算機視覺庫,該庫由一系列C函數和少量C++類構成,實現了圖像處理和計算機視覺方面的很多通用算法,機器視覺研發人員在軟件開發過程中可以直接調用庫內函數,從而省去常用圖像處理算法的編寫,可以提高軟件的檢測速度和精度。
OpenCV主體分為五個模塊:CV模塊包含基本的圖像處理函數和高級的計算機視覺算法;ML是機器學習庫,包含一些基于統計的分類和聚集工具;HighGUI包含圖像和視頻輸入/輸出的函數;CXCore包含OpenCV的一些基本數據結構和相關函數;CvAux模塊主要存放一些即將被淘汰的算法和函數,同時還有一些新出現的實驗性的算法和函數[2]。
本次設計的視覺檢測系統是在Visual C++ 6.0環境下開發的,安裝好的OpenCV在VC6.0中配置如下:首先用VC新建一個工程,選擇菜單Tools>Options>Directories:分別設置lib路徑、include路徑、src路徑。接著進行項目配置,選擇Project>Settings...進入工程設置對話框,點擊Link選項卡,在Object/library modules文本框中添加OpenCV lib庫。
“裝箱缺條視覺檢測系統”是針對封裝機偶爾出現箱缺條現象而研制的在線圖像檢測系統,它安裝在封裝機25條煙裝箱推板入口處,在原機缺條檢測點位置,裝箱作業過程中進行在線檢測,從根本上預防和杜絕箱缺條現象的發生。
該算法主要是對采集到的圖像進行實時處理,采用自適應閾值處理方法進行圖像分割,將檢測輪廓的面積與閾值比較,從而判斷缺條與否。算法流程圖如圖1所示。

圖1 裝箱缺條圖像檢測算法流程圖
2.2.1 ROI設置的實現
OpenCV提供了對感興趣區域操作的函數,如果想設置ROI,可以使用函數cvSetImageROI(),并為其傳遞一個圖像指針和矩形。而取消ROI,只需要為函數cvResetImageROI()傳遞一個圖像指針。函數原型如下[4]:

2.2.2 自適應閾值處理的實現
圖像二值化處理的關鍵是最佳閾值的選擇和確定。二值化處理的最理想的方法就是對圖像的自動閾值選擇。比較常用的一種方法就是Otsu方法,該方法一直被認為是閾值自動選取的最佳方法[5]。
Otsu算法選擇使類間方差最大的灰度值為閾值。這里設計一個函數cvThresholdOtsu()來實現Otsu算法的原理,該函數的設計思路如下:1)首先計算圖像的直方圖并歸一化;2)計算圖像灰度均值;3)計算直方圖的零階和一階距;4)計算最大的類間方差,找到對應的閾值。
經過實驗驗證,直接使用函數cvThresholdOtsu()計算出的的閾值進行圖像分割,由于照明系統的不同,圖像的效果不同,效果也一般。經過實驗計算出的閾值乘以一個修正系數0.70,效果更佳。
2.2.3 輪廓檢測的實現
OpenCV提供了在二值圖像中尋找輪廓的方法cvFindContours(),函數原型如下:

若計算得到的輪廓面積大于設定的閾值面積,就判定出現缺條現象,繪制該缺條區域的輪廓。OpenCV提供了一個繪制輪廓的函數cvDraw Contours(),它可以把篩選出來的輪廓繪制出來。
經過以上三步的圖像處理,得到的效果圖如圖2 所示。

圖2 圖像處理ROI、圖像分割、檢測輪廓圖

圖3 缺條區域矩形邊界框圖
2.2.4 缺條區域邊界框繪制的實現
缺條區域選用矩形邊界框,比較符合煙條形狀且繪制比較簡單。OpenCV提供了得到矩形邊界框的函數cvBoundingRect(),該函數得到的是四邊水平和豎直的矩形,函數的原型如下:

該函數返回的是一個包圍輪廓的CvRect對象。為了繪制這個包圍輪廓的矩形框,可以使用繪圖函數cvRectangle(),它可以繪制一個矩形框。同時我們還可以利用cvPutText()函數來進行繪制文字操作。繪制結果如圖3所示。
目前,機器視覺技術已經廣泛應用于煙草行業的產品質量檢測領域,極大地促進了工業自動化的發展。OpenCV作為一款優秀的開源視覺庫,也將隨著機器視覺技術的發展而不斷成熟。本文采用Otsu算法進行自適應閾值圖像分割, 基于OpenCV進行算法設計,縮短了檢測軟件的開發周期,檢測快速、識別準確,從現場調試的情況看,該系統的各項指標都達到了要求。
[1] 賈云得.機器視覺[M].北京:科學出版社,2000.
[2] Gary Bradski, Adrian Kaebler.Learning OpenCV[M].O'Reilly Media, Inc,2009.
[3] http://www.opencv.org.cn設計.
[4] 黎松,平西建,丁益宏.開放源代碼的計算機視覺類庫OpenCV的應用[J].計算機應用與軟件,2005,22(8):134-136.
[5] 薛孝琴,吳懷宇.一種改進Otsu算法在Kirsch邊緣檢測中的應用[J].計算機與數字工程,2009,3(37):167.
[6] 陳磊.計算機視覺類庫OpenCV在VC中的應用[J].微計算機信息,2007,23(4):169-171.
[7] 張留剛.基于機器視覺技術的煙條檢測系統研究[D].南京:南京航空航天大學,2008.
[8] Sonka M,Hlavac V,Boyle R.圖像處理與機器視覺[M].北京:人民郵電出版社,2009.
[9] 賈小軍,喻擎蒼.基于開源計算機視覺庫OpenCV的圖像處理[J].計算機應用與軟件,2008,25(4):276-278.