摘 要:為了實現雙目視覺中的特征提取與立體匹配,在研究現有角點檢測算法的基礎上,提出一種改進的Harris角點檢測算法。該算法首先采用圖像分塊和鄰近角點剔除的策略,實現了閾值的自適應調節,并保證角點分布的均勻和避免角點聚簇的產生。結合Forstner檢測算法,將精度提高到亞像素級。編程計算結果驗證了該方法的準確性和穩定性。
關鍵詞:雙目視覺; 特征點提取; 角點檢測; 自適應調節
中圖分類號:TP391 文獻標識碼:A
文章編號:1004-373X(2010)12-0097-02
Research on Corner Detection Algorithm for Stereo Vision
SHI Hong-guang, ZHANG Feng-sheng, ZHENG Chun-lan
(College of Mechanical Electrical Engineering, Qingdao University, Qingdao 266071,China)
Abstract: An improved Harris corner detection method based on the study on the existing corner detection methods is presented for the realization of feature extraction and stereo matching in stereo vision.By the image segmentation and neighboring point eliminating methods, the self-adaptive adjustment of threshold was achieved, the uniform distribution of the corner points was guaranteed, and the gathering of too many corners was avoided effectively. The algorithm also promoted the accuracy of the corner detection to the order of sub-pixels in combination with Forstner detection algorithm. The programming calculation results verify its accuracy and stability.
Keywords: stereo vision; feature point extraction; corner detection; self-adaptive adjustment
雖然角點沒有明確的數學定義,但人們普遍認為角點是二維圖像亮度變化劇烈的點或圖像邊緣曲線上曲率極大值的點[1]。目前,角點檢測方法主要分為基于圖像邊緣的方法[2]和基于圖像灰度的方法[3]2類。前者在很大程度上依賴于圖像的分割和邊緣的提取,算法復雜,計算量大;后者主要通過計算點的曲率及梯度來檢測角點,算法簡單,計算量小。Harris角點檢測方法是一種直接基于灰度圖像的角點提取算法,具有較高的魯棒性,能夠在圖像旋轉、灰度變化以及噪聲干擾等情況下準確提取出角點,應用廣泛[4]。但該方法需要人為設定一個閾值,且精度只能達到像素級。為此,本文提出一種改進的Harris角點檢測方法,實現了閾值自動設定,并把精度提高到亞像素級。
1 Harris角點檢測算法
Harris角點檢測算法的基本思想是[5]:在圖像中設計一個局部檢測窗口,當該窗口沿各個方向做微小移動時,考察窗口的平均能量變化。當該能量變化超過設定的閾值時,就將窗口中的中心像素點提取為角點。
對于一幅圖像I,假設 X , Y 分別為其行向量和列向量的一階差分。定義:
h(x,y)=12πe-x2+y22 (1)
為一階高斯平滑函數,令:
I2u(x,y)= X 2*h(x,y), I2v(x,y)= Y 2*h(x,y)
Iuv(x,y)= XY *h(x,y) (2)
進而可得:
M (x,y)=I2u(x,y)Iuv(x,y)
Iuv(x,y)I2v(x,y) (3)
那么,窗口能量變化可以由下面的公式求出:
R=det( M )-k#8226;tr2( M ) (4)
式中:R是窗口能量的變化值;det( M )是矩陣 M 的行列式;tr( M )是矩陣 M 的軌跡;k為與檢測靈敏度有關的經驗值,k越小,則檢測越靈敏,一般k取0~0.04。Harris角點從R的局部極大值點中產生,至于R取多大才能作為角點,這就需要人為設定一個閾值T,而T的取值依賴于圖像的屬性。特別是顏色深淺不同,難以確定,使得用戶在設定具體閾值時比較盲目,只能多次設定比較后才能獲得相對理想的角點[6]。另外,往往特征值較大的點只集中在某些區域,這樣可能導致檢測出的角點分布不均勻;如果降低T,盡管角點分布總體上趨于均勻和合理,但將導致角點緊挨在一起,產生角點聚簇的現象。這些都將影響后續的分析和處理。
2 改進的Harris角點檢測算法
本文算法首先采用圖像分塊和鄰近角點剔除的策略[7],避免閾值的設置,并保證角點分布的均勻和避免角點聚簇的產生。然后,結合Forstner檢測算法將精度提高到亞像素級。
2.1 自動設定閥值
在角點篩選前,先對圖像進行分塊,這樣能保證角點分布均勻。在圖像分塊時,為避免存在大面積越界分塊,同時保證對較大圖像進行處理時,有同樣的效果,采用固定塊數的分塊法,而非固定單位邊長的方法。對于圖像塊中被檢測出的角點,將其按R值的大小排序,保留R值相對較大的角點。至此,在圖像各個區域中特征明顯的角點均已被檢測出,實現了角點分布的均勻性。但此時,可能在一個角點很鄰近的周圍還存在其他角點,即在局部的區域可能會出現角點聚簇的現象,這可能導致在特征點匹配處理時誤匹配幾率顯著增加。因此,必須采用一定的策略減弱或消除這種現象。在實現角點的均勻分布之后,再加入鄰近點剔除策略,具體方法是:選用一個模板(如3×3)對整幅圖像進行處理,若在該模板下存在不止一個角點,則只保留其R值最大的角點,以達到剔除鄰近點的目的。實例計算表明,該策略能較好地抑制角點聚簇現象的產生。至此,完成了對整幅圖像的角點檢測。
該算法的具體實施過程是對圖像中的每個像素點操作,得到矩陣 M ,利用高斯濾波求出新的 M ,再計算R值。在圖像分塊中,對每一圖像塊,檢測圖像塊中存在的角點,將檢測出的角點R值存儲在數組R[N]中。其中,N為數組的大小,即角點的個數。然后,對R[N]按R值的大小進行排序,假設排序(本文選擇按從大到小排序)后的數組為R′[N]。選取數組R′[N]中R值相對較大的角點作為最終的角點,即在N個角點中選取λ×N( λ∈(0,1])個角點作為最終的角點。為了保證各分塊中均有角點被保留,本文采用循環迭代算法對λ值進行求解:在(0,1)內取一較小的值作為λ的初始值(本文取λ=0.02),用λ=λ+step進行循環迭代(本文取step=0.02),以判斷λ值。若λ=1,終止迭代;否則,判斷含有角點的各圖像塊中是否有角點被保留,如果是,則終止迭代,取此時的λ值。最后,對整幅圖像進行鄰近角點剔除操作。本文選用3×3 的操作模板,若模板下存在的角點數大于1,則只保留R值最大的角點。
2.2 提高角點定位精度
Harris 檢測算法編程實現起來簡單, 只需對圖像進行一階差分和卷積運算, 這些都是圖像處理中的基礎算法,但是精度只能達到像素級。Forstner 檢測算法可以提高定位精度,但受圖像灰度和對比度的變化影響較大。Forstner 檢測算法的基本思想是[8]: 對于角點, 對最佳窗口內通過每個像元的邊緣直線(垂直于梯度方向)進行加權中心化,得到角點的定位坐標;對于圓點,對最佳窗口內通過每個像元的梯度直線進行加權中心化,得到圓心的坐標。
本文將2種方法結合,以提高角點定位精度。具體方法是:首先利用改進的Harris 角點檢測算法提取出一定數量的特征點, 這些特征點都是圖像局部范圍內最優的特征點, 每個特征點對應于一個具體的像素, 因為它的精度只能達到像素級;然后將提取的特征點作為Forstner最佳窗口的中心點, 在窗口內進行加權中心化操作, 精確定位特征點的位置, 將精度提高到亞像素級別。
3 實驗結果分析
為了驗證該方法的準確性、穩定性,這里采用VC++ 2005編制了計算程序。在白天和夜晚兩種不同光照條件下進行角點檢測實驗。實驗采用7×7的黑白棋盤格,對中間的36個角點進行檢測。實驗過程中將實驗用棋盤格變換成多個不同的方位進行角點檢測,圖1為實驗效果圖。可以看出,本文的方法在不同的光照條件下和不同的方位都能穩定準確地提取角點。
圖1 角點提取效果圖
為了驗證角點定位的精度,選用5個坐標已知的角點進行實驗。分別采用Harris方法和本文的方法進行角點定位(單位:像素),結果見表1。由表1數據可知,本文的方法能顯著提高角點的定位精度。
表1 角點定位結果比較
特征角點ABCDE
理想坐標 (100.0,100.0)(200.0,200.0)(300.0,300.0)(400.0,400.0)(500.0,500.0)
Harris方法提取坐標(98,99)(200,198)(302,301)(402,399)(498,501)
本文方法提取坐標(99.3,99.8)(199.9,199.6)(301.4,300.7)(399.6,400.8)(500.2,500.1)
4 結 語
本文對Harris角點檢測算法進行改進,采用圖像分塊和鄰近角點剔除策略,避免了閾值的設置,并保證角點分布的均勻和避免角點聚簇的產生。結合Forstner檢測算法,將角點檢測精度提高到亞像素級。對實際圖像進行了角點檢測實驗,結果驗證了本文方法的準確性和穩定性,對雙目視覺系統的研究具有較強的實用價值。
參考文獻
[1]趙文彬,張艷寧.角點檢測技術綜述[J].計算機應用研究,2006(10):17-19.
[2]QUDDUS A, FAHMY M M. An improved wavele based corner detection technique[C]//Proceedings of IEEE Inter- national Conference on Acoustics, Speech and Signal Processing. USA: [s.n.], 1999:87-89.
[3]HARRIS CG, STEPHENS M J. A combined corner and edge detector[C]//Proceedings Fourth Alvey Vision Conference. Manchester: [ s.n.] , 2001: 147-151.
[4]王玉珠,楊丹,張小琪,等.基于B樣條的改進型Harris角點檢測算法[J].計算機應用研究,2007(2):192-193.
[5]HEN S, HUW C. A rotationally invariant two-phase scheme for corner detection[J]. Pattern Recognition, 2006, 29(5): 819-828.
[6]Zun Ga O A, HARALICK R. M. Corner detection using the facet model[C]//Proc. of Conf. Computer Vision and Pattern Recognition. Washington: [ s.n.] ,2003: 30-37.
[7]趙萬金,龔聲蓉,劉純平.一種自適應的Harris 角點檢測算法[J].計算機工程,2008,34(10):212-217.
[8]李薇薇,段智敏.一種改進型的Harris角點檢測算法[J].機械工程與自動化,2009(2):21-23.