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