劉雙龍,金曉怡,范瑜,奚鷹
(1.201620 上海市 上海工程技術大學 機械與汽車工程學院;2.201804 上海市 同濟大學 機械與能源工程學院)
機器視覺發(fā)展至今,已不是單一的應用產品。機器視覺的軟硬件產品已逐漸成為生產制造各個階段的必要部分,這對系統(tǒng)的集成性提出了更高的要求[1-2]。企業(yè)需要能夠與測試或控制系統(tǒng)協(xié)同工作的一體化工業(yè)自動化系統(tǒng),而非獨立的視覺應用[3]。在現代自動化生產過程中,機器視覺系統(tǒng)廣泛用于工況監(jiān)視、成品檢驗和質量控制等領域。
工業(yè)領域中,視覺定位可以實現目標產品的自動化,例如,搬運、定位、焊接等[4]。市面上MATLAB、OpenCV、LabVIEW、HALCON 等成熟的軟件都可用于視覺定位。視覺定位方法有很多,按傳感器的數量多少可分為單目視覺定位、雙目視覺定位以及全方位視覺定位[5]。當前,學者們較多研究的還是單目視覺定位算法,本文中也選擇了單目識別進行手表表殼中心定位。
完整的視覺系統(tǒng)包括4 個主要部分:光學系統(tǒng)、圖像采集設備、圖像處理系統(tǒng)和執(zhí)行系統(tǒng)。在開發(fā)圖像處理算法之前,設計和構建合適的機器視覺系統(tǒng)是很有必要的。一個好的視覺系統(tǒng)可以減少環(huán)境對圖像采集系統(tǒng)的干擾,并且能夠簡化圖像處理算法,降低對算法處理隨機噪聲的系統(tǒng)要求。
圖像采集設備一般選用工業(yè)相機或者支持二次開發(fā)的攝像頭。二者當中,工業(yè)相機支持超高清晰度圖像的采集,但由于本文中的視覺算法對清晰度的要求不是很高,所以選定性價比較高的銳爾威視的RERUSB100W03M型攝像頭做圖像采集設備,其最高有效像素為1 280(H)×720(V),支持幀率是30 fps。
本文選用的圖像處理硬件系統(tǒng)為聯(lián)想G50-80筆記本電腦,使用Visual Studio 2017 編譯環(huán)境配置OpenCV 4.1.2。圖像采集設備與圖像處理系統(tǒng),即攝像頭與電腦之間采用USB3.0 High Speed 接口連接,實現圖像數據交換。
本研究僅涉及機器視覺的算法部分,而依照工廠實際要求,每個手表殼的中心坐標及偏轉角度是需要獲得的主要信息,由視覺系統(tǒng)向后續(xù)執(zhí)行系統(tǒng)提供。執(zhí)行系統(tǒng)的搭建不在本文的討論范圍之內。
光學系統(tǒng)提供與工況相似的照明環(huán)境,以便收集工件的圖像信息。圖像采集設備會受到工廠內光照條件和人員移動等因素的影響,造成拍照環(huán)境不穩(wěn)定,并且很可能會進一步干擾圖像處理的結果。
另外,光學系統(tǒng)也是為了保證視覺系統(tǒng)識別任務的準確性和穩(wěn)定性。本文中的手表殼表面還沒有經過拋光處理,所以需要利用良好的照明來提高亮度。本文應用的算法僅需分辨手表殼輪廓,對采集到的圖像質量要求不高,所以選用白色光源為表殼載物盤照明。
表殼圖像的獲取主要通過工業(yè)攝像機拍攝獲得,圖1 所示為工業(yè)攝像機拍攝的工廠實際圖。每個載物盤上分別有4×4=16 個待加工表殼的放置點,為準確表達每個表殼的實際坐標,可將橫向記為x軸、縱向記為y軸。

圖1 工廠車間表殼樣品擺放圖Fig.1 Shop floor sample layout
圖像分析利用數學模型,結合圖像處理技術,分析底層特征和上層結構,從而提取具有一定智能信息的數據。本文需要提取各表殼中心坐標以及每個表殼相對于自己坐標中心的偏轉角度。
用V表示一個表殼中所有邊緣像素的集合。若隨機從V中選擇3 個像素,這3 個像素有可能是從圓中選擇出來的。假設很多被選擇的3 個像素集合都是從同一個圓上選擇的,那么就有很大概率這個圓是真正的圓。通過循環(huán)運算實現圓的數據并不斷迭代,從而從累加器中找到潛在的圓形。本文使用的算法,隨機一次選擇4 個邊緣像素,并定義一個判據距離來尋找一個可能的圓形,具體過程如下:
第1 步:存儲全部邊緣像素vi=(xi,yi)進入集合V,同時初始化記錄失敗次數的計數器f為0。讓Tf,Tmin,Ta,Td和Tr作為給定的5 個初始值。其中Tf為能容忍的失敗次數。如果V中像素比Tmin小,則停止檢測圓形的任務。在任意位于潛在圓上的兩個中介像素間的距離應該比Ta更大。Td和Tr是距離臨界值和比率臨界值。此外,讓│V│表示仍存留于V中的便算像素數量;
第2 步:如果f=Tf或者│V│<Tmin,然后停止,否則,將從集合V中隨機選擇4 個點vi(i=1,2,3,4),在vi被選擇的情況下,設定集合V=V-{vi}。
第3 步:從4 個邊緣像素中選擇潛在的圓,使任意在3 個中介像素中的2 個間的距離比Ta大,4個在潛在圓邊緣上的像素的間距比Td大。如果滿足,進入第4 步,否則將vi(i=1,2,3,4)點放回V集合,重置f:=f+1,返回第2 步。
第4 步:假設Cijk是潛在的圓,設定計數器C為0。對于任何一個V集合中的元素vi,檢查dl→ijk是否不比給定的間距臨界值Td更大。如果是的話C:=C+1,同時從V集合中將vk取出。在檢測所有V集合中的邊緣像素之后,假設C=np,也即邊緣像素np滿足dl→ijk≤Td。
第5 步:如果np≥2πrijkTr,進入第6 步。否則認為潛在的圓是個假圓,將這些邊緣像素np放回V,重置f:=f+1,返回第2 步。
第6 步:潛在的圓Cijk已經被檢測為真正的圓,將f置為0,返回第2 步。
在進行表殼中心坐標識別之前,為了消除圖像中無關的信息,恢復有用的真實信息,增強有關信息的可檢測性、最大限度地簡化數據,一般需要對其進行預處理。通過圖像預處理,可以改進特征提取、圖像分割、匹配和識別的可靠性[6]。
經過預處理,下一步需要對每一個表殼的圖像進行單獨分析,包括中心坐標識別和偏轉角度。通過以上分析,確定表殼中心坐標,算法操作流程如圖2 所示。

圖2 圖像操作流程Fig.2 Image operation flow
在進行圖像預處理時,調用OpenCV 函數庫中的cv2.THRESH_OTSU,使用OTSU 算法選擇最優(yōu)閾值,搭配cv2.THRESH_TOZERO 語法提取出圖像中的所有表殼特征,經過彩色閾值處理后的圖像如圖3 所示。

圖3 彩色閾值處理后的圖像Fig.3 Color thresholded image
接下來,對每個表殼分別進行圖像二值化處理,二值化處理后的圖像如圖4 所示。為了進一步提取圖像中的有用信息。對上述操作后的表殼圖像進行Canny 邊緣檢測[7-8],獲取到的表殼邊緣輪廓圖像如圖5 所示。

圖4 二值化處理后的圖像Fig.4 Image after binarization processing

圖5 Canny 算法得到的輪廓圖像Fig.5 Outline image by Canny algorithm
對于表殼的邊緣輪廓圖像可以調用OpenCV 函數庫中的cv2.HoughCircles(),即霍夫算法(Hough算法)[9],然后采用cv2.HOUGH_GRADIENT 語法檢測出輪廓圖像中的圓形。對檢測圓形中的每一個非0 點,通過Sobel 算法[10]計算局部梯度。計算得到的梯度方向,實際上就是圓切線的法線,圓的中心坐標亦得。
根據最大圓半徑與中心圓半徑繪制一個合適大小的輔助圓,獲得表殼與該圓相交的8 個點,再由這8 個點擬合出表殼中心線的位置。受噪聲影響,有時獲得的最大圓半徑并不能與表殼相交產生8 個點,對表殼的中心線位置產生些許影響。圖6 和圖7 為上述方法繪制的輔助圓以及最后求得的表殼偏轉角度。

圖6 輔助圓交點得到的中心線Fig.6 Centerline obtained from intersection of auxiliary circles

圖7 最后擬合的中心線Fig.7 Centerline of final fitting
最后,為了能夠直觀觀察表殼中心坐標識別算法的處理結果,編寫一段輸出程序,使得算法運行成功后,輸出一張帶有每個表殼中心圓和中心點的閾值圖像,如圖8 所示。

圖8 算法處理輸出圖像Fig.8 Algorithm processing output image
首先,在搭建完成的機器視覺硬件系統(tǒng)中,對擺放位置和角度隨機的手表殼載物盤進行50 次拍照,獲得50 張待檢測的實驗圖像,作為表殼中心定位算法的檢測數據。
向Visual Studio 2017 平臺上編寫好的表殼中心坐標識別代碼中輸入50 張實驗圖像,并根據本文介紹的方法對圖像中表殼的中心進行定位,然后觀察50 張經過算法處理后的輸出圖像,中心定位的實際情況可用人眼直接判斷,與算法輸出的結果進行對比。
通過50 張圖像的算法識別結果和表殼中心坐標實際情況對比,得到算法在50 張圖像中對表殼中心定位的準確率。實驗結果見表1。

表1 表殼中心定位算法準確率檢測數據Tab.1 Accuracy detection data of shell center positioning algorithm
針對手表殼工件的中心定位任務,本論文搭建了一套單目機器視覺系統(tǒng),模擬實際情況對手表殼工件拍照;然后對獲得的表殼圖像進行濾波處理、灰度處理以及表殼中心位置的確定;基于OTSU 算法對表殼圖像進行彩色閾值分割,利用該閾值對圖像二值化處理后,再進行Canny 邊緣檢測,獲得表殼邊緣輪廓信息;運用Hough 算法檢測表殼輪廓中的圓,確定圓心坐標后,再通過擬合求得表殼的中心線位置。本算法避免了大量的數值排序和迭代計算,大大提高了運算速度。最后,使用50 張擺放位置和角度隨機的手表殼載物盤作為實驗圖像,對本算法進行準確率驗證,從驗證結果可知,本算法對手表殼中心定位的準確率接近100%,完全能夠滿足實際生產的任務要求。