更新時間:2021-06-04 來源:黑馬程序員 瀏覽量:
Harris角點檢測的思想是通過圖像的局部的小窗口觀察圖像,角點的特征是窗口沿任意方向移動都會導(dǎo)致圖像灰度的明顯變化,如下圖所示:

將上述思想轉(zhuǎn)換為數(shù)學(xué)形式,即將局部窗口向各個方向移動并計算所有灰度差異的總和,表達(dá)式如下:
其中是局部窗口的圖像灰度,是平移后的圖像灰度,是窗口函數(shù),該可以是矩形窗口,也可以是對每一個像素賦予不同權(quán)重的高斯窗口,如下所示:

角點檢測中使的值最大。利用一階泰勒展開有:
其中和 是沿x和y方向的導(dǎo)數(shù),可用sobel算子計算。
推導(dǎo)如下:

矩陣決定了的取值,下面我們利用來求角點,是和的二次項函數(shù),可以表示成橢圓的形狀,橢圓的長短半軸由的特征值和決定,方向由特征矢量決定,如下圖所示:

橢圓函數(shù)特征值與圖像中的角點、直線(邊緣)和平面之間的關(guān)系如下圖所示。

共可分為三種情況:
Harris給出的角點計算方法并不需要計算具體的特征值,而是計算一個角點響應(yīng)值來判斷角點。的計算公式為:
式中,detM為矩陣M的行列式;traceM為矩陣M的跡;α為常數(shù),取值范圍為0.04~0.06。事實上,特征是隱含在detM和traceM中,因為:

那我們怎么判斷角點呢?如下圖所示:

在OpenCV中實現(xiàn)Hariis檢測使用的API是:
dst=cv.cornerHarris(src, blockSize, ksize, k)
參數(shù):
img:數(shù)據(jù)類型為 ?oat32 的輸入圖像。
blockSize:角點檢測中要考慮的鄰域大小。
ksize:sobel求導(dǎo)使用的核大小
k :角點檢測方程中的自由參數(shù),取值參數(shù)為 [0.04,0.06].
示例:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 1 讀取圖像,并轉(zhuǎn)換成灰度圖像
img = cv.imread('./image/chessboard.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 2 角點檢測
# 2.1 輸入圖像必須是 float32
gray = np.float32(gray)
# 2.2 最后一個參數(shù)在 0.04 到 0.05 之間
dst = cv.cornerHarris(gray,2,3,0.04)
# 3 設(shè)置閾值,將角點繪制出來,閾值根據(jù)圖像進(jìn)行選擇
img[dst>0.001*dst.max()] = [0,0,255]
# 4 圖像顯示
plt.figure(figsize=(10,8),dpi=100)
plt.imshow(img[:,:,::-1]),plt.title('Harris角點檢測')
plt.xticks([]), plt.yticks([])
plt.show()
結(jié)果如下:

Harris角點檢測的優(yōu)缺點:
優(yōu)點:
缺點:
猜你喜歡:
集成學(xué)習(xí)算法是什么?如何理解集成學(xué)習(xí)?
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運(yùn)營】深圳跨境電商運(yùn)營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運(yùn)維】鄭州運(yùn)維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19