Harris角點檢測算法
特征點檢測廣泛應用到目标比對、目标跟蹤、三維重建等應用中,在進行目标模組化時會對圖像進行目标特征的提取,常用的有顔色、角點、特征點、輪廓、紋理等特征。
Harris角點檢測算法原理
角點檢測的幾何定義:
1、角點是圖像灰階一階導數所對應的最大值的位置;
2、角點是圖像中兩條或兩條以上邊緣的交點;
3、角點是圖像中灰階變化最大的位置;
4、角點位置的一階導數最大,二階導數為零;
5、角點是圖像中物體邊緣變換不連續的位置;
6、角點是二維圖像亮度變化劇烈的位置。
基本原理:
(1)算法思想:
Harris角點算法,通過一個小窗在圖像中移動,通過小窗内圖像灰階平均變換值來确定角點,一般會存在三種情況:
- 小窗内的灰階值恒定,且不同方向的灰階值變化不大,此時處于圖像内部平坦區域。
- 小窗跨越一條邊,與邊垂直方向的灰階變換較大,此時處于圖像邊緣區域。
- 在不同方向的灰階變化都很大,此時小窗位于焦點區域。

(2)算法原理:
通過計算角點的響應值,找到較大的值即為焦點區域。
代碼實作
import cv2
import numpy as np
#讀取圖檔并輸出形狀
img = cv2.imread('test_1.jpg')
print('img,shape',img.shape)
#将圖檔進行灰階轉換
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#Harris變換,得到角點響應R
dst = cv2.cornerHarris(gray,2,3,0.04)
#前面設定條件角點響應值,使得滿足條件的點即角點,将角點标記為後面的顔色,即紅色。
img[dst>0.01*dst.max()]=[0,0,255]
cv2.imshow('dst',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
讀取的圖檔
Harris角點檢測後的圖檔
可以參考的視訊: https://www.bilibili.com/video/BV1oJ411D71z?p=12