底层视觉-角点检测-harris

本文介绍了角点检测在图像处理中的重要性,特别是Harris角点检测算法。通过泰勒展开和响应函数,解释了如何判断图像中的角点。在OpenCV库中,可以使用`cv2.cornerHarris`函数进行角点检测。代码示例展示了如何应用该函数,并通过非极大值抑制去除冗余角点。最后,文章提供了完整的代码实现来检测图像中的角点并显示结果。
摘要由CSDN通过智能技术生成

角点检测是图像特征点检测的一个重要方面。对于一张图像,我们使用一个滑窗在图像某个区域热议一个方向滑动,如果滑窗内的值都发生剧烈变化的话。这个过程我们可以使用下列公式表示:

                             

如果我们对这个公式进行泰勒展开等一系列数学变换之后呢,我们会发现我们所求的是一个响应函数和对应的值:

           

在这个情况下,M矩阵特征值都比较大时,即窗口中含有角点,特征值一个较大,一个较小,窗口中含有边缘,特征值都比较小,窗口处在平坦区域。那么根据这个结论,我们可以把M矩阵简化成一个响应函数:

                                        

这样,我们只要计算R便为止设置一个阈值即可。但是可能这样检测出来有很多个相邻的角点,为了找出真正的角点,我们可以用非极大值抑制来处理。

在opencv中,我们可以使用cv2.cornerHarris函数计算角点。

cv2.cornerHarris(src=gray, blockSize, ksize, k, dst=None, borderType=None)
"""
cornerHarris参数:
	src       - 数据类型为 float32 的输入图像。(输入单通道图)
	blockSize - 角点检测中要考虑的领域大小。也就是计算协方差矩阵时的窗口大小
	ksize     - Sobel求导中使用的窗口大小
	k         - Harris 角点检测方程中的自由参数,取值参数为 [0.04,0.06].
	dst       - 输出图像
	borderType  - 边界的类型
    返回:R值构成的灰度图像
"""

 

import cv2
import numpy as np

filename = 'line.png'

img = cv2.imread(filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)

dst = cv2.cornerHarris(gray, 2, 3, 0.04)
dst = cv2.dilate(dst, None)

img[dst > 0.01 * dst.max()] = [0, 0, 255]
cv2.imshow('img', img)
cv2.waitKey(0)

 refernce:

https://blog.csdn.net/yan_520csdn/article/details/100974130

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值