Harris角点检测(python-opencv)
1. 图像特征
图像的特征我认为可以分为基于一幅图像的平面,边缘和角点。
2.Harris角点检测
图像是N*M维度的矩阵,选择一个合适的窗口滑过图像的每个区域,然后计算所有差值的总和。
数学公式为:
其中最关键的(判断是什么特征):
详细的理论(写的不错):
https://blog.csdn.net/xw20084898/article/details/21180729
3.代码
import cv2
import numpy as np
filename = './lou.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #灰度化
gray = np.float32(gray) # Int型编程float32的类型
dst= cv2.cornerHarris(gray,2,3,0.04)
'''
解释一下Harris算法的参数:
src :传入的灰度图
blockSize :角点检测中要考虑的邻域的大小
ksize :Sobel求导中使用的窗口大小
k :Harris角点检测方程中的自由参数,取值参数为[0.04,0.06]。
'''
det = cv2.dilate(dst,None)
'''
取图像超过一个最优化的阈值的部分,阈值根据图像会有所不同
'''
img[dst > 0.01*dst.max()]=[0,0,255] #BGR通道(红色)
'''
这是利用布尔类型索引直接将大于某阈值的像素点标记为红色(找到的角点)
'''
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.检测原图和检测结果