易子豐,孫 堅,鐘紹俊,孔紅紅
(中國計量學院 機電工程學院,浙江 杭州 310018)
機器視覺是在圖像處理的基礎上發(fā)展起來的新興科學,基于機器視覺的測量是一種非接觸測量技術,能夠實現(xiàn)測量的自動化。高精度測量的關鍵是攝像機測量系統(tǒng)的標定,在零件尺寸測量中,一般選用的是短焦距定焦光學鏡頭,而短焦距光學鏡頭的非線性徑向畸變是影響測量精度的主要因素,所以需要標定鏡頭的非線性畸變[1-2]。
標定后從圖像中提取特征點是圖像的一個重要的局部特征,它在保留了圖像中物體重要特征信息的同時又有效減少了信息的數(shù)據(jù)量,哈里斯角點提取方法首先定義某些算子,通過在灰度圖像上尋找該算子的極值提取特征點。在文獻[3]中提到,哈里斯角點提取方法是目前效果最好最穩(wěn)定的角點檢測算子,它對亮度變化和剛體幾何變換有很高的重復性。
OpenCV[4-5]是一個開源的計算機視覺庫,自1999年1月發(fā)布Alpha版本開始,它就在許多領域、產(chǎn)品和研究成果中廣泛應用,包括衛(wèi)星地圖和電子地圖的拼接、掃描圖像的對齊、醫(yī)學圖像去噪、制造業(yè)中的產(chǎn)品質量檢測系統(tǒng)以及攝像機標定等領域。
高精度零件角點距離測量研究所實現(xiàn)的檢測算法是基于開源的OpenCV。首先對攝像機進行標定,然后采用中值濾波等手段實現(xiàn)圖像預處理,最后采用哈里斯角點檢測和亞像素檢測方法獲取高精度角點位置。實驗結果表明,檢測精度高,檢測效果良好,為實際問題的解決提供了新的思路。
機器視覺中所測量的一般為近景,對于要快速生成圖像的攝像機而言,必須利用大面積且彎曲的透鏡,讓足夠多的光線能夠收斂聚焦到投影點上。透鏡可以聚焦足夠多的光線到某個點上,使得圖像的生成更加迅速,其代價就是引入了畸變[6]。徑向畸變和切向畸變?yōu)閮煞N主要的畸變[1]。對于徑向畸變,成像儀某點的徑向位置按下式進行調節(jié)

式中:(x,y)是畸變點在成像儀上的原始位置,(xcorrected,ycorrected)是校正后的新位置。k1和k2是徑向畸變的系數(shù)。切向畸變是由于透鏡制造上的缺陷使得透鏡本身與圖像平面不平行而產(chǎn)生的,可以用兩個額外參數(shù)p1和p2來描述

因此,k1,k2,k3和p1,p2構成了5個畸變參數(shù)。


參數(shù)s是一個任意尺度比例,H由用于定位觀察的物體平面的物理變換和使用攝像機內參數(shù)矩陣的投影兩部分組成。物理變換部分是與觀測到的圖像平面相關的部分旋轉R和部分平移t的影響之和。由于使用齊次坐標,可以把R和t組合到一個單一矩陣中

中值濾波主要實現(xiàn)過濾圖像中的噪聲,同時要保證圖像中接插件產(chǎn)品信息完整。二維中值濾波[7]取以目標像素為中心的一個子矩陣窗口,根據(jù)需要選取窗口大小,對窗口內的像素灰度排序,取中間的一個值作為目標像素的新灰度值,其特點是較好地保護圖像邊緣同時去除噪聲。
中值濾波的窗口有很多形狀,如矩形、菱形、圓形、十字形等,不同的窗口形狀有不同的濾波效果。對有緩慢且較長輪廓線的物體適合用矩形或圓形,對于有尖頂角的圖像適合采用十字形,針對角點的特點,需采用十字形中值濾波。
圖像預處理后,需提取有效的角點位置。首先定義二維哈里斯矩陣H(p)=。對于哈里斯角點,使用每點周圍小窗口的二階導數(shù)圖像的自相關矩陣,定義為

式中:wi,j是可以歸一化的權重比例;X=Ix(x+i,y+j),Y=Iy(x+i,y+j)。哈里斯定義的角點位置位于圖像二階導數(shù)的自相關矩陣有兩個最大特征值的地方。哈里斯最原始的定義是將矩陣H(p)的行列式與H(p)的跡相減,再將差值同預先給定的閾值進行比較。Shi和Tomasi提出了若兩個特征值中較小的一個大于最小閾值,則會得到強角點,改進的角點方法可以得到比原始哈里斯方法更好的結果[4]。
上述的角點檢測只能獲得像素的整數(shù)坐標值,對于高精度來說如果需要確定圖像中一個尖銳的峰值點位置,峰值的位置往往都不會恰好位于一個像素正中心。需要采用亞像素檢測方法,將求得的角點位置精確到亞像素級精度。
實際計算亞像素級的角點位置時,解的是一個點積表達式為0的方程組(如圖1的兩種情況,點積都為0),其中每一個方程都是由q鄰域的一個點產(chǎn)生。搜索窗口的中心是整數(shù)坐標值的角點,并從中心點在每個方向上擴展指定的像素。這些等式構成一個可用自相關矩陣的逆來求解的線性方程組。

每找到一個q的新位置,就需要以這個新的角點作為初始點進行迭代直到滿足定義的迭代終止條件。
OpenCV提供了很多攝像機標定及角點檢測方面的庫函數(shù),以Visual Studio 2005為軟件開發(fā)平臺,給出零件角點間距測量算法的流程框圖,如圖2所示。

讀取從相機中采集的多幅不同位置和角度的標準棋盤圖像,采用cvFind Chessboard Corners()函數(shù)對輸入的圖像進行篩選,選出符合標定用的圖像,并用cvDraw Chess?board Corners()函數(shù)在圖上畫出角點。用cvCalibra?tion Camera2()函數(shù)獲取攝像機的內外部參數(shù)和畸變系數(shù),并保存到相應的文檔中。調用攝像機的內外部參數(shù)、畸變系數(shù)文檔,采用cvRemap()函數(shù)矯正需要檢測的目標圖像。
對于矯正后的圖像,采用3×3中值濾波去除圖像噪聲。采用cvGood Feature To Track()函數(shù)尋找像素級的角點位置,確定像素級角點位置后,實現(xiàn)亞像素級角點位置確認,獲取亞像素角點坐標,根據(jù)采集的標準棋盤圖像,計算像素點間的實際距離值,獲取角點的距離。
依據(jù)本文闡述的角點間距測量原理和算法,在Visu?al Studio 2005環(huán)境下,調用OpenCV2.0庫函數(shù),開發(fā)了基于MFC對話框結構的亞
像素級的角點間距測量程序,程序經(jīng)過嚴格測試,運行穩(wěn)定,沒有出現(xiàn)內存泄露的情況。操作界面如圖3所示。
選取4×29的標準棋盤為標定目標,棋盤格子的寬度為0.1 cm。從不同的距離和角度,選取21幅656×492像素的圖像作為標定用圖。標定得到的內參數(shù)矩陣、鏡頭畸變系數(shù)如表1所示。


表1 標定得到的內參數(shù)矩陣和鏡頭畸變系數(shù)
選取合適的零件圖像,實現(xiàn)圖像矯正、圖像預處理、亞像素級角點檢測、角點間距測量。如圖4所示,選取角點的實際距離為1.4 cm的零件。

如圖4c,獲取零件角點坐標分別為(63.883 3,253.943 4)和(299.334 7,258.910 6),根據(jù)相機拍攝的標定板圖像可得每33.6個像素為0.2 cm,由此可得零件角點距離為1.401 808 cm,偏差為0.001 808 cm。
通過實驗和檢測結果的分析比較,這種基于OpenCV的高精度零件角點間距測量方法有效地提高了測量精度,在OpenCV中采用該角點檢測方法而編寫的檢測程序具有運算效率高、標定結果精度高、角點定位精度高、跨平臺移植性好等特性,可以有效地應用于其他計算機視覺系統(tǒng)中。
[1]高俊釵,雷志勇,王澤民.高精度測量的相機標定[J].電光與控制,2011,18(2):93-96.
[2]邱茂林,馬頌德,李毅.機器視覺中攝像機標定綜述[J].自動化學報,2000,26(1):43-55.
[3]SCHMID C,MOHR R,BAUCKHAGE C.Evaluation of interest point detectors[J].Iternational Journal of Computer Vision,2000,37(2):151-172.
[4]劉瑞禎,于仕琪.OpenCV教程:基礎篇[M].北京:北京航空航天大學出版社,2007.
[5]于仕琪,劉瑞禎.學習OpenCV[M].北京:清華大學出版社,2009.
[6]張云輝,譚慶昌,田原嫄.圖像測量系統(tǒng)精度影響因素的研究[J].微計算機信息,2008,24(8):271-273.
[7]王占全,徐慧.Visual C++數(shù)字圖像處理技術與工程案例[M].北京:人民郵電出版社,2009.
[8]李明金,熊顯名,張紹兵.一種基于OpenCV的攝像機標定新方法[J].激光與光電子學進展,2009,12:99-102.