易子豐,孫 堅(jiān),鐘紹俊,孔紅紅
(中國計(jì)量學(xué)院 機(jī)電工程學(xué)院,浙江 杭州 310018)
機(jī)器視覺是在圖像處理的基礎(chǔ)上發(fā)展起來的新興科學(xué),基于機(jī)器視覺的測量是一種非接觸測量技術(shù),能夠?qū)崿F(xiàn)測量的自動(dòng)化。高精度測量的關(guān)鍵是攝像機(jī)測量系統(tǒng)的標(biāo)定,在零件尺寸測量中,一般選用的是短焦距定焦光學(xué)鏡頭,而短焦距光學(xué)鏡頭的非線性徑向畸變是影響測量精度的主要因素,所以需要標(biāo)定鏡頭的非線性畸變[1-2]。
標(biāo)定后從圖像中提取特征點(diǎn)是圖像的一個(gè)重要的局部特征,它在保留了圖像中物體重要特征信息的同時(shí)又有效減少了信息的數(shù)據(jù)量,哈里斯角點(diǎn)提取方法首先定義某些算子,通過在灰度圖像上尋找該算子的極值提取特征點(diǎn)。在文獻(xiàn)[3]中提到,哈里斯角點(diǎn)提取方法是目前效果最好最穩(wěn)定的角點(diǎn)檢測算子,它對(duì)亮度變化和剛體幾何變換有很高的重復(fù)性。
OpenCV[4-5]是一個(gè)開源的計(jì)算機(jī)視覺庫,自1999年1月發(fā)布Alpha版本開始,它就在許多領(lǐng)域、產(chǎn)品和研究成果中廣泛應(yīng)用,包括衛(wèi)星地圖和電子地圖的拼接、掃描圖像的對(duì)齊、醫(yī)學(xué)圖像去噪、制造業(yè)中的產(chǎn)品質(zhì)量檢測系統(tǒng)以及攝像機(jī)標(biāo)定等領(lǐng)域。
高精度零件角點(diǎn)距離測量研究所實(shí)現(xiàn)的檢測算法是基于開源的OpenCV。首先對(duì)攝像機(jī)進(jìn)行標(biāo)定,然后采用中值濾波等手段實(shí)現(xiàn)圖像預(yù)處理,最后采用哈里斯角點(diǎn)檢測和亞像素檢測方法獲取高精度角點(diǎn)位置。實(shí)驗(yàn)結(jié)果表明,檢測精度高,檢測效果良好,為實(shí)際問題的解決提供了新的思路。
機(jī)器視覺中所測量的一般為近景,對(duì)于要快速生成圖像的攝像機(jī)而言,必須利用大面積且彎曲的透鏡,讓足夠多的光線能夠收斂聚焦到投影點(diǎn)上。透鏡可以聚焦足夠多的光線到某個(gè)點(diǎn)上,使得圖像的生成更加迅速,其代價(jià)就是引入了畸變[6]。徑向畸變和切向畸變?yōu)閮煞N主要的畸變[1]。對(duì)于徑向畸變,成像儀某點(diǎn)的徑向位置按下式進(jìn)行調(diào)節(jié)
式中:(x,y)是畸變點(diǎn)在成像儀上的原始位置,(xcorrected,ycorrected)是校正后的新位置。k1和k2是徑向畸變的系數(shù)。切向畸變是由于透鏡制造上的缺陷使得透鏡本身與圖像平面不平行而產(chǎn)生的,可以用兩個(gè)額外參數(shù)p1和p2來描述
因此,k1,k2,k3和p1,p2構(gòu)成了5個(gè)畸變參數(shù)。
參數(shù)s是一個(gè)任意尺度比例,H由用于定位觀察的物體平面的物理變換和使用攝像機(jī)內(nèi)參數(shù)矩陣的投影兩部分組成。物理變換部分是與觀測到的圖像平面相關(guān)的部分旋轉(zhuǎn)R和部分平移t的影響之和。由于使用齊次坐標(biāo),可以把R和t組合到一個(gè)單一矩陣中
中值濾波主要實(shí)現(xiàn)過濾圖像中的噪聲,同時(shí)要保證圖像中接插件產(chǎn)品信息完整。二維中值濾波[7]取以目標(biāo)像素為中心的一個(gè)子矩陣窗口,根據(jù)需要選取窗口大小,對(duì)窗口內(nèi)的像素灰度排序,取中間的一個(gè)值作為目標(biāo)像素的新灰度值,其特點(diǎn)是較好地保護(hù)圖像邊緣同時(shí)去除噪聲。
中值濾波的窗口有很多形狀,如矩形、菱形、圓形、十字形等,不同的窗口形狀有不同的濾波效果。對(duì)有緩慢且較長輪廓線的物體適合用矩形或圓形,對(duì)于有尖頂角的圖像適合采用十字形,針對(duì)角點(diǎn)的特點(diǎn),需采用十字形中值濾波。
圖像預(yù)處理后,需提取有效的角點(diǎn)位置。首先定義二維哈里斯矩陣H(p)=。對(duì)于哈里斯角點(diǎn),使用每點(diǎn)周圍小窗口的二階導(dǎo)數(shù)圖像的自相關(guān)矩陣,定義為
式中:wi,j是可以歸一化的權(quán)重比例;X=Ix(x+i,y+j),Y=Iy(x+i,y+j)。哈里斯定義的角點(diǎn)位置位于圖像二階導(dǎo)數(shù)的自相關(guān)矩陣有兩個(gè)最大特征值的地方。哈里斯最原始的定義是將矩陣H(p)的行列式與H(p)的跡相減,再將差值同預(yù)先給定的閾值進(jìn)行比較。Shi和Tomasi提出了若兩個(gè)特征值中較小的一個(gè)大于最小閾值,則會(huì)得到強(qiáng)角點(diǎn),改進(jìn)的角點(diǎn)方法可以得到比原始哈里斯方法更好的結(jié)果[4]。
上述的角點(diǎn)檢測只能獲得像素的整數(shù)坐標(biāo)值,對(duì)于高精度來說如果需要確定圖像中一個(gè)尖銳的峰值點(diǎn)位置,峰值的位置往往都不會(huì)恰好位于一個(gè)像素正中心。需要采用亞像素檢測方法,將求得的角點(diǎn)位置精確到亞像素級(jí)精度。
實(shí)際計(jì)算亞像素級(jí)的角點(diǎn)位置時(shí),解的是一個(gè)點(diǎn)積表達(dá)式為0的方程組(如圖1的兩種情況,點(diǎn)積都為0),其中每一個(gè)方程都是由q鄰域的一個(gè)點(diǎn)產(chǎn)生。搜索窗口的中心是整數(shù)坐標(biāo)值的角點(diǎn),并從中心點(diǎn)在每個(gè)方向上擴(kuò)展指定的像素。這些等式構(gòu)成一個(gè)可用自相關(guān)矩陣的逆來求解的線性方程組。
每找到一個(gè)q的新位置,就需要以這個(gè)新的角點(diǎn)作為初始點(diǎn)進(jìn)行迭代直到滿足定義的迭代終止條件。
OpenCV提供了很多攝像機(jī)標(biāo)定及角點(diǎn)檢測方面的庫函數(shù),以Visual Studio 2005為軟件開發(fā)平臺(tái),給出零件角點(diǎn)間距測量算法的流程框圖,如圖2所示。
讀取從相機(jī)中采集的多幅不同位置和角度的標(biāo)準(zhǔn)棋盤圖像,采用cvFind Chessboard Corners()函數(shù)對(duì)輸入的圖像進(jìn)行篩選,選出符合標(biāo)定用的圖像,并用cvDraw Chess?board Corners()函數(shù)在圖上畫出角點(diǎn)。用cvCalibra?tion Camera2()函數(shù)獲取攝像機(jī)的內(nèi)外部參數(shù)和畸變系數(shù),并保存到相應(yīng)的文檔中。調(diào)用攝像機(jī)的內(nèi)外部參數(shù)、畸變系數(shù)文檔,采用cvRemap()函數(shù)矯正需要檢測的目標(biāo)圖像。
對(duì)于矯正后的圖像,采用3×3中值濾波去除圖像噪聲。采用cvGood Feature To Track()函數(shù)尋找像素級(jí)的角點(diǎn)位置,確定像素級(jí)角點(diǎn)位置后,實(shí)現(xiàn)亞像素級(jí)角點(diǎn)位置確認(rèn),獲取亞像素角點(diǎn)坐標(biāo),根據(jù)采集的標(biāo)準(zhǔn)棋盤圖像,計(jì)算像素點(diǎn)間的實(shí)際距離值,獲取角點(diǎn)的距離。
依據(jù)本文闡述的角點(diǎn)間距測量原理和算法,在Visu?al Studio 2005環(huán)境下,調(diào)用OpenCV2.0庫函數(shù),開發(fā)了基于MFC對(duì)話框結(jié)構(gòu)的亞
像素級(jí)的角點(diǎn)間距測量程序,程序經(jīng)過嚴(yán)格測試,運(yùn)行穩(wěn)定,沒有出現(xiàn)內(nèi)存泄露的情況。操作界面如圖3所示。
選取4×29的標(biāo)準(zhǔn)棋盤為標(biāo)定目標(biāo),棋盤格子的寬度為0.1 cm。從不同的距離和角度,選取21幅656×492像素的圖像作為標(biāo)定用圖。標(biāo)定得到的內(nèi)參數(shù)矩陣、鏡頭畸變系數(shù)如表1所示。
表1 標(biāo)定得到的內(nèi)參數(shù)矩陣和鏡頭畸變系數(shù)
選取合適的零件圖像,實(shí)現(xiàn)圖像矯正、圖像預(yù)處理、亞像素級(jí)角點(diǎn)檢測、角點(diǎn)間距測量。如圖4所示,選取角點(diǎn)的實(shí)際距離為1.4 cm的零件。
如圖4c,獲取零件角點(diǎn)坐標(biāo)分別為(63.883 3,253.943 4)和(299.334 7,258.910 6),根據(jù)相機(jī)拍攝的標(biāo)定板圖像可得每33.6個(gè)像素為0.2 cm,由此可得零件角點(diǎn)距離為1.401 808 cm,偏差為0.001 808 cm。
通過實(shí)驗(yàn)和檢測結(jié)果的分析比較,這種基于OpenCV的高精度零件角點(diǎn)間距測量方法有效地提高了測量精度,在OpenCV中采用該角點(diǎn)檢測方法而編寫的檢測程序具有運(yùn)算效率高、標(biāo)定結(jié)果精度高、角點(diǎn)定位精度高、跨平臺(tái)移植性好等特性,可以有效地應(yīng)用于其他計(jì)算機(jī)視覺系統(tǒng)中。
[1]高俊釵,雷志勇,王澤民.高精度測量的相機(jī)標(biāo)定[J].電光與控制,2011,18(2):93-96.
[2]邱茂林,馬頌德,李毅.機(jī)器視覺中攝像機(jī)標(biāo)定綜述[J].自動(dòng)化學(xué)報(bào),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教程:基礎(chǔ)篇[M].北京:北京航空航天大學(xué)出版社,2007.
[5]于仕琪,劉瑞禎.學(xué)習(xí)OpenCV[M].北京:清華大學(xué)出版社,2009.
[6]張?jiān)戚x,譚慶昌,田原嫄.圖像測量系統(tǒng)精度影響因素的研究[J].微計(jì)算機(jī)信息,2008,24(8):271-273.
[7]王占全,徐慧.Visual C++數(shù)字圖像處理技術(shù)與工程案例[M].北京:人民郵電出版社,2009.
[8]李明金,熊顯名,張紹兵.一種基于OpenCV的攝像機(jī)標(biāo)定新方法[J].激光與光電子學(xué)進(jìn)展,2009,12:99-102.