陳凱歌,韓曉軍,張 宇,杜云飛
(1.天津工業(yè)大學(xué) 電子與信息工程學(xué)院,天津 300387;2.天津工業(yè)大學(xué) 理學(xué)院,天津 300387)
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,計(jì)算機(jī)視覺已成為計(jì)算機(jī)領(lǐng)域中的熱門研究課題之一.利用相機(jī)采集圖像再結(jié)合圖像處理和機(jī)器視覺等基礎(chǔ)知識(shí)進(jìn)行幾何體相關(guān)參數(shù)視覺測量的技術(shù), 已經(jīng)在現(xiàn)實(shí)生活中得到廣泛的應(yīng)用.在進(jìn)行視覺測量工作之前,首先要對攝像頭進(jìn)行標(biāo)定,因?yàn)橄鄼C(jī)標(biāo)定精度在很大程度上決定了視覺測量的精度.標(biāo)定就是要計(jì)算出攝像頭的標(biāo)定內(nèi)外參數(shù)以及畸變參數(shù)[1],其結(jié)果可以找出世界坐標(biāo)和圖像坐標(biāo)之間的變換關(guān)系,所以尋找標(biāo)定點(diǎn)的圖像坐標(biāo)是相機(jī)標(biāo)定的重要環(huán)節(jié).由于角點(diǎn)包含了被識(shí)別物重要的幾何參數(shù)信息,而在相機(jī)標(biāo)定中需要利用到黑白棋盤格圖片,所以利用角點(diǎn)檢測獲取檢測黑白棋盤格圖像中的角點(diǎn),從而可以獲取特征點(diǎn)的像素坐標(biāo),為相機(jī)參數(shù)標(biāo)定提供了已知條件.
在計(jì)算機(jī)視覺領(lǐng)域中,角點(diǎn)檢測技術(shù)可以大致分為兩大類:一類是基于圖像邊緣信息如基于邊界鏈碼和小波變換模的角點(diǎn)檢測算法[2];另一類是基于圖像灰度信息如Harris(哈里斯)算法[3]的角點(diǎn)檢測技術(shù).第一類算法在角點(diǎn)檢測時(shí)較多依賴于邊緣線,假設(shè)由于某種原因邊緣線發(fā)生中斷,則會(huì)對角點(diǎn)的檢測及提取結(jié)果產(chǎn)生影響.比如,當(dāng)鏡頭為廣角鏡時(shí), 會(huì)產(chǎn)生比較大的畸變, 邊緣檢測后棋盤格的邊緣會(huì)發(fā)生彎曲,這時(shí)的檢測結(jié)果就會(huì)產(chǎn)生較大誤差.Harris角點(diǎn)檢測是目前效果較好的角點(diǎn)檢測算法,它不僅不受攝像機(jī)姿態(tài)以及光照的影響[4],而且還適用于數(shù)目較多的角點(diǎn)且光源復(fù)雜的情況,同時(shí)還具有計(jì)算簡單、提取方便、穩(wěn)定等諸多優(yōu)點(diǎn).鑒于以上情況, 本文采用Harris檢測算法對黑白棋盤格圖像進(jìn)行角點(diǎn)檢測.
角點(diǎn)被定義為圖像邊緣曲線上曲率極大值的點(diǎn)或圖像亮度變化劇烈的點(diǎn),這些點(diǎn)既保留了圖像的重要特征,又有效地減少了信息的數(shù)據(jù)量.Harris算法以Morave算法為基礎(chǔ)[5],其檢測原理為:如果某一點(diǎn)朝任一方向發(fā)生小小的偏移都能引起灰度的較大變化, 那么就認(rèn)為該點(diǎn)是角點(diǎn).
哈里斯檢測算法受信號處理中自相關(guān)函數(shù)的啟發(fā)認(rèn)為,對于一幅圖片, 角點(diǎn)與自相關(guān)函數(shù)的曲率特性相關(guān),自相關(guān)函數(shù)表述了局部圖像灰度的變化程度,并把灰度變化度量定義為:
(1)
式中,Ex,y為窗口偏移(x,y)所引起的圖像灰度的平均變化度量;I代表圖像灰度函數(shù),w為窗口函數(shù),u,v為濾波窗的系數(shù),通常情況下wx,y=e-(x2+y2)/σ2.對于任何微小的偏移,略去無窮小項(xiàng)得:
Ex,y=∑wu,v?u2(Ix)2+v2(Iy)2+2uvIxIy」=Ax2+2Cxy+By2,
(2)
式中,A=(Ix)2?w,C=(Ix·Iy)?w,B=(Iy)2?w(?表示卷積).
計(jì)算Ex,y的二次型得:
(3)
M為實(shí)對稱矩陣:
(4)
對式(4)進(jìn)行對角化處理得:
(5)
式中,R為旋轉(zhuǎn)因子,對角化處理后并不改變以u,v為坐標(biāo)參數(shù)的空間曲面的形狀,其特征值反映了2個(gè)主軸方向的圖像表面曲率.如果2個(gè)特征值都較小,那么表明特征點(diǎn)周圍區(qū)域?yàn)椤捌教箙^(qū)域”;若特征值為一大一小,那表明目標(biāo)點(diǎn)位于“邊緣”上;當(dāng)且僅當(dāng)2個(gè)特征值都較大時(shí),沿任何方向的偏移都將導(dǎo)致劇烈的灰度變化.哈里斯的角點(diǎn)響應(yīng)函數(shù)(HRF)可以表示為:
HRF(x,y)=det(M)-k(trace(M)2),
(6)
式中,k為經(jīng)驗(yàn)值,通常k=0.04能取得良好的檢測效果.由于對M矩陣求特征值比較繁瑣,故在此使用公式det(M)和trace(M),分別表示M矩陣的行列式和矩陣M的跡.當(dāng)目標(biāo)像素點(diǎn)的HRF超過給定的閾值時(shí),認(rèn)為該像素點(diǎn)就是角點(diǎn).
開源視覺庫使用“IplImage”結(jié)構(gòu)體來處理圖像,此結(jié)構(gòu)不僅能比DIB 格式表達(dá)更多的圖像特征,而且還可以對圖像中的像素值進(jìn)行方便的存取.
在OpenCV 中使用Harris對圖像進(jìn)行角點(diǎn)檢測的函數(shù)是cvCornerHarris,其具體函數(shù)為:cvCornerHarris(const CvArr* image, CvArr* harris_dst, int?block_Size, int aperture_size, double k).式中,參數(shù)image為輸入圖像,harris_dst為存儲(chǔ)Harris檢測的圖像(與輸入圖像等大),block_size為鄰域大小,aperture_size為擴(kuò)展 Sobel 核的大小,k為Harris 檢測器的自由參數(shù),根據(jù)經(jīng)驗(yàn),k取0.04能夠獲得比較好的結(jié)果[6].
以下是本實(shí)驗(yàn)用于測試Harris角點(diǎn)檢測效果的核心代碼(基于MFC):
//定義IplImage指針
IplImage *image_gray = NULL;
IplImage *image = NULL;
IplImage *image_harris = NULL;
//為灰度圖開辟空間
image_gray =
cvCreateImage(cvGetSize(image), IPL_DEPTH_8U , 1);
//彩色圖轉(zhuǎn)換為灰度圖
cvCvtColor(image,image_gray, CV_BGR2GRAY);
//為角點(diǎn)檢測后圖像申請空間
image_harris=cvCreateImage (cvGetSize(image_gray),IPL_DEPTH_32F, 1);
//角點(diǎn)檢測函數(shù)
cvCornerHarris(image_gray , image_harris, 3, 5, 0.04 );
//創(chuàng)建窗口
cvNamedWindow ("Harris", 1);
cvNamedWindow ("Gray", 1);
//顯示原圖像和檢測后的圖像
cvShowImage ( "Gray", image_gray);
cvShowImage ( "Harris", image_harris);
//銷毀窗口
cvDestroyWindow ( "Gray" );
cvDestroyWindow ( "Harris" );
//釋放圖像
cvReleaseImage ( &image_gray);
cvReleaseImage ( &image_harris).
為了驗(yàn)證算法的合理性,編寫的測試程序在賽揚(yáng)雙核主頻2.3 GHz、內(nèi)存1 G、Windows XP操作系統(tǒng)中進(jìn)行實(shí)驗(yàn),編程語言采用Visual C++6.0和OpenCV 1.0.實(shí)驗(yàn)選用專門檢測角點(diǎn)效果的黑白棋盤格圖片,測試效果如圖1與圖2所示.其中,圖1為黑白棋盤格圖片,圖2為Harris角點(diǎn)檢測效果圖,圖2中的“﹡”為檢測到的角點(diǎn),角點(diǎn)坐標(biāo)如表1所示.根據(jù)哈里斯角點(diǎn)檢測算法可知, 影響檢測效果的參數(shù)主要有3個(gè), 即block_size 鄰域大小、aperture_size擴(kuò)展 Sobel 核的大小及k值,本實(shí)驗(yàn)所選取的參數(shù)如表2所示.
圖 1 原始圖片F(xiàn)ig.1 The original picture
圖 2 角點(diǎn)檢測圖Fig.2 Corner detection picture
角點(diǎn)坐標(biāo)(x,y)(2,91)(2,178)(90,89)(90,180)(91,2)(91,265)(178,2)(178,265)(179,89)(179,180)(264,91)(264,178)
表 2 實(shí)驗(yàn)參數(shù)Tab.2 Experimental parameters
將圖2的局部放大得到圖3, 從圖3明顯可以看出圖像灰度是漸變的.圖3中“*”標(biāo)記是經(jīng)Harris角點(diǎn)檢測所得的角點(diǎn)位置,“+” 標(biāo)記是理想中的角點(diǎn)位置.
圖 3 檢測精度圖Fig.3 Detection precision picture
4結(jié)論
Harris角點(diǎn)檢測算法在現(xiàn)實(shí)生活中已經(jīng)得到了廣泛的應(yīng)用,同時(shí)結(jié)合OpenCV中的圖像處理函數(shù)使得復(fù)雜的問題簡單化,大大縮短了項(xiàng)目的開發(fā)周期.從圖3可知,可以通過進(jìn)一步調(diào)整參數(shù)的值以及使用亞像素坐標(biāo)等方法來進(jìn)一步提高角點(diǎn)檢測的精度.
參考文獻(xiàn):
[1] Zhang Z.A flexible new technique for camera calibration[J].IEEE Transactions on Pattern Analysis and Mechine Intelligence,2000,22(11):1330-1334.
[2] 田原,梁德群,吳更石.直接基于灰度圖像的多尺度角點(diǎn)檢測方法 [J].信號處理, 2006,14(12):6-10.
[3] Harris C, Stephens M. A Combined Corner and Edge Detector [C].UK:Proceedings of the Fourth Alvey Vision Conference, Manchester,1998:147-151.
[4] 陳白帆,蔡自興. 基于尺度空間理論Harris 角點(diǎn)檢測[J].中南大學(xué)學(xué)報(bào), 2005,36( 5):751-754.
[5] Moravec H P. Towards Automatic Visual Obstacle Avoidance[C].Cambridge:Proceedings of International Joint Conference on Artificial Intelligence,1977:584-590.
[6] 劉瑞禎,于仕琪.OpenCV 教程基礎(chǔ)篇[M].北京:北京航空航天大學(xué)出版社,2009.