Harris角点检测+python实现+特征向量,特征值理解。

Harris角点检测+python实现

概述

是一种基于图像灰度的方法通过计算点的曲率和梯度来检测角点。

基本原理

如果在各个方向上移动窗口,窗口中的灰度值都会发生较大变化,那么认定在窗口遇到了角点;
如果在一个方向发生变化,另一个方向不变,就可能是一条直线;
如果各个方向移动,窗口内灰度值都没有发生变化,不存在角点。

具体实现

注意相对于Moravec而言,Harris之所以更加优秀,是因为通过引入微分的思想,从而使每个方向都可以由x,y方向的微分合成。也就是说检测了各个方向的变化。
在这里插入图片描述
其中对后面那一项进行泰勒展开
在这里插入图片描述
写成自相关函数(二次型)形式
在这里插入图片描述
M矩阵是根据此次型形式写的矩阵,同时矩阵中每一项是窗口W中每个元素通过“加权”的方式求和得到,通常用高斯滤波器进行滤波Harris角点检测原理
在这里插入图片描述
可以把自相关函数写成二次项函数的形式
在这里插入图片描述

1.至此一种做法是把它看做是椭圆方程:
为什么Harris角点检测用特征值? 为什么Harris像素值变化量矩阵代表椭圆?【文中均有答案】
上文解释了为何M矩阵二次型就是椭圆,以及关于长短轴表述。
二次型中间矩阵特征值分解后,对角矩阵代表对圆的伸缩,两边正交矩阵代表对椭圆的旋转
其中关于矩阵特征值和特征向量的表述,推荐
如何理解矩阵特征值和特征向量?
2.另一种做法是从梯度分布以及PCA的角度分析:
图像处理——角点检测(Harris、Shi-Tomasi、亚像素检测)

用一种角点响应值来简化角点识别
在这里插入图片描述
Harris角点检测原理中描述判断角点的标准。

cv2.cornerHarris

在这里插入图片描述
其中的k就是上文中的k,求导使用的是sobel算子,返回的是一个R矩阵。
代码参考机器学习进阶-图像特征harris-角点检测 1.cv2.cornerHarris(进行角点检测)

# cv2.cornerHarris()
import cv2

# 进行角点检测
# 第一步:读取图片
img = cv2.imread('test_1.jpg')
# 第二步:进行灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 第三步:进行角点检测
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# 第四步:进行画图秒点操作
img[dst > 0.01*dst.max()] = (0, 0, 255)#这里是设置红色
cv2.imshow('img', img)
cv2.waitKey(0)#在这里无限等待键盘输入
cv2.destroyAllWindows()#删除

img[dst > 0.01*dst.max()] = (0, 0, 255)意思是大于0.01倍最大的R就可以认为是角点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值