天天看點

【算法】基于OpenCV的Harris角點檢測算法Harris角點檢測算法

Harris角點檢測算法

特征點檢測廣泛應用到目标比對、目标跟蹤、三維重建等應用中,在進行目标模組化時會對圖像進行目标特征的提取,常用的有顔色、角點、特征點、輪廓、紋理等特征。

Harris角點檢測算法原理

角點檢測的幾何定義:

1、角點是圖像灰階一階導數所對應的最大值的位置;

2、角點是圖像中兩條或兩條以上邊緣的交點;

3、角點是圖像中灰階變化最大的位置;

4、角點位置的一階導數最大,二階導數為零;

5、角點是圖像中物體邊緣變換不連續的位置;

6、角點是二維圖像亮度變化劇烈的位置。

基本原理:

(1)算法思想:

Harris角點算法,通過一個小窗在圖像中移動,通過小窗内圖像灰階平均變換值來确定角點,一般會存在三種情況:

  • 小窗内的灰階值恒定,且不同方向的灰階值變化不大,此時處于圖像内部平坦區域。
  • 小窗跨越一條邊,與邊垂直方向的灰階變換較大,此時處于圖像邊緣區域。
  • 在不同方向的灰階變化都很大,此時小窗位于焦點區域。
【算法】基于OpenCV的Harris角點檢測算法Harris角點檢測算法

(2)算法原理:

【算法】基于OpenCV的Harris角點檢測算法Harris角點檢測算法
【算法】基于OpenCV的Harris角點檢測算法Harris角點檢測算法
【算法】基于OpenCV的Harris角點檢測算法Harris角點檢測算法
【算法】基于OpenCV的Harris角點檢測算法Harris角點檢測算法
【算法】基于OpenCV的Harris角點檢測算法Harris角點檢測算法

通過計算角點的響應值,找到較大的值即為焦點區域。

代碼實作

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()
           

讀取的圖檔

【算法】基于OpenCV的Harris角點檢測算法Harris角點檢測算法

Harris角點檢測後的圖檔

【算法】基于OpenCV的Harris角點檢測算法Harris角點檢測算法

可以參考的視訊: https://www.bilibili.com/video/BV1oJ411D71z?p=12

繼續閱讀