尚 碩,曹建榮,汪 明,鄭學(xué)漢,高 鶴,2
(1.山東建筑大學(xué) 信息與電氣工程學(xué)院,濟(jì)南 250101;2.山東正晨科技股份有限公司,濟(jì)南 250101)
在圖像處理領(lǐng)域,角點(diǎn)就是圖像中的極值點(diǎn),即像素值或者曲率值等屬性較為突出的點(diǎn),通常意義上一般稱邊緣線的交點(diǎn)為角點(diǎn),即局部鄰域的延展趨勢不同。角點(diǎn)包含了圖像的重要信息又稱為特征點(diǎn),角點(diǎn)檢測即對圖像的特征點(diǎn)進(jìn)行檢測,是在機(jī)器視覺系統(tǒng)中對圖像特征進(jìn)行提取的重要方法,對于圖像匹配、運(yùn)動(dòng)檢測、三維重建、目標(biāo)識別和視頻跟蹤等是必不可少的關(guān)鍵步驟。
角點(diǎn)檢測算法根據(jù)作用對象不同可以總結(jié)為基于圖像灰度、基于二值圖像、和基于輪廓曲線的角點(diǎn)檢測。應(yīng)用較為廣泛的是基于圖像灰度的角點(diǎn)檢測,主要針對像素點(diǎn)及其鄰域的灰度變化,又可細(xì)分為基于梯度、基于模板和基于模板梯度組合,直接對圖像灰度進(jìn)行角點(diǎn)檢測較為方便直接,這方面的角點(diǎn)檢測算法也較多。二值圖像是對圖像進(jìn)行二值化處理得到的圖像,常用于輔助其他算法,很少單獨(dú)使用。對于基于圖像輪廓的角點(diǎn)檢測算法,通常根據(jù)某個(gè)點(diǎn)位置的彎曲程度來判斷該點(diǎn)是否為角點(diǎn),一般將輪廓上點(diǎn)的曲率值以及幾何位置作為衡量標(biāo)準(zhǔn)。
基于圖像灰度的角點(diǎn)檢測算法一般將像素值的變化作為衡量標(biāo)準(zhǔn),認(rèn)為灰度變化大于一定閾值的點(diǎn)是角點(diǎn)?;趫D像灰度的角點(diǎn)檢測又細(xì)分為基于模板、基于梯度和基于模板梯度組合。基于模板的角點(diǎn)檢測算法,顧名思義,首先需要設(shè)定大小合適的窗口,然后根據(jù)需要?jiǎng)?chuàng)建一系列針對不同角點(diǎn)的模板,利用窗口沿圖像移動(dòng),依次與所創(chuàng)建的角點(diǎn)模板比較,如果相似則視為角點(diǎn),否則不認(rèn)為是角點(diǎn);基于梯度的方法是利用邊緣像素的梯度值來衡量角點(diǎn)是不是存在,圖像邊緣強(qiáng)度的變化以及邊緣方向的變化關(guān)系著角點(diǎn)計(jì)算數(shù)值的大小。
1.1.1 Harris角點(diǎn)檢測算法
Chris Harris 和 Mike Stephens[1]在1988年提出了Harris角點(diǎn)檢測算法,Harris角點(diǎn)檢測算法主要利用待測點(diǎn)的自相關(guān)矩陣進(jìn)行角點(diǎn)判斷,通俗來講就是在圖像上使用一個(gè)合適大小的窗口,使其沿隨意一個(gè)方向移動(dòng),根據(jù)移動(dòng)前與移動(dòng)后該窗口中圖像像素灰度變化的程度來確定角點(diǎn),如果該窗口沿著隨意一個(gè)方向的移動(dòng)都有很大程度的灰度值變化,那么就可以判定該窗口中可檢測到角點(diǎn)。具體步驟如下:
先將圖像I和窗函數(shù)w(x,y)進(jìn)行卷積,并求出圖像梯Ix,Iy,使用平方和函數(shù)E(u,v)定義窗口移動(dòng)前后像素灰度變化:
E(u,v)=
(1)
w(x,y)是窗函數(shù),可以是矩形窗或者高斯窗,I(x,y)是圖像像素值,u,v是移動(dòng)的像素距離。
將I(x+u,y+v)進(jìn)行一階泰勒展開:
I(x+u,y+v)=
(2)
代入公式(1)得:
E(u,v)=
(3)
則得到待檢測圖像點(diǎn)的自相關(guān)矩陣:
(4)
通過判斷自相關(guān)矩陣H的特征值大小確定角點(diǎn),如果計(jì)算自相關(guān)函數(shù)H的特征值分解會增加算法復(fù)雜度,這里選取Harris角點(diǎn)響應(yīng)函數(shù)為R=det(H)-αtrace(H)2,如果角點(diǎn)響應(yīng)函數(shù)R大于一定的閾值且該點(diǎn)為局部極大值點(diǎn),則認(rèn)為該點(diǎn)為角點(diǎn)。
Harris角點(diǎn)檢測運(yùn)算較為簡單且具有旋轉(zhuǎn)不變性和光照不變性,其提取的角點(diǎn)特征較為均勻、性能也相當(dāng)穩(wěn)定。但是閾值的設(shè)定對Harris算法的角點(diǎn)檢測效果有很大的影響,如果設(shè)定的閾值過小,很多非角點(diǎn)會被當(dāng)作角點(diǎn)檢測出來,造成檢測結(jié)果不準(zhǔn)確;如果設(shè)定的閾值過大,很多關(guān)鍵角點(diǎn)會被剔除掉,出現(xiàn)漏檢情況。同時(shí),Harris算法對圖像進(jìn)行圖像平滑處理采用的是可調(diào)窗口的高斯函數(shù),所以檢測效果極大程度地依賴于窗口大小的設(shè)定,但實(shí)際應(yīng)用中很難控制高斯窗口的大小。
針對算法的不足,眾多學(xué)者對經(jīng)典的Harris角點(diǎn)檢測算法進(jìn)行了研究和改進(jìn)。毛雁明等[2]針對Harris角點(diǎn)檢測算法的閾值設(shè)定提出了一種雙閾值法,即設(shè)定大小兩個(gè)閾值,對提取的角點(diǎn)進(jìn)行信息的對比,在得到正確的角點(diǎn)信息的基礎(chǔ)上還剔除了部分偽角點(diǎn),剩余的偽角點(diǎn)使用 SUSAN角點(diǎn)檢測算法進(jìn)行剔除,對噪聲展現(xiàn)出很好的魯棒性。李鵬程等[3]通過替換Harris角點(diǎn)檢測算法的角點(diǎn)響應(yīng)函數(shù)以及非極大值抑制的模板區(qū)域?yàn)閳A形,避免了設(shè)置焦點(diǎn)響應(yīng)函數(shù)中的經(jīng)驗(yàn)常數(shù),并且如果對圖像進(jìn)行旋轉(zhuǎn)變換,根據(jù)圓的性質(zhì),這并不會對檢測結(jié)果產(chǎn)生很大影響。韓松奇等[4]使用B樣條函數(shù)替代了Harris角點(diǎn)檢測算法中的高斯窗口函數(shù),解決了原算法對于使用高斯窗口所帶來的一系列問題,采用自適應(yīng)閾值的方法,解決了原算法需要不斷調(diào)試來確定閾值的問題,同時(shí)通過對角點(diǎn)采取預(yù)篩選,提高了算法的檢測速度。N次B樣條函數(shù)定義為:
Bn(x)=
(5)
u(x)是階躍函數(shù),n是B樣條函數(shù)的階數(shù)。離散式數(shù)字圖像的濾波公式為:
g(x,y)=
(6)
f(i,j)是像素 (i,j)處的圖像灰度值,Bk*l(x-i,y-i)是B‘條濾波算子。孫萬春等[5]提出一種自適應(yīng)灰度差分均值的思想,有效的提高了Harris角點(diǎn)檢測算法的抗噪性能。楊立偉等[6]設(shè)定窗口遍歷圖像,求取中心像素點(diǎn)與其鄰域內(nèi)像素點(diǎn)的灰度值差,并手動(dòng)設(shè)定閾值作為衡量標(biāo)準(zhǔn),降低了算法的復(fù)雜度,解決了Harris角點(diǎn)檢測算法檢測時(shí)間過長的問題。高帥等[7]首先對圖像抽骨細(xì)化,然后使用一個(gè)3*3的框進(jìn)行角點(diǎn)預(yù)篩選并改進(jìn)了角點(diǎn)響應(yīng)函數(shù),排除了很多偽角點(diǎn),提高了運(yùn)算效率。Tao Luo等[8]將Harris角點(diǎn)檢測算法與極大值抑制和FAST角點(diǎn)檢測算法結(jié)合了起來,進(jìn)行非角點(diǎn)剔除提高了運(yùn)算效率和魯棒性。針對波前編碼雙目攝像機(jī)成像引起的圖像缺失和冗余,Qinxiao Liu等[9]在Harris角點(diǎn)檢測算法的基礎(chǔ)上使用特征值約束并使閾值盡可能小,很好的提高了角點(diǎn)定位的準(zhǔn)確度并有一定的準(zhǔn)確度。Prateek Sikka等[10]通過結(jié)合HLS設(shè)計(jì)方法提出一種實(shí)時(shí)、面積優(yōu)化的Harris角點(diǎn)檢測算法,對于相同的目標(biāo)板所得的結(jié)果在面積和速度方面都更優(yōu)。Chuan Luo等[11]使用Canny邊緣檢測和灰度差分對圖片進(jìn)行預(yù)處理,提高了Harris角點(diǎn)檢測算法的檢測效率、抗噪聲和旋轉(zhuǎn)不變性。
Shi 和Tomasi提出Shi-Tomasi角點(diǎn)檢測算法,該算法是對Harris角點(diǎn)檢測算法的改進(jìn),通過計(jì)算像素點(diǎn)自相關(guān)矩陣的特征值,比較特征值與閾值的大小關(guān)系,若均大于閾值,那么認(rèn)為該像素點(diǎn)為角點(diǎn),取得了更好的效果。胡濤等[12]使用抑制半徑的方法對Shi-Tomasi角點(diǎn)檢測算法進(jìn)行改進(jìn),提高了對PCB圖像角點(diǎn)檢測的正確率。李雨嫣等[13]將Shi-Tomasi角點(diǎn)檢測算法結(jié)合不同的并行算法,解決了Shi-Tomasi角點(diǎn)檢測算法運(yùn)算量大、耗時(shí)長的問題。彭曉星等[14]通過構(gòu)建圖像金字塔實(shí)現(xiàn)在不同尺度下Shi-Tomasi角點(diǎn)的提取,形成候選點(diǎn)集,對候選角點(diǎn)采用雙模板組合的方式去除偽角點(diǎn),實(shí)現(xiàn)精提取,增強(qiáng)了圖像的抗噪性以及提升了提取角點(diǎn)的精確性。
1.1.2 SIFT角點(diǎn)檢測算法
SIFT(Scale-invariant feature transform)是一種較為常用的角點(diǎn)檢測算法,在Opencv中可以直接調(diào)用,該算法可以很方便獲取一個(gè)特征點(diǎn)的在尺度和方向上的描述子。SIFT角點(diǎn)檢測算法需要在由圖像和高斯函數(shù)卷積生成的尺度空間上進(jìn)行檢測,高斯函數(shù)的計(jì)算公式為:
(7)
圖像尺度空間L(x,y)的計(jì)算公式為:
L(x,y,σ)=G(x,y,σ)*I(x,y)
(8)
1)首先通過創(chuàng)建高斯金字塔和差分高斯金字塔來創(chuàng)建尺度空間(DOG)。高斯金字塔第一組第一層最清晰,大小是原圖像的二倍,而第二層是對第一層的高斯濾波操作,對新生成的圖層重復(fù)高斯濾波操作構(gòu)成一個(gè)組,將第一組最模糊的一層進(jìn)行二倍下采樣作為下一組的初始圖象重復(fù)高斯濾波操作。差分高斯金字塔是高斯金字塔通過前后兩層的差形成的圖像構(gòu)成的,比高斯金字塔層數(shù)少一層,計(jì)算公式如下:
D(x,y,σ)=
(G(x,y,kσ)-G(x,y,σ))*I(x,y)=
L(x,y,kσ)-L(x,y,σ)
(9)
2)在完成尺度空間構(gòu)建(DOG)之后,對DOG中的每一個(gè)點(diǎn)進(jìn)行檢測,判斷是否滿足極值條件,即讓待測點(diǎn)與三維空間中的相鄰像素點(diǎn)進(jìn)行比較,即該像素點(diǎn)所在層鄰域的8個(gè)像素點(diǎn)以及其上下兩層對應(yīng)點(diǎn)及其周圍的9個(gè)像素點(diǎn),判斷該點(diǎn)是否為這26個(gè)點(diǎn)中的極值點(diǎn),若是就認(rèn)為該點(diǎn)是檢測到的一個(gè)極值點(diǎn)。
3)對極值點(diǎn)進(jìn)行三維二次函數(shù)的擬合,這樣可以很容易地定位角點(diǎn)、剔除邊緣響應(yīng)產(chǎn)生的偽角點(diǎn),同時(shí)還可以剔除對比度較低的角點(diǎn),這樣可以獲得匹配效果的增強(qiáng)以及較強(qiáng)的魯棒性??臻g尺度函數(shù)二階泰勒展開式為:
D(x,y,σ)=
(10)
使其導(dǎo)數(shù)為0得極值點(diǎn)的位置:
(11)
若D(xmax)≤0.03,則為受噪聲干擾的低對比點(diǎn),認(rèn)為是非角點(diǎn)。如果高斯差分算子選擇不當(dāng),會對極值點(diǎn)產(chǎn)生很大的影響,通過Hessian矩陣H計(jì)算主曲率,公式如下:
(12)
D的主曲率和Hessian矩陣的特征值是正比關(guān)系,令α和β分別為大小兩個(gè)特征值,有α=γβ:
Tr(H)=Dxx+Dyy=α+β
(13)
Det(H)=DxxDyy-(Dxy)2=αβ
(14)
(15)
4)為了滿足當(dāng)圖片旋轉(zhuǎn)時(shí)提取的角點(diǎn)不變,則需要確定角點(diǎn)的方向,特征點(diǎn)(x,y)處的梯度值m(x,y)和梯度方向角θ(x,y)通過下式求得:
m(x,y)=
(16)
(17)
其中:L(x,y)表示特征點(diǎn)(x,y)的尺度,用直方圖統(tǒng)計(jì)梯度值和梯度方向,橫坐標(biāo)表示區(qū)間,縱坐標(biāo)表示在這個(gè)區(qū)間的梯度值的和,可以很方地看出角點(diǎn)的主方向是最高一柱的方向,該角點(diǎn)的輔助方向?yàn)橹禐樽罡咧档?0%及以上的另一柱的方向。
5)為了使圖像旋轉(zhuǎn)時(shí)特征向量保持不變,旋轉(zhuǎn)角點(diǎn)所在的鄰域圖像,使其主方向旋轉(zhuǎn)到坐標(biāo)軸的方向,將特征點(diǎn)所在正方形區(qū)域劃分為16個(gè)塊,用直方圖統(tǒng)計(jì)每個(gè)塊的梯度值和梯度方向,可以得到一個(gè)包含八個(gè)方向的 128 維的特征描述子。
SIFT角點(diǎn)檢測算法具有尺度不變性、旋轉(zhuǎn)不變性,同時(shí)當(dāng)圖像產(chǎn)生亮度變化、對比度變化以及視角變化,對SIFT算法的角點(diǎn)檢測效果影響也很小,但是SIFT算法復(fù)雜度高,耗時(shí)長。
1.1.3 SURF角點(diǎn)檢測算法
SURF(Speeded-Up Robust Features)角點(diǎn)檢測算法是對SIFT角點(diǎn)檢測算法的改進(jìn),不僅具有SIFT算法檢測準(zhǔn)確性高、魯棒性強(qiáng)的優(yōu)點(diǎn),而且還解決了SIFT角點(diǎn)檢測算法計(jì)算的復(fù)雜度高和耗時(shí)長的問題。具體步驟為:
1)構(gòu)造變換圖。不同于SIFT角點(diǎn)檢測算法是計(jì)算圖像的尺度變換空間求取DOG圖像,SURF角點(diǎn)檢測算法計(jì)算圖像像素點(diǎn)的Hession矩陣行列式求取近似圖像。計(jì)算圖中像素點(diǎn)的Hassion矩陣表示為:
(18)
Lxx(x,σ),Lyy(x,σ),Lxy(x,σ)是圖像與高斯函數(shù)卷積后進(jìn)行二次求導(dǎo)所得,通過計(jì)算圖像像素點(diǎn)的Hession矩陣行列式求取近似圖像,計(jì)算公式為:
det(H)=LxxLyy-(0.9Lxy)2
(19)
0.9為經(jīng)驗(yàn)值。該近似模板可以很好地代替高斯濾波和二階導(dǎo)數(shù)的計(jì)算這兩個(gè)步驟。
2)構(gòu)造高斯金字塔。SIFT角點(diǎn)檢測算法同一組中圖像大小和高斯模板大小不變,改變的只是尺度σ的大小,而在SURF中圖像大小不變,沒有降采樣,而是改變高斯模板的尺寸和尺度σ,角點(diǎn)檢測的速度取得了提高。
3)角點(diǎn)定位。首先將步驟(1)獲得的的每個(gè)點(diǎn)和它所在層周圍及上下兩層對應(yīng)的共26個(gè)像素點(diǎn)的值作比較,若它是極值點(diǎn),則作為候選鍵點(diǎn),否則忽略。然后,利用3維線性插值法獲取亞像素級的角點(diǎn),并且增加極值,剔除掉表現(xiàn)不好、不合理的角點(diǎn),最終只保留幾個(gè)特征最好的點(diǎn)。
4)確定角點(diǎn)的主方向。為了保證圖片旋轉(zhuǎn)時(shí),角點(diǎn)檢測的結(jié)果不變,采取統(tǒng)計(jì)角點(diǎn)領(lǐng)域內(nèi)的Harr小波響應(yīng)的方法。如圖1所示,計(jì)算角點(diǎn)為中心的圓內(nèi)的Haar小波響應(yīng),并選擇角度為60度去遍歷這個(gè)圓形區(qū)域,并把圓內(nèi)每60度內(nèi)所有點(diǎn)的x和y方向的Haar小波響應(yīng)值賦高斯權(quán)重系數(shù)后相加,得到一個(gè)矢量,最長矢量的方向就是該角點(diǎn)的方向。
圖1 示意圖
5)在特征點(diǎn)周圍取一個(gè)正方形框,并帶有上步所檢測出來的主方向。以主方向?yàn)樨Q直方向,把該框分為16個(gè)子區(qū)域并計(jì)算haar小波特征,SURF角點(diǎn)檢測算法得到的特征點(diǎn)描述子是16*4=64維的向量,是SIFT角點(diǎn)檢測算法的特征描述子維度的二分之一,這將大大提高特征匹配的速度。
SURF角點(diǎn)檢測算法通過Henssian矩陣求取近似圖像并通過Harr小波求取圖像角點(diǎn)方向,具有很好的旋轉(zhuǎn)不變性和尺度不變性。但是像素點(diǎn)鄰域的梯度方向?qū)屈c(diǎn)的主方向的確定影響很大,從而對角點(diǎn)特征向量的求取有很大影響,更重要的是,主方向不太大的偏差角度也會被特征匹配過程放大誤差,在實(shí)際應(yīng)用中是導(dǎo)致匹配失敗的重要原因。此外,特征向量的提取還依賴于圖像的尺度空間,需要選擇合適的圖像金字塔的層數(shù),否則不利于角點(diǎn)的提取。
1.1.4 SUSAN角點(diǎn)檢測方法
SUSAN算法是1997年由牛津大學(xué)的Smith等人[15]提出的,具體步驟如下:
1)確定USAN區(qū)域,選擇一個(gè)包含37個(gè)像素點(diǎn)大小的圓形模板遍歷待測圖像,通過逐一比較圓形模板對應(yīng)圖像中每一個(gè)像素點(diǎn)的灰度值和中心像素點(diǎn)的灰度值來確定。公式如下:
(20)
(21)
(22)
(23)
角點(diǎn)誤報(bào)檢查:通過計(jì)算USAN區(qū)域的重心對候選角點(diǎn)進(jìn)行約束,從而減少偽角點(diǎn)的產(chǎn)生。
4)引入非極值抑制進(jìn)行角點(diǎn)篩選。
SUSAN角點(diǎn)檢測能力較強(qiáng)但是誤檢率也較高。鄭昊等[16]通過結(jié)合Canny邊緣檢測提高了SUSAN角點(diǎn)檢測算法的檢測效率。
1.1.5 FAST角點(diǎn)檢測方法
Edward Rosten和Tom Drummond[17]在2006年提出了FAST(加速段測試的特征)算法,F(xiàn)AST角點(diǎn)檢測算法基本思路是比較某像素值與其鄰域內(nèi)足夠多的像素值的大小,如果相差較大,則認(rèn)為該像素可能是角點(diǎn)。具體步驟如下:
1)先選取一個(gè)像素點(diǎn)P,用I(p)表示其灰度值。以像素p為中心,畫一個(gè)包含16個(gè)像素點(diǎn)的圓,將像素點(diǎn)記作p1,…,p16,灰度值分別表示為I(p1),…,I(p16)。
2)選定一個(gè)閾值為t。
3)首先計(jì)算p1、p5、p9、p13(分別在4個(gè)方向的4個(gè)點(diǎn))與中心點(diǎn)p的像素值差,如果有至少3個(gè)像素點(diǎn)的差不低于門限值,則認(rèn)為是候選特征點(diǎn),可以進(jìn)行步驟(4)的篩選;否則,認(rèn)為是非角點(diǎn)。
4)若p是步驟(3)所確定的候選點(diǎn),則計(jì)算圓內(nèi)除中心點(diǎn)外所有點(diǎn)與中心點(diǎn)p的像素值差,如果有至少9個(gè)點(diǎn)的像素值不低于門限值,我們就認(rèn)為是特征點(diǎn)。一般取12個(gè)點(diǎn),并且這個(gè)標(biāo)準(zhǔn)被定義為FAST-12,但是在實(shí)際應(yīng)用中選9個(gè)點(diǎn)一般能取得較好的效果。
5)對整個(gè)圖像重復(fù)1)到4)步。
6)最終得到的角點(diǎn)可能存在相鄰角點(diǎn),即小區(qū)域重復(fù)的特征點(diǎn),這里應(yīng)用非極大值抑制的方法進(jìn)行剔除。計(jì)算特征點(diǎn)像素值與16個(gè)點(diǎn)像素值之差,即FAST得分值,如果有多個(gè)特征點(diǎn),保留FAST得分值最大的特征點(diǎn)。
FAST角點(diǎn)檢測算法實(shí)現(xiàn)思路簡單且計(jì)算速度相較于其他算法也很快,但仍存在不足。第一,先進(jìn)行四點(diǎn)檢測的預(yù)篩選,后進(jìn)行十六點(diǎn)檢測篩選時(shí)存在重復(fù)計(jì)算的問題;第二,F(xiàn)AST角點(diǎn)檢測算法提取的角點(diǎn)僅僅是基于灰度值計(jì)算的,不具有旋轉(zhuǎn)不變性;第三,在初步篩選獲取候選角點(diǎn)時(shí)可能會舍棄掉角點(diǎn)從而出現(xiàn)漏檢情況;第四,對圖像噪聲不具有魯棒性,且對閾值的設(shè)定要求很高。Rosten 2010年提出了對FAST算法的改進(jìn)FAST-ER,李祥杰等[18]基于FAST-ER改進(jìn)算法實(shí)現(xiàn)了增強(qiáng)現(xiàn)實(shí)空間注冊技術(shù)研究,主要改進(jìn)在于使用ID3決策樹策略對FAST進(jìn)行了加速,使得其更快。劉志海等[19]通過對圖像進(jìn)行區(qū)域分割再使用OTSU算法得到每個(gè)區(qū)域的閾值提高了FAST角點(diǎn)檢測算法的檢測效率和檢測精度。Wenyi Xiong等[20]針對SAR圖像斑點(diǎn)噪聲提出了一種改進(jìn)的FAST角點(diǎn)檢測算法,首先通過萬有引力定律確定候選角點(diǎn)的方向,其次候選角點(diǎn)與其周圍像素點(diǎn)的相似度來抑制受SAR相干斑噪聲影響的點(diǎn),取得了很好的抑制效果。
1.1.6 其他基于圖像灰度的角點(diǎn)檢測算法
左偉等[21]提出了基于多尺度斜率差分的間接角點(diǎn)檢測算法,先對圖像應(yīng)用Canny邊緣檢測算法,再在橫坐標(biāo)軸和豎坐標(biāo)軸方向?qū)喞c(diǎn)進(jìn)行分解,然后分別計(jì)算3個(gè)不同尺度下的斜率差分均值并求取乘積獲取角點(diǎn)響應(yīng)值,最后使用自適應(yīng)閾值的方法進(jìn)行判別,對圖像噪聲具有一定的魯棒性。高永燕等[22]提出了基于圖像金字塔的AGDDs與CNN級聯(lián)的角點(diǎn)檢測算法,將數(shù)字圖像處理技術(shù)與深度學(xué)習(xí)結(jié)合起來,在角點(diǎn)重復(fù)率、定位誤差等評估標(biāo)準(zhǔn)上表現(xiàn)良好。Junfeng Jing等[23]根據(jù)角點(diǎn)的特征設(shè)計(jì)了一種角點(diǎn)特征表示網(wǎng)絡(luò),提出一種新的損失函數(shù)以最小化原始圖像塊與變換后圖像塊之間的焦點(diǎn)位置定位誤差,在檢測精度、定位精度、平均重復(fù)性等標(biāo)準(zhǔn)下性能較為優(yōu)越。Hao Wu等[24]提出一種模擬真實(shí)成像過程的合成訓(xùn)練數(shù)據(jù)生成方法解決了深度網(wǎng)絡(luò)缺乏訓(xùn)練數(shù)據(jù)的問題,并且在檢測過程中可以精確地獲得亞像素焦點(diǎn)位置。Xizuo Dan等[25]提出一種基于EDLines 算法的棋盤角檢測方法,實(shí)驗(yàn)表明該算法在角點(diǎn)檢測中不存在漏檢和冗余。Liang Wang等[26]提出一種基于深度學(xué)習(xí)的自適應(yīng)角點(diǎn)檢測方法,首先通過FasterR-CNN模型檢測目標(biāo)獲取目標(biāo)區(qū)域坐標(biāo),然后在該區(qū)域上采用自適應(yīng)Harris算法檢測角點(diǎn),該方法不僅避免了復(fù)雜背景的影響還可以提高角落檢測的效率。Zhang Yanling等[27]提出一種基于模板的棋盤角檢測方法,首先通過棋盤的特點(diǎn)構(gòu)造兩種角點(diǎn)原型模板,通過卷積核與圖像的卷積計(jì)算像素點(diǎn)與角點(diǎn)之間的相似度進(jìn)而區(qū)分角點(diǎn)非角點(diǎn),采非極大值抑制和梯度統(tǒng)計(jì)算法進(jìn)一步篩選出目標(biāo)角點(diǎn),具有較強(qiáng)的抗干擾能力。Mingzhe Wang等[28]提出了一種新型的濾波器來增強(qiáng)角點(diǎn)并同時(shí)抑制邊緣和噪聲,簡化了角點(diǎn)檢測架構(gòu)和提高了其并行計(jì)算性能。Kitchen和Rosenfeld[29]提出的角點(diǎn)檢測算法既基于圖像的輪廓曲線又基于灰度圖像的梯度,他們提出了通過計(jì)算圖像輪廓曲線的曲率與灰度變化的梯度值的乘積來計(jì)算角點(diǎn)響應(yīng)函數(shù)的方法,即Kitchen-Rosenfeld角點(diǎn)檢測算法。KLT角點(diǎn)跟蹤算法[30]全稱Kanade-Lucas-Tomasi Tracking,很好地適用于視頻圖像序列角點(diǎn)檢測問題,首先需要使用Shi-Tomasi角點(diǎn)檢測算法檢測圖像序列中首幅圖像的角點(diǎn),然后使用KLT算法進(jìn)行追蹤,函數(shù)會返回當(dāng)前幀的點(diǎn),這些點(diǎn)帶有狀態(tài)1或者0,如果在當(dāng)前幀找到了上一幀中的點(diǎn),那么這個(gè)點(diǎn)的狀態(tài)就是1,否則就是0。
劉文予等人[31]通過研究圖像的形態(tài)骨架,提出了一種基于二值圖像的角點(diǎn)檢測方法,首先通過對圖像進(jìn)行二值化處理獲取圖像的基本外形視作多邊形,那么其骨架的延長線上必然存在特征點(diǎn),并認(rèn)為骨架點(diǎn)的最大圓盤半徑為0的點(diǎn)是特征點(diǎn)?;诙祱D像的處理相較于直接基于圖像灰度,計(jì)算過程變得更加簡單,大大提高了計(jì)算的效率,并且能夠有效地確算法的實(shí)時(shí)性。這里需要說明,基于圖像灰度的一些算法對于基于二值圖像的處理也適用。二值圖像在實(shí)際應(yīng)用中應(yīng)用方向較少,所以僅僅基于二值圖像的角點(diǎn)檢測算法較為稀少,多用于輔助其他角點(diǎn)檢測方法。
1.3.1 CSS角點(diǎn)檢測算法
基于曲率尺度空間(CSS)的角點(diǎn)檢測算法是由MOKHTARIAN F等在1998年提出的,是基于輪廓曲線的曲率在局部區(qū)域上進(jìn)行特征點(diǎn)的檢測,對角點(diǎn)的位置采用多尺度追蹤搜索?;¢L表示曲線為:
L(μ)=(x(μ),y(μ))
(24)
則曲線隨著尺度變化的表達(dá)式為:
Lσ=(x(μ,σ),y(μ,σ))
(25)
其中,x,y分別為輪廓曲線上的點(diǎn)的橫、縱坐標(biāo),x(μ,σ)=x(μ)*g(μ,σ),y(μ,σ)=y(μ)*g(μ,σ)。曲率k表示為:
(26)
通過Canny邊緣檢測提取出圖像的邊緣,在一個(gè)足夠大的σ下通過上述公式計(jì)算每個(gè)點(diǎn)的曲率大小,當(dāng)某一點(diǎn)的曲率的絕對值大于曲率閾值且大于相鄰點(diǎn)最小曲率點(diǎn)處的2倍時(shí),確定為角點(diǎn)。
CSS角點(diǎn)檢測算法可以獲得較為準(zhǔn)確的角點(diǎn)的位置,并且算法復(fù)雜度低、計(jì)算量小,角點(diǎn)檢測精度高,有很好的匹配效果。但是仍有不足,第一,直接對圖像邊緣進(jìn)行計(jì)算,不能夠準(zhǔn)確識別噪聲和圖像邊緣,很容易產(chǎn)生偽角點(diǎn);第二,在高尺度上對圖像進(jìn)行高斯濾波,會模糊曲線細(xì)節(jié),影響角點(diǎn)的位置確定。Changli Mai等[32]提出一種基于區(qū)域質(zhì)心提取的角點(diǎn)檢測算法對于局部噪聲和水面成像畸變有很好的魯棒性。
1.3.2 CPDA角點(diǎn)檢測算法
基于點(diǎn)到弦距離累積(CPDA)角點(diǎn)檢測算法和CSS角點(diǎn)檢測算法類似,都是對預(yù)先得到的邊緣曲線進(jìn)行角點(diǎn)檢測,不同于CSS角點(diǎn)檢測算法的曲度計(jì)算方法,CPDA角點(diǎn)檢測算法是利用點(diǎn)弦距離表示邊緣的曲度,從而實(shí)現(xiàn)角點(diǎn)定位。邊緣曲線上存在n個(gè)像素點(diǎn)分別為p1,p2,…,pn,pk-lpk位置的弦為cl,計(jì)算pk到cl的距離為dk,k-l,然后弦cl向曲線方向移動(dòng)一點(diǎn)到pk-l+1pk+1,同樣的方法計(jì)算點(diǎn)到弦的距離,依次移動(dòng)到pkpk+l的位置結(jié)束,計(jì)算所有距離的和:
(27)
如果選取的弦長過小,會導(dǎo)致點(diǎn)與點(diǎn)間距太小而使角點(diǎn)的位置有誤差,就會提取到偽角點(diǎn);選擇的弦長太大,大概率會把曲線的峰谷認(rèn)作成一個(gè)特征點(diǎn)。故基于此CPDA角點(diǎn)檢測算法選擇3種弦長,計(jì)算出3個(gè)曲度值,并對其進(jìn)行歸一化處理,然后求取乘積。曲度乘積項(xiàng)公式為:
(28)
(29)
如果計(jì)算得到的值為所計(jì)算區(qū)域的最大值,那么初步認(rèn)為該點(diǎn)為角點(diǎn),然后使用自適應(yīng)曲度閾值進(jìn)行篩選。
CPDA角點(diǎn)檢測算法雖然很好地解決了CSS角點(diǎn)檢測算法存在的問題,但是其存在相鄰角點(diǎn)檢測不準(zhǔn)確、自適應(yīng)曲度閾值不穩(wěn)定、3種不同的弦長難以確定等問題,不少研究者就此做出了改進(jìn)。白萌萌等[33]提出一種對單一弦長進(jìn)行角點(diǎn)曲率估計(jì)的方法,即選擇最優(yōu)單弦長進(jìn)行曲率估計(jì),克服CPDA角點(diǎn)檢測算法需要確定合適的3種弦長的問題。蔣延杰等[34]通過計(jì)算每條邊緣線上所有像素點(diǎn)到弦的歐氏距離,選擇最大點(diǎn)弦距離大于所設(shè)閾值時(shí)的像素點(diǎn)作為候選角點(diǎn),利用非極大值抑制的方法剔除偽角點(diǎn)并得到最終角點(diǎn),取得了和CPDA角點(diǎn)檢測算法相似的檢測結(jié)果。
1.3.3 ERCM角點(diǎn)檢測算法
最小特征值方法是通過求取一段輪廓曲線的協(xié)方差方程,分析協(xié)方差方程的最小特征值大小來判斷是否為角點(diǎn),但其并沒有尺度不變性。張世征等人[35]提出一種新的基于正則化協(xié)方差矩陣最大和最小特征值的角點(diǎn)檢測方案(ERCM),首先對協(xié)方差方程進(jìn)行正則化:
(30)
2019年Shizheng Zhang等[36]提出一種基于切線到點(diǎn)距離累積技術(shù)的角點(diǎn)檢測方法,在平均重復(fù)率、定位誤差和精度指數(shù)評判標(biāo)準(zhǔn)下都展現(xiàn)了優(yōu)越的有效性和效率。2020年Shizheng Zhang等[37]提出一種利用點(diǎn)到質(zhì)心的距離技術(shù)(PCD)進(jìn)行角點(diǎn)檢測,通過實(shí)驗(yàn)對比,PCD算法在平均重復(fù)率和定位誤差這兩個(gè)角點(diǎn)檢測指標(biāo)上是高效的。2021年Shizheng Zhang等[38]又提出一種基于平行四邊形對角線比值(RPD)的角點(diǎn)檢測算法,檢測速度和精度都獲得了較為理想的效果。
1.3.4 其他基于輪廓曲線的角點(diǎn)檢測方法
Jiwu Wang等[39]提出一種基于角度的角點(diǎn)檢測算法,首先通過CSS算法設(shè)定合適的閾值提取候選角點(diǎn),然后計(jì)算距離較遠(yuǎn)像素處候選角點(diǎn)角度值并利用該閾值進(jìn)行過濾,能夠準(zhǔn)確提取出所需角點(diǎn)。Zhiyong Peng等[40]提出一種CCDA角點(diǎn)檢測算法,利用級聯(lián)分類器設(shè)計(jì)一種角點(diǎn)檢測器可以快速丟棄非角點(diǎn)像素,利用梯度方向獲取角點(diǎn),利用二階導(dǎo)數(shù)非極大值抑制的方法獲取準(zhǔn)確的角點(diǎn),該算法獲得了與FAST算法相當(dāng)?shù)乃俣纫约氨菻arris算法更優(yōu)的精度和魯棒性。Seyed Mostafa Mousavi Kahaki等[41]提出提出均值投影變換(MPT)作為角分類器和拋物線擬合近似來形成魯棒檢測器,獲得了較好地檢測結(jié)果。Shyh Wei Teng等[42]使用簡單的三角形理論和距離計(jì)算,提出了兩種有效且高效的角點(diǎn)檢測方法,檢測結(jié)果在重復(fù)性方面優(yōu)于CPDA,且具有較低的定位誤差。
不同角點(diǎn)檢測算法具有不同的優(yōu)越性但同時(shí)也有各自的缺陷,通過不同角點(diǎn)檢測算法的結(jié)合可以實(shí)現(xiàn)優(yōu)缺點(diǎn)互補(bǔ),國內(nèi)外許多研究者就此展開研究,并取得了更好的檢測效果。胡曉彤等[43]提出一種基于Harris - CPDA的角點(diǎn)檢測算法,將Harris角點(diǎn)算法檢測同CPDA角點(diǎn)檢測算法結(jié)合起來,通過多次篩選候選角點(diǎn),獲得更精準(zhǔn)的角點(diǎn)檢測結(jié)果。蔡欣展等[44]將Harris和FAST角點(diǎn)檢測算法結(jié)合了起來,先使用FAST角點(diǎn)檢測算法進(jìn)行特征點(diǎn)預(yù)篩選,再通過一種抑制半徑處理方法進(jìn)行Harris角點(diǎn)篩選,提高了Harris算法的運(yùn)算速度,很好地解決Harris算法易產(chǎn)生角點(diǎn)聚簇現(xiàn)象的問題。吳祿慎等[45]將基于CSS的角點(diǎn)檢測技術(shù)和SIFT角點(diǎn)檢測技術(shù)結(jié)合起來,先通過CSS的角點(diǎn)檢測技術(shù)檢測出角點(diǎn),然后采用 SIFT 方法確定主方向,表現(xiàn)出良好的尺度不變性、旋轉(zhuǎn)不變性和光照不變性,且匹配效果較好。Yifan Wang等[46]提出一種FAST-Harris融合角點(diǎn)檢測算法,首先采用FAST算法獲取候選角點(diǎn),然后使用Harris算法進(jìn)行篩選,最后利用非極大抑制獲取真實(shí)角點(diǎn),獲得了較高的檢測速度和定位精度,在有損JPEG壓縮中魯棒性最好。
各種角點(diǎn)技術(shù)總結(jié)見表1。
表1 角點(diǎn)檢測技術(shù)綜合性能總結(jié)
角點(diǎn)檢測算法的性能評估主要包括總角點(diǎn)數(shù)、偽角點(diǎn)數(shù)、漏檢角點(diǎn)數(shù)等,對于角點(diǎn)較少的圖片的角點(diǎn)檢測我們可以通過肉眼判斷,但大部分實(shí)際的應(yīng)用場景復(fù)雜且角點(diǎn)較多,我們很難通過肉眼判斷檢測結(jié)果的準(zhǔn)確性,所以需要性能評估標(biāo)準(zhǔn)來判斷。多數(shù)研究者使用標(biāo)準(zhǔn)圖像庫中的“積木”圖片,根據(jù)給定的角點(diǎn)信息進(jìn)行比對。角點(diǎn)重復(fù)率是常用的角點(diǎn)檢測算法的評估標(biāo)準(zhǔn),對給定圖片進(jìn)行角點(diǎn)的提取,角點(diǎn)數(shù)記為No,然后對圖形進(jìn)行仿射變換、旋轉(zhuǎn)變換、Jpeg壓縮、尺度變化等,Nt是變換后檢測角點(diǎn)的個(gè)數(shù),Nr是對變換前后提取的角點(diǎn)匹配得到匹配角點(diǎn)數(shù),角點(diǎn)重復(fù)率如下:
(31)
Mokhtarian等[47]提出了角點(diǎn)數(shù)一致性 (CCN,consistence of corner numbers)的概念:
CNN=100%×1.1|Νt-Νo|
(32)
CNN數(shù)值越大表明角點(diǎn)檢測效果越好。Awrangjeb等[48]提在CCN基礎(chǔ)上提出平均重復(fù)率(average repeat ability)與定位誤差(localization error):
(33)
(34)
其中:(xoi,yoi)和(xti,yti)為變換圖像與原圖像相應(yīng)角點(diǎn)的坐標(biāo)位置?,F(xiàn)有關(guān)于角點(diǎn)檢測算法性能評估標(biāo)準(zhǔn)還比較有限且不夠公正,還需進(jìn)一步探索。
本文選取了一定數(shù)量的有代表性的圖片對所提到的幾種較為主流且新穎的角點(diǎn)檢測算法進(jìn)行評測,并對比實(shí)驗(yàn)結(jié)果。本實(shí)驗(yàn)主要基于python環(huán)境,借助角點(diǎn)平均重復(fù)率和角點(diǎn)數(shù)一致性作為性能評估標(biāo)準(zhǔn),采用了FAST、SUSAN、SIFT、Shi-Tomas這幾種角點(diǎn)檢測算法進(jìn)行試驗(yàn),檢測結(jié)果如圖2和圖3所示,圖4、圖5、圖6給出了針對不同場景的角點(diǎn)檢測結(jié)果。
圖2 角點(diǎn)重復(fù)率
圖3 角點(diǎn)數(shù)一致性
圖4 棋盤格角點(diǎn)檢測結(jié)果
本文根據(jù)角點(diǎn)檢測的方式對現(xiàn)有的角點(diǎn)檢測算法進(jìn)行了分類與總結(jié),對較為典型的角點(diǎn)檢測算法進(jìn)行了詳細(xì)描述并對其較新的改進(jìn)方法進(jìn)行了分析。角點(diǎn)檢測算法的優(yōu)劣主要看對同一角點(diǎn)在不同的環(huán)境和圖像變換下的識別能力,本文選擇4種較為典型的角點(diǎn)檢測算法進(jìn)行了實(shí)驗(yàn)并給出了實(shí)驗(yàn)結(jié)果。
通過對現(xiàn)有角點(diǎn)檢測技術(shù)的總結(jié)分析以及對近幾年相關(guān)的改進(jìn)算法描述為在實(shí)際應(yīng)用中對角點(diǎn)檢測技術(shù)的選擇和改進(jìn)方向提供了借鑒和參考,綜上所述可以看出各種角點(diǎn)檢測算法各有優(yōu)劣,不同的應(yīng)用需求對于角點(diǎn)檢測算法的選擇也不同。直接基于圖像的角點(diǎn)檢測一般是對圖像進(jìn)行全局搜索,實(shí)際應(yīng)用中對于快速、較準(zhǔn)確的角點(diǎn)檢測需求使用直接基于圖像模板的方法完全可以滿足,基于邊緣輪廓的角點(diǎn)檢測方法較少,如果把基于邊緣輪廓的角點(diǎn)檢測方法和一些其他的變換方法相結(jié)合,在提高精度的同時(shí)就會降低計(jì)算速度,如果對角點(diǎn)的準(zhǔn)確性、合理性等要求較高,可以考慮基于輪廓線的多尺度分析的方法。
角點(diǎn)涵蓋了圖像的重要特征信息,廣泛地應(yīng)用于工業(yè)、考古學(xué)、農(nóng)業(yè)等多個(gè)領(lǐng)域在三維重建中,常常利用多幅圖片的角點(diǎn)匹配獲取相機(jī)外參及被攝物體深度信息;在目標(biāo)識別中,常常通過對特征點(diǎn)信息計(jì)算,獲取目標(biāo)的抽象特征;ORB_SLAM算法實(shí)現(xiàn)的定位、追蹤和導(dǎo)航也是通過對周圍環(huán)境進(jìn)行特征點(diǎn)提取與追蹤。雖然現(xiàn)存的角點(diǎn)檢測算法有很多,相關(guān)的改進(jìn)方法也在不斷地被提出,但是隨著科技的不斷發(fā)展以及角點(diǎn)檢測應(yīng)用領(lǐng)域越來越廣泛,對角點(diǎn)檢測算法的快速性、準(zhǔn)確性、魯棒性、稠密度等要求越來越高,所以在實(shí)際應(yīng)用中,我們?nèi)钥筛鶕?jù)自己的需求進(jìn)行改進(jìn)。此外角點(diǎn)檢測算法的評估標(biāo)準(zhǔn)少且局限,亟待尋求一種較為公正的評估標(biāo)準(zhǔn)。