范必鑫,洪城輝
(福建省產品質量檢驗研究院,福建 福州 350002)
OpenCV是一個開源的計算機視覺庫,它提供一個間接高效的接口,能實現視覺應用的快速構建;Python具有豐富的標準庫,可以縮短開發時間。家具板材耐磨試驗是考驗家具板材表面耐用性的一項重要指標,當前家具板材耐磨性實驗后的花紋保留率的判斷主要依靠實驗人員的主觀判斷,存在一定的局限性。為了提高花紋保留率結論的正確性,引入計算機視覺處理,采用工業相機拍攝,計算機上位機軟件進行圖片處理和花紋保留率的計算。本文主要介紹在Python語言環境下通過調用OpenCV庫各類函數、處理圖片、計算相關數值后得到花紋保留率的過程。
花紋保留率的算法主要是將磨紋帶內磨耗部分和花紋保留部分提取出來,求得磨耗面積和花紋保留面積。
方案一:利用漫水填充cv2.FloodFill()函數將磨耗部分(相同顏色)提取出來,然后計算面積;經測試該方案只適用磨紋邊界較清晰的,且板材底紋顏色花紋較勻稱的,木紋較復雜、磨耗不均勻的樣品容易出現找不到磨紋邊界、漏填等,誤判率較大。
方案二:先將樣品原圖通過cv2.cvtColor()函數將樣品圖片轉換為HSV色彩空間,再用cv2.inRange()函數判斷圖像內像素點的像素值是否在指定的范圍內,原圖對應值在Range內則為255,否則為0;經測試該方案同樣不適用板材花紋較復雜、磨耗不均勻的樣品。
方案三:利用cv2.threshold()函數二值化閾值處理將樣品圖片轉換為二值圖,在二值圖內將磨耗部分和花紋保留部分提取出來,經測試該方案適用各類家具板,處理效果符合要求。
根據方案三的思路,筆者要將原始圖片(見圖1)處理成直觀表示磨耗部分和花紋保留部分鮮明區分的二值圖。為了減少干擾,首先將磨紋帶處理出來,變成只有磨紋帶部分的原圖,而其余部分均為黑色(見圖2),同時圓環的面積即為磨紋帶的面積,記為S,可以直接用于后面花紋保留率的計算。

圖1 原始圖片

圖2 只留磨紋帶圖片
在這里,磨紋帶的面積即圓環面積有兩種算法:利用畫圓環時的大小圓半徑值,直接代入圓環面積計算公式S=π(R2-r2);建立與原圖大小相同的掩模,在其內畫圓環,利用輪廓查找出兩個圓的輪廓,再進行輪廓面積計算,帶符號的輪廓面積,負的為外輪廓,對應的是大圓面積,正的為內輪廓,對應的是小圓面積,將兩個值相加即可獲得圓環面積。兩種方法計算出的結果相差不大,但為了和后面磨耗部分面積計算采用統一計算原則,讓最后花紋保留率結果精確度進一步提高,所以圓環面積的計算也采用輪廓面積計算的方案。
然后將只有磨紋帶部分的圖片(見圖2)二值化處理,再用cv2.threshold()函數(通過OTSU方式的閾值分割進行處理(見圖3),獲取最佳閾值時將對象設為整張圖片,此時獲得的最佳閾值發現都偏小,達不到期望效果,原因是整張圖片為對象處理的話,黑色部分都參與了計算,所以得到的最佳閾值并不是本文需要的結果。

圖3 cv2.threshold()函數通過OTSU方式的閾值分割函數代碼
其實本文主要針對的是磨紋帶部分,所以改變方案,先在磨紋帶內截取若干磨耗較明顯的區域,利用cv2.threshold()函數通過OTSU方式的閾值分割進行處理,獲取最佳閾值,再將這幾個值求平均,獲得的值作為cv2.threshold()函數二值化閾值處理整個磨紋帶所需的設定閾值(見圖4),以此將磨紋帶內磨耗部分和花紋保留部分區分開來,二值圖上磨紋帶內的白色部分為磨耗掉的部分,黑色即為花紋保留部分,如圖5~7所示。

圖4 cv2.threshold()函數二值化閾值處理代碼

圖5 花紋保留部分 圖6 局部放大圖1 圖7 局部放大圖2
在將圖片處理成二值圖后,為了獲得磨耗部分或花紋保留部分的面積,還需要進一步的處理計算。OpenCV中Canny邊緣檢測,sible算子、輪廓查找等函數都可以查找出圖片輪廓,但是涉及到面積計算問題,所以本文直接選擇cv2.findContours()查找圖像輪廓函數對處理完的二值圖進行輪廓查找,然后利用cv2.contourArea()計算輪廓面積函數對所有輪廓面積進行計算,并將oriented參數設為True,得出的輪廓面積將帶符號,負值即外輪廓,正值即為內輪廓。將所有的輪廓面積帶符號進行累加計算后得出的即為所有磨耗掉的部分的面積。輪廓面積計算代碼如圖8所示。

圖8 輪廓面積計算代碼
通過圖9~11可以直觀地看出在查找輪廓時會將磨耗部分整體找出,即“外輪廓”,帶符號計算面積時該類輪廓為負值,將此類輪廓通過cv2.drawContours()函數在原圖上畫出表現如圖10所示,而找出的磨耗部分若存在花紋保留區域,則會被歸為“內輪廓”,帶符號計算輪廓面積時該類輪廓為正值,將此類輪廓通過cv2.drawContours()函數在原圖上畫出表現如圖11所示,輪廓都是從黑色背景中查找白色對象。

圖9 樣品部分截圖 圖10 輪廓面積為負值部分畫出圖 圖11 輪廓面積為正值部分畫出圖
將所有的輪廓面積值累加,即可求出磨耗部分的面積,結果取絕對值記為S2,那么就可以計算出花紋保留率=(1-S2/S)×100%。
OpenCV在計算機視覺處理方面是一個很好的工具,利用OpenCV開發的家具板表面耐磨圖像分析系統,很好地填補了家具板耐磨試驗后的花紋保留率計算機自動化評判的空白,大大縮小了花紋保留率結果評價的誤差范圍。