0 引言
機器視覺是在圖像處理的基礎上發展起來的新興科學,基于機器視覺的測量是一種非接觸測量技術,能夠實現測量的自動化。高精度測量的關鍵是攝像機測量系統的標定,在零件尺寸測量中,一般選用的是短焦距定焦光學鏡頭,而短焦距光學鏡頭的非線性徑向畸變是影響測量精度的主要因素,所以需要標定鏡頭的非線性畸變[1-2]。
標定后從圖像中提取特征點是圖像的一個重要的局部特征,它在保留了圖像中物體重要特征信息的同時又有效減少了信息的數據量,哈里斯角點提取方法首先定義某些算子,通過在灰度圖像上尋找該算子的極值提取特征點。在文獻[3]中提到,哈里斯角點提取方法是目前效果最好最穩定的角點檢測算子,它對亮度變化和剛體幾何變換有很高的重復性。
OpenCV[4-5]是一個開源的計算機視覺庫,自1999年1月發布Alpha版本開始,它就在許多領域、產品和研究成果中廣泛應用,包括衛星地圖和電子地圖的拼接、掃描圖像的對齊、醫學圖像去噪、制造業中的產品質量檢測系統以及攝像機標定等領域。
高精度零件角點距離測量研究所實現的檢測算法是基于開源的OpenCV。首先對攝像機進行標定,然后采用中值濾波等手段實現圖像預處理,最后采用哈里斯角點檢測和亞像素檢測方法獲取高精度角點位置。實驗結果表明,檢測精度高,檢測效果良好,為實際問題的解決提供了新的思路。
1 攝像機標定
1.1 透鏡畸變參數
機器視覺中所測量的一般為近景,對于要快速生成圖像的攝像機而言,必須利用大面積且彎曲的透鏡,讓足夠多的光線能夠收斂聚焦到投影點上。透鏡可以聚焦足夠多的光線到某個點上,使得圖像的生成更加迅速,其代價就是引入了畸變[6]。徑向畸變和切向畸變為兩種主要的畸變[1]。對于徑向畸變,成像儀某點的徑向位置按下式進行調節
xcorrected = x(1+k1r 2 + k2r 4 + k3r 6) (1)
ycorrected = y (1+ k1r 2 + k2r 4 + k3r 6)
式中:(x,y)是畸變點在成像儀上的原始位置,(xcorrected, ycorrected)是校正后的新位置。k1和k2是徑向畸變的系數。切向畸變是由于透鏡制造上的缺陷使得透鏡本身與圖像平面不平行而產生的,可以用兩個額外參數p1和p2來描述
xcorrected = x +[2p1 y + p2(r 2 +2x 2)] (3)
ycorrected = y +[ p1(r 2 +2y 2)+2p2x] (4)
因此,k1,k2,k3和p1,p2構成了5個畸變參數。
1.2 攝像機參數[5]
一個二維平面上的點映射到攝像機成像儀上的映射體現了平面的單應性,如果對點E到成像儀上的點e 的映射使用齊次坐標,這種映射可以用矩陣相乘的方式表達。定義E ~ =[X Y Z 1]T ,e~ =[x y 1]T 。則可以把單應性簡單表示為
e~= sH E ~(5)
參數s 是一個任意尺度比例,H由用于定位觀察的物體平面的物理變換和使用攝像機內參數矩陣的投影兩部分組成。物理變換部分是與觀測到的圖像平面相關的部分旋轉R和部分平移t 的影響之和。由于使用齊次坐標,可以把R和t組合到一個單一矩陣中
W=[R t ] (6)
2 中值濾波
中值濾波主要實現過濾圖像中的噪聲,同時要保證圖像中接插件產品信息完整。二維中值濾波[7]取以目標像素為中心的一個子矩陣窗口,根據需要選取窗口大小,對窗口內的像素灰度排序,取中間的一個值作為目標像素的新灰度值,其特點是較好地保護圖像邊緣同時去除噪聲。
中值濾波的窗口有很多形狀,如矩形、菱形、圓形、十字形等,不同的窗口形狀有不同的濾波效果。對有緩慢且較長輪廓線的物體適合用矩形或圓形,對于有尖頂角的圖像適合采用十字形,針對角點的特點,需采用十字形中值濾波。
3 提取角點和亞像素檢測
3.1 角點提取
圖像預處理后,需提取有效的角點位置。首先定義
式中:wi,j是可以歸一化的權重比例;X = Ix (x + i,y + j ) , Y = Iy (x + i,y + j ) 。哈里斯定義的角點位置位于圖像二階導數的自相關矩陣有兩個最大特征值的地方。哈里斯最原始的定義是將矩陣H(p)的行列式與H(p)的跡相減,再將差值同預先給定的閾值進行比較。Shi和Tomasi提出了若兩個特征值中較小的一個大于最小閾值,則會得到強角點,改進的角點方法可以得到比原始哈里斯方法更好的結果[4]。
3.2 亞像素檢測
上述的角點檢測只能獲得像素的整數坐標值,對于高精度來說如果需要確定圖像中一個尖銳的峰值點位置,峰值的位置往往都不會恰好位于一個像素正中心。需要采用亞像素檢測方法,將求得的角點位置精確到亞像素級精度。
實際計算亞像素級的角點位置時,解的是一個點積表達式為0的方程組(如圖1的兩種情況,點積都為0),其中每一個方程都是由q 鄰域的一個點產生。搜索窗口的中心是整數坐標值的角點,并從中心點在每個方向上擴展指定的像素。這些等式構成一個可用自相關矩陣的逆來求解的線性方程組。
每找到一個q 的新位置,就需要以這個新的角點作為初始點進行迭代直到滿足定義的迭代終止條件。
4 OpenCV零件角點距離
測量實現OpenCV提供了很多攝像機標定及角點檢測方面的庫函數,以Visual Studio 2005為軟件開發平臺,給出零件角點間距測量算法的流程框圖,如圖2所示。
讀取從相機中采集的多幅不同位置和角度的標準棋盤圖像,采用cvFindChessboardCorners( )函數對輸入的圖像進行篩選,選出符合標定用的圖像,并用cvDrawChess?boardCorners( ) 函數在圖上畫出角點。用cvCalibra?數,并保存到相應的文檔中。調用攝像機的內外部參數、畸變系數文檔,采用cvRemap( )函數矯正需要檢測的目標圖像。
對于矯正后的圖像,采用3×3中值濾波去除圖像噪聲。采用cvGoodFeatureToTrack( )函數尋找像素級的角點位置,確定像素級角點位置后,實現亞像素級角點位置確認,獲取亞像素角點坐標,根據采集的標準棋盤圖像,計算像素點間的實際距離值,獲取角點的距離。
5 實驗和結果分析
依據本文闡述的角點間距測量原理和算法,在Visu?al Studio 2005環境下,調用OpenCV2.0 庫函數,開發了基于MFC 對話框結構的亞像素級的角點間距測量程序,程序經過嚴格測試,運行穩定,沒有出現內存泄露的情況。操作界面如圖3所示。
選取4×29的標準棋盤為標定目標,棋盤格子的寬度為0.1 cm。從不同的距離和角度,選取21幅656×492像素的圖像作為標定用圖。標定得到的內參數矩陣、鏡頭畸變系數如表1所示。
(xui,yui )為用圖像處理得到的標定點像素坐標經過一系列變換得到的圖像物理坐標的理想坐標,(xi,yi )為世界坐標的點經過投影得到的理想狀況下圖像物理坐標系下的坐標。
選取合適的零件圖像,實現圖像矯正、圖像預處理、亞像素級角點檢測、角點間距測量。如圖4所示,選取角點的實際距離為1.4 cm的零件。
如圖4c,獲取零件角點坐標分別為(63.883 3,253.943 4)和(299.334 7,258.910 6),根據相機拍攝的標定板圖像可得每33.6個像素為0.2 cm,由此可得零件角點距離為1.401 808 cm,偏差為0.001 808 cm。
6 小結
通過實驗和檢測結果的分析比較,這種基于OpenCV的高精度零件角點間距測量方法有效地提高了測量精度,在OpenCV中采用該角點檢測方法而編寫的檢測程序具有運算效率高、標定結果精度高、角點定位精度高、跨平臺移植性好等特性,可以有效地應用于其他計算機視覺系統中。
如果您有機床行業、企業相關新聞稿件發表,或進行資訊合作,歡迎聯系本網編輯部, 郵箱:skjcsc@vip.sina.com