,
(西安文理學(xué)院 陜西省表面工程與再制造實驗室,西安 710065)
傳統(tǒng)的零件測量方法多種多樣,包括卡尺測量、量規(guī)測量、輪廓儀測量、萬能工具顯微鏡、坐標(biāo)測量機等等,這些傳統(tǒng)的測量方法在過去的工業(yè)生產(chǎn)中扮演著重要的角色,但隨著現(xiàn)代化工業(yè)水平的提高,對零件生產(chǎn)加工的精度要求也越來越高,傳統(tǒng)的測量方法已經(jīng)不能夠滿足某些特定場景下的測量要求,例如卡尺、量規(guī)等操作簡單,但精度上達不到要求;萬能工具顯微鏡、坐標(biāo)測量機等精度較高,但受到適用環(huán)境的限制且操作過程繁瑣;此外不可避免的人工因素例如疲勞程度,專業(yè)技能的掌握程度等這些共同影響了零件測量的精度。同時傳統(tǒng)的測量方法在某些工業(yè)領(lǐng)域不能滿足實時檢測、實時控制的要求,隨著工業(yè)化進程的不斷推進,提高零件檢測技術(shù)的精度和效率是至關(guān)重要的一步。
圖像處理源于20世紀(jì)80年代,隨著計算機技術(shù)的迅速發(fā)展,圖像處理這一學(xué)科開始形成。早期的圖像處理主要用于改善圖像質(zhì)量以達到人眼的視覺要求,輸入低質(zhì)量的圖像,輸出符合人眼視覺效果的高質(zhì)量圖像。到了21世紀(jì),圖像處理技術(shù)也已經(jīng)被應(yīng)用到了工業(yè)檢測領(lǐng)域。如2009年史博等[1]在西安交通大學(xué)863計劃項目提出一種分層圖像識別算法,對有景深的零件進行在線監(jiān)測。2011年黃品松等[2]研究了加工零件圖像監(jiān)測數(shù)據(jù)處理與高精度檢測算法。2016年水恒華等[4]通過提取零件直線參數(shù)獲得了零件的像素空間尺寸。同時文獻[5-8]中有較多的碩博士展開進一步的高效算法及仿真軟件開發(fā)。但目前的研究針對于多輪廓、曲線形等圖像處理算法及高效算法仿真的應(yīng)用尚有差距。
本文針對數(shù)控加工中心多工序加工的需求,研究在線加工零件的多個圓形輪廓識別與尺寸算法。一方面,對采集的圖像進行預(yù)處理;第二方面,對處理后的圖像進行圖像邊緣增強;第三方面,查找圓并計算出各圓定形尺寸。同時將算法設(shè)計并實現(xiàn)了一個與用戶交互的MFC應(yīng)用程序。
圖像采集通常采用CCD攝像頭捕獲圖片,且有閃光燈同時開啟提高圖像質(zhì)量與對比度。其基本處理流程如圖1所示。
圖1 圖像處理流程
當(dāng)用戶在客戶端操作拍照時,系統(tǒng)就將這一時刻的實時畫面圖像保存到本地的指定文件夾中,后續(xù)處理的原始圖像就是該圖像。載入該圖像用到的是Opencv開源庫中的cvLoadImage函數(shù),Opencv可以處理的常見圖像文件格式有以下幾種:JPEG,JPG,JPE,PNG,BMP,DIB,PBM,PPM,PGM,RAS等,論文所拍攝的圖像格式均為JPG格式,載入的原圖與灰度圖對比如圖2所示。
圖2 被測零件采集圖片
對圖像進行預(yù)處理是圖像處理的必要環(huán)節(jié),目的是去除圖像中的干擾因素,主要包括顏色、空間變換和去噪處理。常用的圖像噪聲主要有高斯噪聲以及脈沖噪聲,去除圖像中的噪聲,即濾波處理。濾波處理是一種簡單并且實用的預(yù)處理方式,常用于減少圖像中的噪點,是一種線性平滑濾波。
1)高斯濾波。
高斯濾波的原理就是對整個圖像進行加權(quán)平均,根據(jù)每個點的像素值,由該點以及該點的鄰域內(nèi)的其他點的像素值通過加權(quán)平均得到。具體操作是:用一個模板對圖像中的每個像素點進行掃描,用模板所確定的鄰域內(nèi)的所有像素點的加權(quán)平均灰度值去代替模板中心點的像素值。其直觀效果就好比隔著一塊毛玻璃觀察圖像。從數(shù)學(xué)角度來說,該過程就是用圖像與正態(tài)分布(高斯分布)作卷積,故稱這種濾波方式為高斯濾波。由于正態(tài)分布函數(shù)的傅里葉變換也是正態(tài)分布函數(shù),所以高斯濾波對于圖像來說是一種低通濾波。
高斯濾波用于抑制服從正態(tài)分布的噪聲(高斯噪聲)的效果是非常好的,對于圖像處理而言,一般用二維0均值離散正態(tài)分布函數(shù)作為濾波器。二維正態(tài)分布函數(shù)為式(1)。
(1)
基于上述濾波器函數(shù),在Opencv中,GaussianBlur函數(shù)就是用高斯濾波器來對圖片進行濾波操作。函數(shù)聲明如下:
void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
double sigmaX, double sigmaY=0,
int borderType=BORDER_DEFAULT);
參數(shù)說明:
①InputArray類型src參數(shù),表示待處理的源圖像,通常傳入Mat類對象。
②OutputArray類型dst參數(shù),表示生成的最終目標(biāo)圖像,要跟待處理的源圖像有相同的尺寸和類型,為了保證這一要求,一般可以采用Mat:Clone函數(shù),以待處理的源圖像為模板初始化目標(biāo)圖像。
③Size類型ksize參數(shù),包含ksize.width和ksize.height,分別表示寬度和高度,用來描述所需要用到的高斯核的大小,寬度和高度可以不一樣,但是必須是正奇數(shù)或者0。
④兩個double類型sigmaX和sigmaY參數(shù)。分別表示高斯核函數(shù)在x方向和y方向的標(biāo)準(zhǔn)偏差。
⑤int類型borderType參數(shù),帶有默認(rèn)值BORDER_DEFAULT,通常不需要用到。
2)均值濾波。
均值濾波是一種線性濾波方式,采用了鄰域平均算法,算法描述如下:用某塊面積內(nèi)的所有像素點的像素平均值來替換這塊面積中各個像素點的像素值,可以達到像素模糊的目的。通常實現(xiàn)這一算法的方式是采用一個模板,用該模板在圖像上進行掃描,掃描到某個位置時,就將模板內(nèi)除去某個點,一般為模板中心點以外的所有點的像素值替換為該模板內(nèi)所有像素點的平均值,最后再將該點的像素值替換為平均值。但是這樣的一種簡單的濾波方式也存在一定的缺陷,它不能有效保護圖像的細(xì)節(jié)特征,噪點跟圖像的細(xì)節(jié)特征同時被模糊了。
在Opencv中,blur函數(shù)就是用均值濾波器來對圖片進行濾波操作。從式(2)表達就可看出其操作就是求均值。
(2)
函數(shù)聲明如下:
void blur(InputArray src, OutputArraydst, Size ksize,
Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT ) ;
參數(shù)說明:
①InputArray類型src參數(shù),表示待處理的源圖像,通常傳入Mat類對象。
②OutputArray類型dst參數(shù),表示生成的最終目標(biāo)圖像,要跟待處理的源圖像有相同的尺寸和類型,為了保證這一要求,一般可以采用Mat::Clone函數(shù),以待處理的源圖像為模板初始化目標(biāo)圖像。
③Size類型ksize參數(shù),包含ksize.width和ksize.height,分別表示寬度和高度,用來描述所需要用到的高斯核的大小,寬度和高度可以不一樣,但是必須是正奇數(shù)或者0。
④Point類型anchor參數(shù),帶有默認(rèn)參數(shù)Point(-1,-1),表示默認(rèn)以模板中心點的鄰域去進行濾波處理。
⑤int類型borderType參數(shù),帶有默認(rèn)值BORDER_DEFAULT ,通常不需要用到。
兩種濾波方式都是通過像素分布函數(shù)的方式進行濾波,本論文通過實驗對比的方式,對兩種不同的濾波方式在處理本論文所研究的問題上效果的差別,將兩種濾波方式處理的正反面零件輪廓圖進行對比,確定較優(yōu)的濾波方式,兩種方案下的處理效果如圖3至圖4所示。
圖3 零件正面濾波效果對比
圖4 零件反面濾波效果對比
通過對比均值濾波與高斯濾波最終處理的正反面效果圖不難發(fā)現(xiàn),均值濾波在正面的尺寸檢測中出現(xiàn)了明顯的偏差,因而針對本論文所研究的對象,高斯濾波要優(yōu)于均值濾波,故選用高斯濾波。
在確定了濾波方式為高斯濾波后,對高斯核的大小確定采用同樣的方法。分別采用3×3、5×5的高斯核試驗進行對比,效果如圖5所示。
圖5 高斯核效果圖
從3×3高斯核效果圖與5×5高斯核效果圖中不難看出,相對于3×3的高斯核而言,5×5高斯核的處理效果要更好一些。故選用5×5高斯核進行高斯濾波。
綜上所述,本文圖像處理最終采用的濾波方式為高斯濾波,所選用的濾波模板的大小為5×5的高斯核。
在經(jīng)過預(yù)處理后的圖像中,圖像噪聲已經(jīng)被大大降低了,這樣的圖像已經(jīng)初步滿足了下一步的輪廓提取以及尺寸計算處理的要求。從直觀的視覺效果上來看,預(yù)處理后的圖像變得“模糊了”,因此高斯濾波也稱為高斯模糊,原圖中的微弱噪點,經(jīng)過這樣“模糊”處理后就幾乎不存在了,這樣的預(yù)處理目的是為了保證下一步的邊緣(輪廓)檢測準(zhǔn)確性,原圖像是不能直接用于邊緣檢測的,因為圖像邊緣檢測算法是基于圖像強度的一階導(dǎo)數(shù)、二階導(dǎo)數(shù)。由于噪聲對一階導(dǎo)數(shù)和二階導(dǎo)數(shù)的影響是非常大的,所以必須使用濾波的手段來降低噪聲對邊緣檢測的影響,這也正是預(yù)處理必須進行濾波的具體原因所在。
在圖像輪廓增強前,本文將輪廓信息提取了出來,將提取出來的輪廓信息圖與預(yù)處理后的灰度圖進行加權(quán)處理,對預(yù)處理后的灰度圖像中的輪廓細(xì)節(jié)信息進行增強。輪廓增強后的圖像與原灰度圖像的對比如圖6所示。在Opencv中,提供給開發(fā)者的加權(quán)操作的函數(shù)聲明如下:
void addWeighted(InputArray src1, double alpha,
InputArray src2, double beta,
double gamma, OutputArray dst, int dtype=-1);
對圖像輪廓進行增強后的任務(wù)就是對增強的輪廓信息進行提取。針對本論文所研究的零件的具體操作就是查找出零件圖像中的所有圓并計算各圓的尺寸,因此采設(shè)計了Hough圓檢測的方式,進行零件圖像中的圓查找。
Opencv為開發(fā)者提供的霍夫圓變換函數(shù)聲明如下:
void HoughCircles(InputArray image,OutputArray circles,
int method, double dp, double minDist,
double param1=100,double param2=100,
int minRadius=0, int maxRadius=0 );
通過該函數(shù)變換即可找到圓心和半徑,然后通過自定義的draw_circles函數(shù)即可在原灰度圖中畫出圓心及輪廓。自定義draw_circle函數(shù)實現(xiàn):
void draw_circles(Mat &image, vector
{
for( size_t i = 0; i < circles.size(); i++ )
{
//提取出圓心坐標(biāo)
Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
//提取出圓半徑 , int &tmp_radius
int radius = cvRound(circles[i][2]);
Vec_int.push_back(radius);
//圓心 、圓心
circle(image, center, 2, Scalar(0,255,0), -1, 8, 0 );
circle(image, center, radius, Scalar(0,0,255), 3, 8, 0 );
}
return ;
}
自定義的draw_circles()有兩個參數(shù),第一個參數(shù)傳入所要畫出輪廓的圖像,第二個參數(shù)傳入霍夫圓變換函數(shù)的circles參數(shù),畫出的輪廓效果圖如圖7所示。
圖7 圓形輪廓檢測結(jié)果
輪廓提取后的最后一個關(guān)鍵工作就是計算各幾何輪廓的尺寸。因為拍攝圖片大小受攝像頭距離工件遠(yuǎn)近及角度誤差的影響較大,本文采用的是當(dāng)前零件標(biāo)定法,即在計算各輪廓圓的尺寸時采用的是實際尺寸比與像素比的比值權(quán)值進行計算。如在已知最外圓輪廓的半徑后,將霍夫圓變換中用于保存像素半徑的circles中的最外側(cè)大圓輪廓像素提取進行比值權(quán)值計算,其他小圓像素半徑信息提取出來,通過此比值權(quán)值即可計算出實際其他小圓的輪廓半徑。實際使用中只要攝像頭與被測零件距離及垂直角度固定,一次標(biāo)定就可。
上述算法在Visual Studio 2013集成環(huán)境開發(fā)平臺下利用了MFC設(shè)計并實現(xiàn)了windows下的用戶交互界面。界面UI中使用了靜態(tài)文本控件,文字編輯控件,按鈕控件,圖片顯示控件等,如圖8所示。僅僅有控件只能產(chǎn)生視覺上的效果,為了使控件工作,還需要進行下一步的操作,添加響應(yīng)函數(shù),給這些控件分配各自的處理任務(wù)。
圖8 界面UI圖
測試實驗是將CCD攝像頭安裝于機床主軸箱外有殼體保護,同時配有固定光源,以保證零件曝光的穩(wěn)定。該采集裝置的工作流程如下:當(dāng)零件加工完部分工序置于工作臺上時,主軸停轉(zhuǎn)切削液停止,氣槍吹干凈零件表面油污后,位于裝置內(nèi)部的攝像頭即可對該零件進行實時監(jiān)測,并需要將當(dāng)前的實時畫面反饋到用戶客戶端時,用戶客戶端可根據(jù)實時畫面選擇“拍照”進行圖像采集。
在圖8的操控界面下,系統(tǒng)首先確定“選取攝像頭”,即圖像的通道數(shù)在此設(shè)置為0,后用戶點擊“拍照”按鈕,這一時刻的實時畫面圖像將保存到本地的指定文件夾中,后續(xù)處理的原始圖像就是該圖像。此時載入該圖像用到的是Opencv開源庫中的cvLoadImage函數(shù),該函數(shù)用于從文件中讀取圖像,有兩個入?yún)ⅲ簣D像通道數(shù)和文件名。圖像的通道數(shù)有3種入?yún)⑦x擇,第一種傳入大于0的參數(shù)時,以3通道彩色圖像方式載入該圖像;第二種傳入小于0的參數(shù)時,以保持圖片本身不變的方式載入圖像;第三種傳入0時,以單通道灰度圖像的方式載入。文件名即需要被讀取的文件名,本論文中即代碼目錄下的front_image以及reverse_image文件夾,所拍攝的零件圖像就保存于這兩個文件夾中。由于本論文主要采取的方法是對灰度圖像進行處理,所以在載入圖像時的通道設(shè)置為參數(shù)0,即單通道灰度圖像。
對應(yīng)的圖形處理算法運行效果如圖9中各部分信息所示,圖中將圖像輪廓加強顯示,按照尺寸算法計算,同時顯示操作面板及幾何尺寸。最后數(shù)據(jù)采集結(jié)果對比實物人工測量,經(jīng)過內(nèi)徑千分尺實際測量對比圖中5個內(nèi)孔尺寸驗證,所計算出圓的半徑精度平均達到了±0.01 mm。
圖9 圖像處理算法仿真運行結(jié)果圖
本文針對在生產(chǎn)制造過程中對加工零件的在線檢測需求,具體以圓形零件為例進行圖像處理與輪廓提取研究。通過對圖像預(yù)處理的兩種不同濾波方式的對比研究,提出效果較好的高斯濾波算法,并設(shè)計了圖像輪廓增強算法、Hough圓的查找方法、圖像幾何輪廓尺寸算法。然后基于MFC編程框架開發(fā)了相應(yīng)的檢測程序,設(shè)計了簡單易用的圖形化界面,該圖像處理軟件搭載CCD攝像頭實現(xiàn)了在線加工零件的圖像采集。最后通過該圖像處理軟件實驗分析,論證了圖像輪廓增強對于輪廓提取的重要性及上述各算法的有效性。
[1] 史 博,汪 霖,曹建福. 立體零件加工質(zhì)量的在線圖像檢測方法[J]. 儀器儀表學(xué)報,2009,30(10):2039-2042.
[2] 黃品松,徐 杜,蔣永平,等. 零件尺寸圖像檢測數(shù)據(jù)處理與高精度檢測方法[J]. 計算機系統(tǒng)應(yīng)用,2011,20(9):248-250.
[3] 耿春明、蔡東寶. 基于計算機視覺的機械零件檢測系統(tǒng)設(shè)計[J]. 計算機測量與控制,2012,20(1):38-40.
[4] 水恒華,趙 永,李 剛,等. 基于圖像處理的在線零部件檢測技術(shù)[J]. 上海電力學(xué)院學(xué)報,2016,32(6):574-577.
[5] 張道德. 機械零件圖像識別的關(guān)鍵技術(shù)研究與實現(xiàn)[D]. 武漢:華中科技大學(xué),2008.
[6] 田小娟. 基于圖像識別的零件幾何量檢測[D]. 西安:西安工業(yè)大學(xué),2009.
[7] 施 超. 基于計算機視覺的零配件監(jiān)測系統(tǒng)研究與應(yīng)用[D]. 長春:吉林大學(xué),2014.
[8] 梁中源. 基于圖像識別的零件在線自動監(jiān)測系統(tǒng)[D]. 濟南:山東科技大學(xué),2016.
[9] Zhang Wei, Liu Hantao. Learning picture quality from visual distraction: Psychophysical studies and computational models[J]. Neurocomputing, 247 (2017) 183-191.
[10] Arun Mohan , Sumathi Poobal. Crack detection using image processing: A critical review and analysis[J]. Alexandria Engineering Journal, (2017) 1-12.