角點:有兩種比較普遍的定義 角點是兩個邊緣的交點 角點是鄰域內具有兩個主方向的特徵點(這個主方向,其實我一直是迷糊,但是參考PCA,覺得其想說的是在在兩個方向上灰階變化比較大,也就是此時的角點鄰域內的點,不再是一個二維的點(x,y),而是一個三維的點(x,y,I)其中I是像素位置(x,y)對應的灰階值。當存在兩個主方向時,也就意味著存在兩個較大的特徵值。)
角點檢測的主要思路: 第一種基於映像邊緣的方法,對應角點定義1,檢測出邊緣也便檢測出角點。但是這種方法很依賴於映像邊緣的檢測結果,但是我們知道邊緣檢測是一個比較麻煩,複雜的問題。 第二種是基於映像灰階的方法,該方法主要通過計算點的曲率以及梯度來檢測角點,這類方法中比較有代表性的有:Moravec,Forstner,Harris,SUSAN.
Harris角點檢測:
下圖可以很明了的說明Harris角點檢測的原理:
簡單介紹就是,設定一個固定尺寸的小視窗,移動視窗。統計移動前後視窗內的像素變化情況,來進行角點的判斷。寫成數學運算式就是:
其中的權重因子w(u,v)可以是常數也可以是高斯加權函數:
對上式進行泰勒級數的一階展開,化簡可以得到下式:
其中:
正如角點的第二種定義,角點是其鄰域內的灰階在兩個方向有較大的變化,對應存在兩個較大的特徵值;而邊緣時鄰域內的灰階在某一個方向有較大的變化,對應存在一個較大的特徵值;平面就是在鄰域內的灰階變化不大,存在兩個較小的特徵值;下圖描述了特徵值與檢測結果的關係:
但是在求解矩陣M的特徵值的時候,計算量比較大,比較耗時,因為我們一般不直接計算其特徵。利用如下公式間接比較其特徵的大小關係,進行角點判斷:
然後令λ1=λ,λ2=kλ1,其中(λ1>=λ2,故k<=1)
假設R>0,就有(高中數學中的對勾函數的極值問題,或者直接求導):
故調節α就可以設定k的數值範圍:
當α增大至0.25時,k就只能取1了;當α減小至0時,k的取值就是(0,1)了,也就是α值增大,k的取值區間減小,那麼檢測到的角點就變少,也就是檢測靈敏性降低(但是更加準確);α值減小,k的取值區間增大,那麼檢測到的角點就變多,也就是檢測靈敏性增加(但是會帶來誤檢測)