Harris角點檢測的思想是通過圖像的局部小窗口觀察圖像,角點的特征是窗口沿任意方向移動都會導致灰度發生明顯變化,如下圖所示:
將上述思想轉換為數學的形式,即將局部窗口向各個方向移動(u,v)並計算所有灰度差異的總和,表達式如下:
其中I(x, y)是局部窗口的圖像灰度,I(x+u, y+v)是平移後的圖像灰度,w(x, y)是窗口函數,可以是矩形窗口,也可以是對每個像素賦予不同權重的高斯窗口,如下圖所示:
角點檢測中使E(u, v)的值最大,利用一階泰勒展開有:
其中Ix和Iy是沿x和y方向的導數,可用sobel算子計算。
推導如下:
M矩陣決定了E(u, v)的取值,下面我們利用M來求角點,M是Ix和Iy的二次項函數,可以表示成橢圓的形狀,橢圓的長短半軸由M的特征值 λ 1 \lambda_1 λ1和 λ 2 \lambda_2 λ2決定,方向由特征矢量決定,如下圖所示:
橢圓函數特征值與圖像中的角點、直線(邊緣)和平面之間的關系如下圖所示:
思想:通過圖像的局部小窗口觀察圖像,角點的特征是窗口沿任意方向移動都會導致圖像灰度明顯變化。
API:
cv2.cornerHarris()
對Harris算法的改進,能更好的檢測角點。
API:
cv2.goodFeatureToTrack()