解文卓,陳星宇,倪德鵬
(寶雞鈦業股份有限公司,陜西 寶雞 721014)
隨著制造行業的不斷發展,自動化水平在不斷提高,傳統的一些計數、計量方法已經慢慢的凸顯出它的不足,例如在小規格棒材生產過程中,不同工序之間進行轉料的時候,為了防止混料、遺料、滿足合同量等要求,每次轉料都要對轉入當前工序的批料進行計數,與工藝卡片中的數量進行核對,確定無誤后方可進行該工序的加工,這種手動計數耗時費力,人為因素大,經常需要多次計數或多人計數,不但影響生產進度,給顧客的發貨數量也常有數量方面的問題,直接影響公司的銷售收入和顧客滿意度。基于此,本文提出了一種棒材數量檢測的方法,可以通過攝像頭采集棒材端面的圖像,利用MATLAB軟件進行灰度變換、邊緣檢測、腐蝕及平滑處理,利用算法自動計數。利用這種方法可以準確、快速計算出結果,避免了批量大時人工計數耗時、繁瑣、易出錯的因素。
棒材數量檢測的方法分為以下幾個部分:①圖像采集及預處理;②二值化及邊界提取;③計算模板匹配度,得到圓心的大致坐標。圓心的數量就是棒材的數量。
在棒材生產過程中工序之間的轉料、成品包裝前,都需要對棒材進行打捆,核實數量,為了使用棒材自動檢測技術,我們需要對棒材的端面進行圖像采集,計算端面中圓形的數量,通過處理、運算得到棒材的數量。
采集圖像可以用普通攝像頭,攝像頭的像素越高,分辨率越清晰,運算速度就越快。在圖形采集過程中,由于太陽光的存在會使得棒材端面產生反光現象,采集到的圖像一側偏亮,一側偏暗;以及捆狀棒材端頭不是很齊整,圖像出現明暗不均勻,不利于軟件處理。為了解決這個問題,經過遮擋光線、燈光補償等多次嘗試,問題基本上得到解決,本文采用一個環形光源對棒材端面進行照射,削弱太陽光的影響,并制作一個簡易的黑底工裝,黑布之類的即可,用來增強端面與相背景的對比度,從而使后續處理變得簡單。
基于matlab的這種棒材數量檢測方法需要對顏色進行處理,所以在圖像預處理過程中,將彩色圖像轉化為灰度圖像[1],如圖1所示:

圖1 灰度圖像
將圖像處理為灰度圖片之后,需要對圖像進行分割,也就是將圖像中有意義的特征部分提取出來,這是進一步進行圖像識別、分析和計算的基礎。在眾多的圖像分割算法中,閾值分割是一種簡單的、常用的方法。閾值法圖像分割通過設置閾值,把像素點按灰度級分成若干類,從而實現圖像分割。把一幅灰度圖像轉換成二值圖像是閾值分割的最簡單形式,設原始圖像為f(x,y),首先以一定準則在f(x,y)中找出一個灰度值t作為閾值,將圖像分為兩部分,即把大于等于該閾值的像素點的值設為0。閾值運算后的圖像為二值圖像g(x,y)如式1所示:

式1中全局閾值T的選擇直接影響分割效果。Otsu方法是一種常用的求取圖像閾值的方法。該方法基于使圖像灰度類間方差最大化的方法求出最佳分割閾值,在matlab中可以使用graythresh語句求出,并基于該閾值進行圖像分割[2],如圖2所示。當圖2中的一個點的8鄰域內至少有一個為0的時候,認為該點處于圖像的邊界處,保留該點的坐標。最后可以得到邊界圖像,如圖3。

圖2 二值化

圖3 邊界圖像
從圖3可以看出,棒材的端面是很多圓形,檢測出這些圓形的數量就得到了棒材的數量。圓形檢測傳統方法是Hough變換,可以準確的檢測出圓形并求出圓心,但由于Hough變換算法是一對多的映射匹配算法,有很大的缺陷,如計算量大,所需的計算時間長;需要將參數空間單元預存到存儲單元中,耗費大量的存儲空間。
本文采用模板檢測的方法來檢測圓形并得到圓心的大致位置,通過計算圓心的數量就可以得到棒材的數量,可以減少運算量,避免了Hough變換運算時間長的缺點[3]。
環形模板可以用Matlab中的strel('disk',r)語句來生成一個實心的圓形,設置r1和r2兩個半徑(r1>r2),就得m×m階的較大圓形f1和n×n階的較小圓形f2,其中,m=2×r1-1,n=2×r2-1。然后如式2所示,在f1中相應位置減去f2,就可以得到寬度為(r2-r2)的m×m階圓環f,如圖4所示。其中,f中白色部分的數值為1,黑色部分的數值為0。則該m×m階圓環矩陣f稱為檢測模板。


圖4 環形模板
將m×m階圓環矩陣f與另一個m×m階的矩陣g(g中的數值只有0和1)的相應位置進行相乘,并將m×m個乘積進行相加,得到的數值s就是匹配值,如式3。


當g不為圓或者半徑過大或過小,匹配值s的值為g與f相交的像素的個數,這個值是一個很小的值。
通過設置匹配值的閾值a,就能判斷出一個圖像矩陣g中的圖形是不是半徑為特定范圍的圓環。
在圖3所示的邊界圖像G的左上角提取一個m×m階的子矩陣gi,j,用式3的方法與環形模板f計算匹配值s,并與匹配值閾值a進行比較,并建立一個大小與G相同的空矩陣b來記錄圓心的位置。如果s<a,表示gi,j內不是一個待檢測的圓,則將b中與此時模板的中心坐標對應的點設為0;如果s≥a,表示gi,j內檢測到了一個符合規定的圓,將b中與此時模板的中心坐標對應的點設為1。

將模板在G上逐行逐列進行歷遍,就得到了圓心的矩陣b,如圖5所示。可以看到,圖5中有一些圓心區域相對較小,這是因為這些區域對應的圓不完整,所以得到的圓心區域較小。

圖5 圓心圖像
對圖5得到的圓心圖像用regionprops函數求取重心,重心就是圓心大致的位置。求取圓心的目的是為了在原圖像上添加標記,以便用肉眼進行輔助識別。由于本文的目的是求取棒材數量,所以對圓心位置的精確度要求不高,用重心的位置作為圓心是可行的。圖6所示即為最終處理結果,計算出圓心數量即為棒材的根數。

圖6 最終結果
隨著工業化、信息化的不斷發展,企業加工能力不斷提升,利用計算機檢測棒材數量將是勢在必行的趨勢。除了能大量的節省時間、物力、人力,還可以極大地降低傳統計數出錯率。
本文主要研究和解決了:①在小規格棒材數量檢測方面利用matlab進行處理的算法分析;②對圖像灰度化、二值化的圖像處理方法;③研究解決光線對圖像處理的影響;④選取合適的閥值進行邊緣檢測達到檢測棒材數量的目的。
在整個試驗過程中也發現了部分問題,例如太陽光對檢測數量的影響;必須制作相應的工裝使棒材檢測斷面的一頭大體對齊;角度把握不好會導致拍照背景同棒材斷面有較大色差,通過試驗同樣也發現這些制約條件都可以通過改善工裝等外界條件進行解決。