天天看点

【算法】基于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

继续阅读