图像特征-harris角点检测
基本原理
R>0 角点
R≈0 平坦区域
R<0 边界
总结一下Harris算法流程
获取点数据后,计算Ix 和 Iy
整合矩阵,求特征值
比较特征值大小
非极大值抑制NMS,过滤掉不是那么角的
OpenCV中怎么检测Harris
cv2.cornerHarris()
img: 数据类型为 float32 的入图像
blockSize: 角点检测中指定区域的大小,前面提到的w(u,v),可能是个高斯函数
ksize: 就像Sobel求导中使用的窗口大小
k: 取值参数为 [0,04,0.06]. 默认0.04
返回dst:输出图像
import cv2
import numpy as np
img = cv2.imread('chessboard.jpg') #读取图片
print ('img.shape:',img.shape)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 转换成灰度图
# gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04) # 执行检测
print ('dst.shape:',dst.shape)
# dst.max是最大值,一定是角点
# 只要dst中满足0.01倍的最大值,就判定为角点,要求较高的也可以设置为其他倍数
img[dst>0.01*dst.max()]=[0,0,255]
cv2.imshow('dst',img