Harris 角點定義為一個鄰域內存在兩個正交方向上梯度變化較大的點。
作 xy 平面上的二維函數,使用自相關函數可描述圖像上一固定點在任意方向上的灰度變化;然后利用泰勒級數展開自相關函數,即可將其轉換為矩陣特征值問題(參考博文 "光流跟蹤")。
在某些應用中(如視覺測量),想獲得更加精確的角點定位,可使用角點亞像素算法實現。
在提取亞像素邊緣時,可以通過數學建模(最小二乘法)來描述邊緣方向上一階導數曲線,該曲線為一個二次函數;然后找到數學模型的最值點即為亞像素邊緣位置。
對於 Harris 角點,考察 角點鄰域內點 p 的梯度向量,p點與初始角點 q 構成的向量 ,在理想情況下,發現兩向量點積均為 0。具體來說:
1)當 p 點位於平坦區域內,p 的梯度向量為 0,兩向量點積為 0;
2)當 p 點位於邊緣上,p 的梯度向量於向量 qp 正交,兩向量點積仍然為 0。
如上圖所示,將 q 點坐標當作未知量,通過解方程組即可求得更加精確的角點坐標。一旦求解到新的角點坐標,可以使用新的角點坐標位起點,按同樣方法建立方程組,迭代求解,直到精度滿足要求。
在實際應用中,當考察點離參考角點 q 較近時,角點附近點存在兩個方向梯度,故合成梯度方向與 qp 邊緣基本不能正交;
當考察點離參考角點 q 較遠時,考察點多半位於邊緣上,故考察點梯度方向與 qp 邊緣基本正交;
所以,實際應用中會排除離 p 點較近的部分點,以提升線性方程組可解性。
另一方面,在平坦區域內點的梯度一般不等於 0,這會提升方程組真實解。可以設定一個梯度門限,方程組僅接收梯度門限較大值,從而提升可解性。
參考資料 Learning OpenCV 3