Harris Corner Detection原理
使用一個固定窗口在圖像上進行任意方向上的滑動,比較滑動前與滑動后窗口中的像素灰度變化程度,如果存在任意方向上的滑動都有著較大灰度變化,那么就認為該窗口中存在角點。

上圖中A是角點,B不是角點,如果用一個小窗口(藍色)在點A處滑動,無論朝哪個方向走,窗口內(nèi)的像素值都會發(fā)生明顯的變化,比如窗口往左,那白色像素就越多,紅色越少;但是對于B點,無論朝哪個方向滑動,窗口內(nèi)的像素不變。進一步地有:

如何計算圖像的梯度?

一副圖像可以看做一個離散的二元函數(shù),行列索引分別表示x坐標和y坐標,每個像素點的灰度值代表函數(shù)值。根據(jù)連續(xù)二元函數(shù)的偏導數(shù)計算方法有:

但圖像是離散的,沒有辦法使delta x和delta y趨于0,最小只能取1,所以上式可以轉(zhuǎn)換為:

所以對圖像的求導相當于對每個像素點做差分運算。上面那種為前向差分,根據(jù)所列的求導公式的不同還可以是中心差分:

顯然中心差分就相當于用卷積核[-1,0,1]對圖像做卷積(忽略系數(shù)1/2不影響算法)。比如求圖像在(1,1)位置對x方向的偏導數(shù),就等價于用該卷積核去卷積紅色窗口。

Sobel卷積核
對圖像某個區(qū)域使用Sobel核進行卷積相當于對中心點進行濾波和求導。

比如上圖,對3乘3區(qū)域用Sobel卷積核進行卷積可以分解為濾波操作和求導操作。濾波操作就是對p22左邊的元素p21結(jié)合左上p11和左下p31進行加權(quán)求和得到新的左邊元素,對p22右邊的元素p23結(jié)合右上p13和右下p33進行加權(quán)求和得到新的右邊元素。

濾完波后進行中心差分:

上面兩步的效果就等價于一個Sobel核。
Gaussisan卷積核

比如利用前向差分求點p33的梯度,可以先用高斯核W對以p33為中心的窗口做卷積,再對以p34為中心的窗口做卷積,然后作差即可。

可以進一步將上式寫成下面這種形式:

注意這里的x,y是對卷積操作的窗口區(qū)域進行索引的,起始索引均為0,雖然看起來f(0,0)表示圖像(0,0)位置的元素,但這里就是表示窗口的第一個元素。
如何計算圖像任一方向的梯度?
根據(jù)二元函數(shù)方向?qū)?shù)的定義有:


所以向量(u,v)只有上圖所示的8種組合。忽略分母,方向?qū)?shù)可以寫為:

角點檢測算法


目標:計算圖像每個像素點的方向?qū)?shù),找出在各個方向方向?qū)?shù)都比較大的點。
角點計算的基本數(shù)學公式:

這個公式就是建立在方向?qū)?shù)的基礎上,平方的目的是為了消除負號,放大誤差。

將x,y視作常數(shù),E是關(guān)于u,v的函數(shù)。


所以近似之后,所要研究的函數(shù)E(u,v)就變成了一個二次型函數(shù)。

M是一個實對稱矩陣。對M進行標準化后,E(u,v)可以寫成:


二次型函數(shù)在xoy平面上的等高線是歪著的橢圓,標準化之后的等高線是正著的橢圓,等高線越往內(nèi)高度越低,越往外高度越高。

橢圓的形狀由矩陣M的兩個特征值控制,長軸和短軸的長度分別和特征值成反比。


如果函數(shù)E在平面上的等高線如上圖,長軸遠大于短軸(或者短軸遠大于長軸),可以發(fā)現(xiàn)越往短軸移動,高度變化比較顯著,而往長軸移動,高度變化較為微弱。
也就是說:(u,v)指向的方向如果是短軸方向,那函數(shù)值E就較大,會比取值指向長軸方向的函數(shù)值大得多。
如果等高線的長軸和短軸比較接近,如下圖:

我們的目標是:找出往任意方向移動,函數(shù)值E都比較大且差不多的點,這正可以體現(xiàn)在函數(shù)等高線的長短軸長度上。
總結(jié)為如下圖像:

當兩個特征值差異很大時,意味著相同長度的(u,v)向量,朝著一個軸的函數(shù)值和朝著另一軸的函數(shù)值E差異很大,即梯度變化差異很大。表明是邊緣像素點。
兩個特征值都很小,函數(shù)值E相近且都很小,即沿任意方向梯度變化微弱。表明是灰度均勻區(qū)域。
兩個特征值都很大,函數(shù)值E相近且都很大,即沿任意方向梯度變化顯著。表明是角點。
如何定量地描述這種關(guān)系?

R函數(shù)的形狀就如馬鞍面:




非極大值抑制
