尚 碩,曹建榮,汪 明,鄭學漢,高 鶴,2
(1.山東建筑大學 信息與電氣工程學院,濟南 250101;2.山東正晨科技股份有限公司,濟南 250101)
在圖像處理領域,角點就是圖像中的極值點,即像素值或者曲率值等屬性較為突出的點,通常意義上一般稱邊緣線的交點為角點,即局部鄰域的延展趨勢不同。角點包含了圖像的重要信息又稱為特征點,角點檢測即對圖像的特征點進行檢測,是在機器視覺系統中對圖像特征進行提取的重要方法,對于圖像匹配、運動檢測、三維重建、目標識別和視頻跟蹤等是必不可少的關鍵步驟。
角點檢測算法根據作用對象不同可以總結為基于圖像灰度、基于二值圖像、和基于輪廓曲線的角點檢測。應用較為廣泛的是基于圖像灰度的角點檢測,主要針對像素點及其鄰域的灰度變化,又可細分為基于梯度、基于模板和基于模板梯度組合,直接對圖像灰度進行角點檢測較為方便直接,這方面的角點檢測算法也較多。二值圖像是對圖像進行二值化處理得到的圖像,常用于輔助其他算法,很少單獨使用。對于基于圖像輪廓的角點檢測算法,通常根據某個點位置的彎曲程度來判斷該點是否為角點,一般將輪廓上點的曲率值以及幾何位置作為衡量標準。
基于圖像灰度的角點檢測算法一般將像素值的變化作為衡量標準,認為灰度變化大于一定閾值的點是角點。基于圖像灰度的角點檢測又細分為基于模板、基于梯度和基于模板梯度組合。基于模板的角點檢測算法,顧名思義,首先需要設定大小合適的窗口,然后根據需要創建一系列針對不同角點的模板,利用窗口沿圖像移動,依次與所創建的角點模板比較,如果相似則視為角點,否則不認為是角點;基于梯度的方法是利用邊緣像素的梯度值來衡量角點是不是存在,圖像邊緣強度的變化以及邊緣方向的變化關系著角點計算數值的大小。
1.1.1 Harris角點檢測算法
Chris Harris 和 Mike Stephens[1]在1988年提出了Harris角點檢測算法,Harris角點檢測算法主要利用待測點的自相關矩陣進行角點判斷,通俗來講就是在圖像上使用一個合適大小的窗口,使其沿隨意一個方向移動,根據移動前與移動后該窗口中圖像像素灰度變化的程度來確定角點,如果該窗口沿著隨意一個方向的移動都有很大程度的灰度值變化,那么就可以判定該窗口中可檢測到角點。具體步驟如下:
先將圖像I和窗函數w(x,y)進行卷積,并求出圖像梯Ix,Iy,使用平方和函數E(u,v)定義窗口移動前后像素灰度變化:
E(u,v)=
(1)
w(x,y)是窗函數,可以是矩形窗或者高斯窗,I(x,y)是圖像像素值,u,v是移動的像素距離。
將I(x+u,y+v)進行一階泰勒展開:
I(x+u,y+v)=
(2)
代入公式(1)得:
E(u,v)=
(3)
則得到待檢測圖像點的自相關矩陣:
(4)
通過判斷自相關矩陣H的特征值大小確定角點,如果計算自相關函數H的特征值分解會增加算法復雜度,這里選取Harris角點響應函數為R=det(H)-αtrace(H)2,如果角點響應函數R大于一定的閾值且該點為局部極大值點,則認為該點為角點。
Harris角點檢測運算較為簡單且具有旋轉不變性和光照不變性,其提取的角點特征較為均勻、性能也相當穩定。但是閾值的設定對Harris算法的角點檢測效果有很大的影響,如果設定的閾值過小,很多非角點會被當作角點檢測出來,造成檢測結果不準確;如果設定的閾值過大,很多關鍵角點會被剔除掉,出現漏檢情況。同時,Harris算法對圖像進行圖像平滑處理采用的是可調窗口的高斯函數,所以檢測效果極大程度地依賴于窗口大小的設定,但實際應用中很難控制高斯窗口的大小。
針對算法的不足,眾多學者對經典的Harris角點檢測算法進行了研究和改進。毛雁明等[2]針對Harris角點檢測算法的閾值設定提出了一種雙閾值法,即設定大小兩個閾值,對提取的角點進行信息的對比,在得到正確的角點信息的基礎上還剔除了部分偽角點,剩余的偽角點使用 SUSAN角點檢測算法進行剔除,對噪聲展現出很好的魯棒性。李鵬程等[3]通過替換Harris角點檢測算法的角點響應函數以及非極大值抑制的模板區域為圓形,避免了設置焦點響應函數中的經驗常數,并且如果對圖像進行旋轉變換,根據圓的性質,這并不會對檢測結果產生很大影響。韓松奇等[4]使用B樣條函數替代了Harris角點檢測算法中的高斯窗口函數,解決了原算法對于使用高斯窗口所帶來的一系列問題,采用自適應閾值的方法,解決了原算法需要不斷調試來確定閾值的問題,同時通過對角點采取預篩選,提高了算法的檢測速度。N次B樣條函數定義為:
Bn(x)=
(5)
u(x)是階躍函數,n是B樣條函數的階數。離散式數字圖像的濾波公式為:
g(x,y)=
(6)
f(i,j)是像素 (i,j)處的圖像灰度值,Bk*l(x-i,y-i)是B‘條濾波算子。孫萬春等[5]提出一種自適應灰度差分均值的思想,有效的提高了Harris角點檢測算法的抗噪性能。楊立偉等[6]設定窗口遍歷圖像,求取中心像素點與其鄰域內像素點的灰度值差,并手動設定閾值作為衡量標準,降低了算法的復雜度,解決了Harris角點檢測算法檢測時間過長的問題。高帥等[7]首先對圖像抽骨細化,然后使用一個3*3的框進行角點預篩選并改進了角點響應函數,排除了很多偽角點,提高了運算效率。Tao Luo等[8]將Harris角點檢測算法與極大值抑制和FAST角點檢測算法結合了起來,進行非角點剔除提高了運算效率和魯棒性。針對波前編碼雙目攝像機成像引起的圖像缺失和冗余,Qinxiao Liu等[9]在Harris角點檢測算法的基礎上使用特征值約束并使閾值盡可能小,很好的提高了角點定位的準確度并有一定的準確度。Prateek Sikka等[10]通過結合HLS設計方法提出一種實時、面積優化的Harris角點檢測算法,對于相同的目標板所得的結果在面積和速度方面都更優。Chuan Luo等[11]使用Canny邊緣檢測和灰度差分對圖片進行預處理,提高了Harris角點檢測算法的檢測效率、抗噪聲和旋轉不變性。
Shi 和Tomasi提出Shi-Tomasi角點檢測算法,該算法是對Harris角點檢測算法的改進,通過計算像素點自相關矩陣的特征值,比較特征值與閾值的大小關系,若均大于閾值,那么認為該像素點為角點,取得了更好的效果。胡濤等[12]使用抑制半徑的方法對Shi-Tomasi角點檢測算法進行改進,提高了對PCB圖像角點檢測的正確率。李雨嫣等[13]將Shi-Tomasi角點檢測算法結合不同的并行算法,解決了Shi-Tomasi角點檢測算法運算量大、耗時長的問題。彭曉星等[14]通過構建圖像金字塔實現在不同尺度下Shi-Tomasi角點的提取,形成候選點集,對候選角點采用雙模板組合的方式去除偽角點,實現精提取,增強了圖像的抗噪性以及提升了提取角點的精確性。
1.1.2 SIFT角點檢測算法
SIFT(Scale-invariant feature transform)是一種較為常用的角點檢測算法,在Opencv中可以直接調用,該算法可以很方便獲取一個特征點的在尺度和方向上的描述子。SIFT角點檢測算法需要在由圖像和高斯函數卷積生成的尺度空間上進行檢測,高斯函數的計算公式為:
(7)
圖像尺度空間L(x,y)的計算公式為:
L(x,y,σ)=G(x,y,σ)*I(x,y)
(8)
1)首先通過創建高斯金字塔和差分高斯金字塔來創建尺度空間(DOG)。高斯金字塔第一組第一層最清晰,大小是原圖像的二倍,而第二層是對第一層的高斯濾波操作,對新生成的圖層重復高斯濾波操作構成一個組,將第一組最模糊的一層進行二倍下采樣作為下一組的初始圖象重復高斯濾波操作。差分高斯金字塔是高斯金字塔通過前后兩層的差形成的圖像構成的,比高斯金字塔層數少一層,計算公式如下:
D(x,y,σ)=
(G(x,y,kσ)-G(x,y,σ))*I(x,y)=
L(x,y,kσ)-L(x,y,σ)
(9)
2)在完成尺度空間構建(DOG)之后,對DOG中的每一個點進行檢測,判斷是否滿足極值條件,即讓待測點與三維空間中的相鄰像素點進行比較,即該像素點所在層鄰域的8個像素點以及其上下兩層對應點及其周圍的9個像素點,判斷該點是否為這26個點中的極值點,若是就認為該點是檢測到的一個極值點。
3)對極值點進行三維二次函數的擬合,這樣可以很容易地定位角點、剔除邊緣響應產生的偽角點,同時還可以剔除對比度較低的角點,這樣可以獲得匹配效果的增強以及較強的魯棒性。空間尺度函數二階泰勒展開式為:
D(x,y,σ)=
(10)
使其導數為0得極值點的位置:
(11)
若D(xmax)≤0.03,則為受噪聲干擾的低對比點,認為是非角點。如果高斯差分算子選擇不當,會對極值點產生很大的影響,通過Hessian矩陣H計算主曲率,公式如下:
(12)
D的主曲率和Hessian矩陣的特征值是正比關系,令α和β分別為大小兩個特征值,有α=γβ:
Tr(H)=Dxx+Dyy=α+β
(13)
Det(H)=DxxDyy-(Dxy)2=αβ
(14)
(15)

4)為了滿足當圖片旋轉時提取的角點不變,則需要確定角點的方向,特征點(x,y)處的梯度值m(x,y)和梯度方向角θ(x,y)通過下式求得:
m(x,y)=
(16)
(17)
其中:L(x,y)表示特征點(x,y)的尺度,用直方圖統計梯度值和梯度方向,橫坐標表示區間,縱坐標表示在這個區間的梯度值的和,可以很方地看出角點的主方向是最高一柱的方向,該角點的輔助方向為值為最高值的80%及以上的另一柱的方向。
5)為了使圖像旋轉時特征向量保持不變,旋轉角點所在的鄰域圖像,使其主方向旋轉到坐標軸的方向,將特征點所在正方形區域劃分為16個塊,用直方圖統計每個塊的梯度值和梯度方向,可以得到一個包含八個方向的 128 維的特征描述子。
SIFT角點檢測算法具有尺度不變性、旋轉不變性,同時當圖像產生亮度變化、對比度變化以及視角變化,對SIFT算法的角點檢測效果影響也很小,但是SIFT算法復雜度高,耗時長。
1.1.3 SURF角點檢測算法
SURF(Speeded-Up Robust Features)角點檢測算法是對SIFT角點檢測算法的改進,不僅具有SIFT算法檢測準確性高、魯棒性強的優點,而且還解決了SIFT角點檢測算法計算的復雜度高和耗時長的問題。具體步驟為:
1)構造變換圖。不同于SIFT角點檢測算法是計算圖像的尺度變換空間求取DOG圖像,SURF角點檢測算法計算圖像像素點的Hession矩陣行列式求取近似圖像。計算圖中像素點的Hassion矩陣表示為:
(18)
Lxx(x,σ),Lyy(x,σ),Lxy(x,σ)是圖像與高斯函數卷積后進行二次求導所得,通過計算圖像像素點的Hession矩陣行列式求取近似圖像,計算公式為:
det(H)=LxxLyy-(0.9Lxy)2
(19)
0.9為經驗值。該近似模板可以很好地代替高斯濾波和二階導數的計算這兩個步驟。
2)構造高斯金字塔。SIFT角點檢測算法同一組中圖像大小和高斯模板大小不變,改變的只是尺度σ的大小,而在SURF中圖像大小不變,沒有降采樣,而是改變高斯模板的尺寸和尺度σ,角點檢測的速度取得了提高。
3)角點定位。首先將步驟(1)獲得的的每個點和它所在層周圍及上下兩層對應的共26個像素點的值作比較,若它是極值點,則作為候選鍵點,否則忽略。然后,利用3維線性插值法獲取亞像素級的角點,并且增加極值,剔除掉表現不好、不合理的角點,最終只保留幾個特征最好的點。
4)確定角點的主方向。為了保證圖片旋轉時,角點檢測的結果不變,采取統計角點領域內的Harr小波響應的方法。如圖1所示,計算角點為中心的圓內的Haar小波響應,并選擇角度為60度去遍歷這個圓形區域,并把圓內每60度內所有點的x和y方向的Haar小波響應值賦高斯權重系數后相加,得到一個矢量,最長矢量的方向就是該角點的方向。

圖1 示意圖
5)在特征點周圍取一個正方形框,并帶有上步所檢測出來的主方向。以主方向為豎直方向,把該框分為16個子區域并計算haar小波特征,SURF角點檢測算法得到的特征點描述子是16*4=64維的向量,是SIFT角點檢測算法的特征描述子維度的二分之一,這將大大提高特征匹配的速度。
SURF角點檢測算法通過Henssian矩陣求取近似圖像并通過Harr小波求取圖像角點方向,具有很好的旋轉不變性和尺度不變性。但是像素點鄰域的梯度方向對角點的主方向的確定影響很大,從而對角點特征向量的求取有很大影響,更重要的是,主方向不太大的偏差角度也會被特征匹配過程放大誤差,在實際應用中是導致匹配失敗的重要原因。此外,特征向量的提取還依賴于圖像的尺度空間,需要選擇合適的圖像金字塔的層數,否則不利于角點的提取。
1.1.4 SUSAN角點檢測方法
SUSAN算法是1997年由牛津大學的Smith等人[15]提出的,具體步驟如下:
1)確定USAN區域,選擇一個包含37個像素點大小的圓形模板遍歷待測圖像,通過逐一比較圓形模板對應圖像中每一個像素點的灰度值和中心像素點的灰度值來確定。公式如下:
(20)

(21)

(22)


(23)
角點誤報檢查:通過計算USAN區域的重心對候選角點進行約束,從而減少偽角點的產生。
4)引入非極值抑制進行角點篩選。
SUSAN角點檢測能力較強但是誤檢率也較高。鄭昊等[16]通過結合Canny邊緣檢測提高了SUSAN角點檢測算法的檢測效率。
1.1.5 FAST角點檢測方法
Edward Rosten和Tom Drummond[17]在2006年提出了FAST(加速段測試的特征)算法,FAST角點檢測算法基本思路是比較某像素值與其鄰域內足夠多的像素值的大小,如果相差較大,則認為該像素可能是角點。具體步驟如下:
1)先選取一個像素點P,用I(p)表示其灰度值。以像素p為中心,畫一個包含16個像素點的圓,將像素點記作p1,…,p16,灰度值分別表示為I(p1),…,I(p16)。
2)選定一個閾值為t。
3)首先計算p1、p5、p9、p13(分別在4個方向的4個點)與中心點p的像素值差,如果有至少3個像素點的差不低于門限值,則認為是候選特征點,可以進行步驟(4)的篩選;否則,認為是非角點。
4)若p是步驟(3)所確定的候選點,則計算圓內除中心點外所有點與中心點p的像素值差,如果有至少9個點的像素值不低于門限值,我們就認為是特征點。一般取12個點,并且這個標準被定義為FAST-12,但是在實際應用中選9個點一般能取得較好的效果。
5)對整個圖像重復1)到4)步。
6)最終得到的角點可能存在相鄰角點,即小區域重復的特征點,這里應用非極大值抑制的方法進行剔除。計算特征點像素值與16個點像素值之差,即FAST得分值,如果有多個特征點,保留FAST得分值最大的特征點。
FAST角點檢測算法實現思路簡單且計算速度相較于其他算法也很快,但仍存在不足。第一,先進行四點檢測的預篩選,后進行十六點檢測篩選時存在重復計算的問題;第二,FAST角點檢測算法提取的角點僅僅是基于灰度值計算的,不具有旋轉不變性;第三,在初步篩選獲取候選角點時可能會舍棄掉角點從而出現漏檢情況;第四,對圖像噪聲不具有魯棒性,且對閾值的設定要求很高。Rosten 2010年提出了對FAST算法的改進FAST-ER,李祥杰等[18]基于FAST-ER改進算法實現了增強現實空間注冊技術研究,主要改進在于使用ID3決策樹策略對FAST進行了加速,使得其更快。劉志海等[19]通過對圖像進行區域分割再使用OTSU算法得到每個區域的閾值提高了FAST角點檢測算法的檢測效率和檢測精度。Wenyi Xiong等[20]針對SAR圖像斑點噪聲提出了一種改進的FAST角點檢測算法,首先通過萬有引力定律確定候選角點的方向,其次候選角點與其周圍像素點的相似度來抑制受SAR相干斑噪聲影響的點,取得了很好的抑制效果。
1.1.6 其他基于圖像灰度的角點檢測算法
左偉等[21]提出了基于多尺度斜率差分的間接角點檢測算法,先對圖像應用Canny邊緣檢測算法,再在橫坐標軸和豎坐標軸方向對輪廓點進行分解,然后分別計算3個不同尺度下的斜率差分均值并求取乘積獲取角點響應值,最后使用自適應閾值的方法進行判別,對圖像噪聲具有一定的魯棒性。高永燕等[22]提出了基于圖像金字塔的AGDDs與CNN級聯的角點檢測算法,將數字圖像處理技術與深度學習結合起來,在角點重復率、定位誤差等評估標準上表現良好。Junfeng Jing等[23]根據角點的特征設計了一種角點特征表示網絡,提出一種新的損失函數以最小化原始圖像塊與變換后圖像塊之間的焦點位置定位誤差,在檢測精度、定位精度、平均重復性等標準下性能較為優越。Hao Wu等[24]提出一種模擬真實成像過程的合成訓練數據生成方法解決了深度網絡缺乏訓練數據的問題,并且在檢測過程中可以精確地獲得亞像素焦點位置。Xizuo Dan等[25]提出一種基于EDLines 算法的棋盤角檢測方法,實驗表明該算法在角點檢測中不存在漏檢和冗余。Liang Wang等[26]提出一種基于深度學習的自適應角點檢測方法,首先通過FasterR-CNN模型檢測目標獲取目標區域坐標,然后在該區域上采用自適應Harris算法檢測角點,該方法不僅避免了復雜背景的影響還可以提高角落檢測的效率。Zhang Yanling等[27]提出一種基于模板的棋盤角檢測方法,首先通過棋盤的特點構造兩種角點原型模板,通過卷積核與圖像的卷積計算像素點與角點之間的相似度進而區分角點非角點,采非極大值抑制和梯度統計算法進一步篩選出目標角點,具有較強的抗干擾能力。Mingzhe Wang等[28]提出了一種新型的濾波器來增強角點并同時抑制邊緣和噪聲,簡化了角點檢測架構和提高了其并行計算性能。Kitchen和Rosenfeld[29]提出的角點檢測算法既基于圖像的輪廓曲線又基于灰度圖像的梯度,他們提出了通過計算圖像輪廓曲線的曲率與灰度變化的梯度值的乘積來計算角點響應函數的方法,即Kitchen-Rosenfeld角點檢測算法。KLT角點跟蹤算法[30]全稱Kanade-Lucas-Tomasi Tracking,很好地適用于視頻圖像序列角點檢測問題,首先需要使用Shi-Tomasi角點檢測算法檢測圖像序列中首幅圖像的角點,然后使用KLT算法進行追蹤,函數會返回當前幀的點,這些點帶有狀態1或者0,如果在當前幀找到了上一幀中的點,那么這個點的狀態就是1,否則就是0。
劉文予等人[31]通過研究圖像的形態骨架,提出了一種基于二值圖像的角點檢測方法,首先通過對圖像進行二值化處理獲取圖像的基本外形視作多邊形,那么其骨架的延長線上必然存在特征點,并認為骨架點的最大圓盤半徑為0的點是特征點。基于二值圖像的處理相較于直接基于圖像灰度,計算過程變得更加簡單,大大提高了計算的效率,并且能夠有效地確算法的實時性。這里需要說明,基于圖像灰度的一些算法對于基于二值圖像的處理也適用。二值圖像在實際應用中應用方向較少,所以僅僅基于二值圖像的角點檢測算法較為稀少,多用于輔助其他角點檢測方法。
1.3.1 CSS角點檢測算法
基于曲率尺度空間(CSS)的角點檢測算法是由MOKHTARIAN F等在1998年提出的,是基于輪廓曲線的曲率在局部區域上進行特征點的檢測,對角點的位置采用多尺度追蹤搜索。弧長表示曲線為:
L(μ)=(x(μ),y(μ))
(24)
則曲線隨著尺度變化的表達式為:
Lσ=(x(μ,σ),y(μ,σ))
(25)
其中,x,y分別為輪廓曲線上的點的橫、縱坐標,x(μ,σ)=x(μ)*g(μ,σ),y(μ,σ)=y(μ)*g(μ,σ)。曲率k表示為:
(26)
通過Canny邊緣檢測提取出圖像的邊緣,在一個足夠大的σ下通過上述公式計算每個點的曲率大小,當某一點的曲率的絕對值大于曲率閾值且大于相鄰點最小曲率點處的2倍時,確定為角點。
CSS角點檢測算法可以獲得較為準確的角點的位置,并且算法復雜度低、計算量小,角點檢測精度高,有很好的匹配效果。但是仍有不足,第一,直接對圖像邊緣進行計算,不能夠準確識別噪聲和圖像邊緣,很容易產生偽角點;第二,在高尺度上對圖像進行高斯濾波,會模糊曲線細節,影響角點的位置確定。Changli Mai等[32]提出一種基于區域質心提取的角點檢測算法對于局部噪聲和水面成像畸變有很好的魯棒性。
1.3.2 CPDA角點檢測算法
基于點到弦距離累積(CPDA)角點檢測算法和CSS角點檢測算法類似,都是對預先得到的邊緣曲線進行角點檢測,不同于CSS角點檢測算法的曲度計算方法,CPDA角點檢測算法是利用點弦距離表示邊緣的曲度,從而實現角點定位。邊緣曲線上存在n個像素點分別為p1,p2,…,pn,pk-lpk位置的弦為cl,計算pk到cl的距離為dk,k-l,然后弦cl向曲線方向移動一點到pk-l+1pk+1,同樣的方法計算點到弦的距離,依次移動到pkpk+l的位置結束,計算所有距離的和:
(27)
如果選取的弦長過小,會導致點與點間距太小而使角點的位置有誤差,就會提取到偽角點;選擇的弦長太大,大概率會把曲線的峰谷認作成一個特征點。故基于此CPDA角點檢測算法選擇3種弦長,計算出3個曲度值,并對其進行歸一化處理,然后求取乘積。曲度乘積項公式為:
(28)
(29)
如果計算得到的值為所計算區域的最大值,那么初步認為該點為角點,然后使用自適應曲度閾值進行篩選。
CPDA角點檢測算法雖然很好地解決了CSS角點檢測算法存在的問題,但是其存在相鄰角點檢測不準確、自適應曲度閾值不穩定、3種不同的弦長難以確定等問題,不少研究者就此做出了改進。白萌萌等[33]提出一種對單一弦長進行角點曲率估計的方法,即選擇最優單弦長進行曲率估計,克服CPDA角點檢測算法需要確定合適的3種弦長的問題。蔣延杰等[34]通過計算每條邊緣線上所有像素點到弦的歐氏距離,選擇最大點弦距離大于所設閾值時的像素點作為候選角點,利用非極大值抑制的方法剔除偽角點并得到最終角點,取得了和CPDA角點檢測算法相似的檢測結果。
1.3.3 ERCM角點檢測算法
最小特征值方法是通過求取一段輪廓曲線的協方差方程,分析協方差方程的最小特征值大小來判斷是否為角點,但其并沒有尺度不變性。張世征等人[35]提出一種新的基于正則化協方差矩陣最大和最小特征值的角點檢測方案(ERCM),首先對協方差方程進行正則化:
(30)

2019年Shizheng Zhang等[36]提出一種基于切線到點距離累積技術的角點檢測方法,在平均重復率、定位誤差和精度指數評判標準下都展現了優越的有效性和效率。2020年Shizheng Zhang等[37]提出一種利用點到質心的距離技術(PCD)進行角點檢測,通過實驗對比,PCD算法在平均重復率和定位誤差這兩個角點檢測指標上是高效的。2021年Shizheng Zhang等[38]又提出一種基于平行四邊形對角線比值(RPD)的角點檢測算法,檢測速度和精度都獲得了較為理想的效果。
1.3.4 其他基于輪廓曲線的角點檢測方法
Jiwu Wang等[39]提出一種基于角度的角點檢測算法,首先通過CSS算法設定合適的閾值提取候選角點,然后計算距離較遠像素處候選角點角度值并利用該閾值進行過濾,能夠準確提取出所需角點。Zhiyong Peng等[40]提出一種CCDA角點檢測算法,利用級聯分類器設計一種角點檢測器可以快速丟棄非角點像素,利用梯度方向獲取角點,利用二階導數非極大值抑制的方法獲取準確的角點,該算法獲得了與FAST算法相當的速度以及比Harris算法更優的精度和魯棒性。Seyed Mostafa Mousavi Kahaki等[41]提出提出均值投影變換(MPT)作為角分類器和拋物線擬合近似來形成魯棒檢測器,獲得了較好地檢測結果。Shyh Wei Teng等[42]使用簡單的三角形理論和距離計算,提出了兩種有效且高效的角點檢測方法,檢測結果在重復性方面優于CPDA,且具有較低的定位誤差。
不同角點檢測算法具有不同的優越性但同時也有各自的缺陷,通過不同角點檢測算法的結合可以實現優缺點互補,國內外許多研究者就此展開研究,并取得了更好的檢測效果。胡曉彤等[43]提出一種基于Harris - CPDA的角點檢測算法,將Harris角點算法檢測同CPDA角點檢測算法結合起來,通過多次篩選候選角點,獲得更精準的角點檢測結果。蔡欣展等[44]將Harris和FAST角點檢測算法結合了起來,先使用FAST角點檢測算法進行特征點預篩選,再通過一種抑制半徑處理方法進行Harris角點篩選,提高了Harris算法的運算速度,很好地解決Harris算法易產生角點聚簇現象的問題。吳祿慎等[45]將基于CSS的角點檢測技術和SIFT角點檢測技術結合起來,先通過CSS的角點檢測技術檢測出角點,然后采用 SIFT 方法確定主方向,表現出良好的尺度不變性、旋轉不變性和光照不變性,且匹配效果較好。Yifan Wang等[46]提出一種FAST-Harris融合角點檢測算法,首先采用FAST算法獲取候選角點,然后使用Harris算法進行篩選,最后利用非極大抑制獲取真實角點,獲得了較高的檢測速度和定位精度,在有損JPEG壓縮中魯棒性最好。
各種角點技術總結見表1。

表1 角點檢測技術綜合性能總結
角點檢測算法的性能評估主要包括總角點數、偽角點數、漏檢角點數等,對于角點較少的圖片的角點檢測我們可以通過肉眼判斷,但大部分實際的應用場景復雜且角點較多,我們很難通過肉眼判斷檢測結果的準確性,所以需要性能評估標準來判斷。多數研究者使用標準圖像庫中的“積木”圖片,根據給定的角點信息進行比對。角點重復率是常用的角點檢測算法的評估標準,對給定圖片進行角點的提取,角點數記為No,然后對圖形進行仿射變換、旋轉變換、Jpeg壓縮、尺度變化等,Nt是變換后檢測角點的個數,Nr是對變換前后提取的角點匹配得到匹配角點數,角點重復率如下:
(31)
Mokhtarian等[47]提出了角點數一致性 (CCN,consistence of corner numbers)的概念:
CNN=100%×1.1|Νt-Νo|
(32)
CNN數值越大表明角點檢測效果越好。Awrangjeb等[48]提在CCN基礎上提出平均重復率(average repeat ability)與定位誤差(localization error):
(33)
(34)
其中:(xoi,yoi)和(xti,yti)為變換圖像與原圖像相應角點的坐標位置。現有關于角點檢測算法性能評估標準還比較有限且不夠公正,還需進一步探索。
本文選取了一定數量的有代表性的圖片對所提到的幾種較為主流且新穎的角點檢測算法進行評測,并對比實驗結果。本實驗主要基于python環境,借助角點平均重復率和角點數一致性作為性能評估標準,采用了FAST、SUSAN、SIFT、Shi-Tomas這幾種角點檢測算法進行試驗,檢測結果如圖2和圖3所示,圖4、圖5、圖6給出了針對不同場景的角點檢測結果。

圖2 角點重復率

圖3 角點數一致性

圖4 棋盤格角點檢測結果
本文根據角點檢測的方式對現有的角點檢測算法進行了分類與總結,對較為典型的角點檢測算法進行了詳細描述并對其較新的改進方法進行了分析。角點檢測算法的優劣主要看對同一角點在不同的環境和圖像變換下的識別能力,本文選擇4種較為典型的角點檢測算法進行了實驗并給出了實驗結果。
通過對現有角點檢測技術的總結分析以及對近幾年相關的改進算法描述為在實際應用中對角點檢測技術的選擇和改進方向提供了借鑒和參考,綜上所述可以看出各種角點檢測算法各有優劣,不同的應用需求對于角點檢測算法的選擇也不同。直接基于圖像的角點檢測一般是對圖像進行全局搜索,實際應用中對于快速、較準確的角點檢測需求使用直接基于圖像模板的方法完全可以滿足,基于邊緣輪廓的角點檢測方法較少,如果把基于邊緣輪廓的角點檢測方法和一些其他的變換方法相結合,在提高精度的同時就會降低計算速度,如果對角點的準確性、合理性等要求較高,可以考慮基于輪廓線的多尺度分析的方法。
角點涵蓋了圖像的重要特征信息,廣泛地應用于工業、考古學、農業等多個領域在三維重建中,常常利用多幅圖片的角點匹配獲取相機外參及被攝物體深度信息;在目標識別中,常常通過對特征點信息計算,獲取目標的抽象特征;ORB_SLAM算法實現的定位、追蹤和導航也是通過對周圍環境進行特征點提取與追蹤。雖然現存的角點檢測算法有很多,相關的改進方法也在不斷地被提出,但是隨著科技的不斷發展以及角點檢測應用領域越來越廣泛,對角點檢測算法的快速性、準確性、魯棒性、稠密度等要求越來越高,所以在實際應用中,我們仍可根據自己的需求進行改進。此外角點檢測算法的評估標準少且局限,亟待尋求一種較為公正的評估標準。