李百明
(黎明職業大學 智能制造工程學院,福建 泉州 362000)
角碼常被用于裝飾工程和家具裝配,合理使用角碼能讓家具裝配更加立體,而角碼孔徑是否合乎標準直接影響裝配的穩定性與可靠性。目前,對角碼孔徑的檢測,絕大多數生產企業仍采用游標卡尺和內徑千分尺相結合的傳統人工檢測方法進行,具有檢測工作量大、速度慢,易受人為因素影響等缺點[1],無法滿足大批量、高強度、實時在線檢測需求[2]。
近年來,機器視覺技術得到了快速發展,因其具有檢測速度快、非接觸無損傷、檢測成本低、準確度高等優點被廣泛用于工業測量領域[3,4]。謝俊[5]等利用Canny邊緣檢測算子提出了一種對孔類工件在線檢測方法,該方法的精度為像素級。陳怡然[6]等將形態學和Canny檢測算子相結合提出了一種圓形工件尺寸參數測量方法,實現了對圓形工件的非接觸測量,但精度仍為像素級。李執[2]等將Blob分析、分割與卡尺技術相結合提出了一種金屬工件尺寸測量方法,該方法的精度可達亞像素級別,不足之處是Blob分析受照度變化的影響較大。針對角碼孔徑檢測的現狀,結合現有的機器視覺檢測技術,本文將Canny檢測算子與卡尺工具相結合,提出了一種基于機器視覺的角碼孔徑測量方法,實驗表明該方法測量精度能夠滿足要求,數據重復性好,測量速度快。
基于機器視覺的角碼孔徑測量系統由工業相機、工業鏡頭、LED背光源、載物臺、支架和計算機等部分組成,其孔徑測量流程如圖1所示。將采集到的彩色圖像轉成單通道的灰度圖像,以提高處理速度;通過二值化快速定位角碼所在區域;利用仿射變換將傾斜的角碼轉正,便于孔徑尺寸統計;采用Canny邊緣檢測算子獲取角碼孔徑的邊緣輪廓點,實現輪廓點的粗定位;利用卡尺工具進一步獲取孔徑的亞像素邊緣點;利用最小二乘法將邊緣點擬合成圓形輪廓;根據擬合的圓形輪廓計算角碼的孔徑尺寸。

圖1 角碼孔徑測量流程
本系統所用的相機是彩色相機,拍攝的圖片是每個像素點用3個值來表示的彩色圖像,直接對其進行分析運算量非常大。對角碼的孔徑尺寸進行測量的關鍵是準確提取其邊緣信息,而邊緣信息只和光強相關,因此,為降低運算量需要將三通道的彩色圖像轉成只包含光強信息的單通道灰度圖像。常用的灰度化處理方法有最大值法、加權平均值法和平均值法等。本文采用加權平均值法進行灰度化處理。加權平均值法原理是根據三通道的重要程度對紅綠藍三通道分別設置不同的權值進行加權平均[7],其計算公式如式(1)所示。
f(x,y)=ωRR+ωGG+ωBB。
(1)
式中:f(x,y)為像素點(x,y)的灰度值;R、G和B分別為紅、綠和藍三個通道在像素點(x,y)的像素值;ωR、ωG和ωB分別為紅綠藍三個通道的權值。
由于人眼對綠色最為敏感,對藍色敏感度最低的特性,故取ωR=0.299,ωG=0.587,ωB=0.114。圖2為角碼的灰度圖。

圖2 角碼的灰度圖
二值化的目的是快速定位角碼的位置,并將角碼和背景分離,為后續仿射變換做準備。測量系統中采用的是背光源照明,拍攝的圖像中背景是白色,而角碼主體由于不透光而呈黑色,因此角碼和背景之間對比度分明,故本文采用最大類間方差法對角碼圖像進行二值化處理。最大類間方差二值化法的原理是:根據圖像的灰度特性,將角碼圖像分為前景和背景兩部分,然后計算前景和背景之間的類間方差,當前景和背景的類間方差最大時,表示前景和背景的差異最大,此時的閾值即為最佳分割閾值[8]。二值化結果如圖3所示。

圖3 角碼二值化結果
在對角碼的孔徑進行非接觸檢測時,在水平面內角碼可能朝各個方向傾斜,為便于將角碼圖像上的孔徑和物理孔徑建立準確的對應關系,需通過仿射變換將角碼旋轉到水平方向。將角碼旋轉到水平方向的具體步驟如下[9]:
1)計算出二值化區域的中心點坐標(x0,y0);
2)求出二值化區域相對水平方向的傾斜角度θ;
3)利用傾斜角度θ計算旋轉矩陣R,如式(2)所示。
(2)
4)定義一個齊次變換矩陣M,如式(3)所示。
(3)
5)將齊次變換矩陣從點(x0,y0)平移到原點,然后旋轉角度θ,最后再平移回中心點處(x0,y0),得到變化矩陣Q,如式(4)所示。
(4)
6)將矩陣Q應用于仿射變換中,即可獲得轉正的角碼圖像,轉正結果如圖4所示。

圖4 轉正后的角碼圖像
常用的邊緣檢測算子有Sobel算子、Robert算子和Canny算子等[5]。由于Canny算子具有抗噪能力強[10]、邊緣檢測精度更優[11]等特點,因此本文采用Canny邊緣檢測算子來提取角碼的邊緣輪廓。Canny邊緣檢測的流程如下[12-14]:
1)用二維高斯波函數對角碼圖像進行卷積處理,以達到盡可能消除噪聲的目的,計算方法如式(5)~(6)所示。
(5)
R(x,y)=G(x,y)*f(x,y) ,
(6)
式中:G(x,y)表示高斯濾波函數;f(x,y)表示角碼的灰度圖像;R(x,y)表示降噪后的圖像;σ表示高斯濾波參數。
用一階偏導的有限差分計算像素梯度幅值和梯度方向,計算公式如式(7)~(8)所示。
(7)
(8)
式中:M(x,y)表示像素梯度幅值;fx(x,y)表示圖像在水平方向的一階偏導數;fy(x,y)表示圖像在垂直方向的一階偏導數;θ(x,y)表示像素梯度方向。
3)以梯度幅值矩陣內的每一點為中心,沿其八鄰域方向進行遍歷,找到與中心點梯度方向相同的兩個鄰域,并將這兩個鄰域的幅值與中心點的幅值進行比較,若中心點的幅值最大,則保留該中心點的梯度值,反之將該中心點的梯度值置為0。
4)設定一個高閾值和一個低閾值,梯度幅值大于高閾值的點視為強邊緣,保留該點;梯度幅值小于低閾值的像素點視為非邊緣,舍棄此點;介于高閾值和低閾值中間的點視為弱邊緣,若其八鄰域內存在強邊緣,則保留此點,否則視為孤立的噪點,舍去不要[15]。
利用Canny邊緣檢測算子對圖4中1號孔進行邊緣提取,結果如圖5所示。由圖5可知,Canny算子完整地提取了圓孔的邊緣輪廓,但輪廓為像素級精度且是一個不規則的復雜多邊形,用此輪廓計算的直徑誤差較大。

圖5 Canny算子邊緣提取圖
為提高角碼孔徑的測量精度和邊緣提取的準確性,本文采用基于卡尺工具的邊緣檢測算法來提取角碼的孔徑輪廓,該方法檢測的輪廓精度為亞像素級別。基于卡尺工具邊緣檢測算法的具體步驟如下[16]:
1)做Canny算子提取的圓孔輪廓的最小外接圓。
2)在最小外接圓上產生等大、等距的測量矩形,如圖6所示。測量矩形的數量決定檢測到邊緣點的個數,測量矩形的數量越多,檢測到的邊緣點數越多,檢測所需的時間也越久。本文所用測量矩形的長為40,寬為10,數量為30。

圖6 添加測量矩形
3)計算每個測量矩形內每個像素點的梯度幅值,并采用極大值抑制獲取最優邊緣點位置,所得邊緣點如圖7所示。

圖7 最優邊緣點
4)用最小二乘法將提取到的邊緣點擬合成一個標準的圓形,如圖8所示。

圖8 最小二乘法擬合圓形軌跡
為驗證本文算法的有效性,搭建了如圖9所示的實驗平臺。

圖9 基于機器視覺的角碼孔徑測量平臺
相機選用深圳邁德威視公司的MV-G2592C型彩色CMOS工業相機,該相機的分辨率為2 592×1 944;光源采用發光面為169×145 mm的LED背光源;鏡頭選用大恒圖像的HN-P-2528-6M-C2/3型600萬像素工業鏡頭;所用算法實驗平臺為Halcon20.11版。
通過本文設計的采集系統從圖像上直接獲得的尺寸是以像素為單位的,而工件的實際尺寸是以毫米為單位,將像素尺寸轉換成實際尺寸的過程稱為標定。標定的具體方法是先對實際尺寸為L的工件進行拍照,然后測得該工件的像素尺寸為M,則可得系統的標定系數K:
(9)
式中,L為表示工件的實際尺寸,單位為mm;M為表示工件的圖像尺寸,單位為pixel;K為表示單位像素所對應的實際尺寸,單位為mm/pixel。
本文對同一工件的圓1到圓4進行多組測量,得系統的標定系數K=0.050 9 mm/pixel。
為了驗證系統的重復性精度,在相同測量環境下,采用本文方法對同一工件進行15次測量,測量結果如圖10所示。

次數/次(a) 孔1

次數/次(b) 孔2

次數/次(c) 孔3

次數/次(c) 孔4圖10 工件重復性檢測
由圖10可知,該工件中孔1的最大尺寸為4.841 8 mm,最小尺寸為4.827 7 mm,二者的差值為0.014 1 mm,測量孔1直徑的重復性精度約為0.014 1 mm;孔2的最大尺寸為4.7917 mm,最小尺寸為4.777 3 mm,二者的差值為0.014 4 mm,孔2直徑的重復性精度約為0.014 4 mm;孔3的最大尺寸為4.810 7 mm,最小尺寸為4.798 0 mm,其重復測量的最大差值為0.012 7 mm,孔3直徑的重復性精度近似為0.012 7 mm;孔4的最大尺寸為4.846 8 mm,最小尺寸為4.833 2 mm,二者的差值為0.013 6 mm,孔4直徑的重復性精度約為0.013 6 mm。
通過以上分析可知,本系統對4個孔進行測量時的重復性精度均近似為0.01 mm,能夠滿足對角碼孔徑的重復性檢測精度要求且測量的直徑數值波動平穩,具有很好的穩定性。
為了驗證本測量系統測量結果的精確度,讓操作熟練的工人利用分辨力為0.01 mm的游標卡尺對5個不同的工件分別進行多次測量,取多次測量的平均值作為各個工件的真值;然后再利用本測量系統對這5個工件的尺寸進行檢測;最后通過比較二者的差值即可得到系統的測量精度。表1給出了本文算法的測量精度。

表1 本文算法測量精度
由表1可知,孔1~孔4的最大誤差分別為0.025 4、0.024 6、0.028 5和0.021 9 mm,均在0.03 mm內且小于一個像素0.050 9 mm,能夠滿足對角碼孔徑的測量精度要求。此外,用游標卡尺檢測角碼的四個孔徑大約需要3 min,而本文算法只需126 ms,測量效率大幅提升,能滿足大批量、高強度、實時檢測需求。
實驗表明,本文提出的基于機器視覺的角碼孔徑測量方法的最大絕對測量誤差不超過0.03 mm,達到了亞像素測量精度,能夠滿足企業對角碼孔徑的測量精度要求;測量的重復性精度小于0.015 mm,說明測量結果的穩定性較好;該方法檢測四個孔徑只需要126 ms,相對人工檢測在速度上得到了極大提高。因此,本文設計的檢測方法能夠滿足角碼孔徑的大批量、快速,實時檢測需求,具有良好的應用前景。