【OpenCV】角点检测:Harris角点及Shi-Tomasi角点检测

角点

特征检测与匹配是Computer Vision 应用总重要的一部分,这需要寻找图像之间的特征建立对应关系。点,也就是图像中的特殊位置,是很常用的一类特征,点的局部特征也可以叫做“关键特征点”(keypoint feature),或“兴趣点”(interest point),或“角点”(conrner)。

关于角点的具体描述可以有几种:

  • 一阶导数(即灰度的梯度)的局部最大所对应的像素点;
  • 两条及两条以上边缘的交点;
  • 图像中梯度值和梯度方向的变化速率都很高的点;
  • 角点处的一阶导数最大,二阶导数为零,指示物体边缘变化不连续的方向。

 

Harris角点检测

当一个窗口在图像上移动,在平滑区域如图(a),窗口在各个方向上没有变化。在边缘上如图(b),窗口在边缘的方向上没有变化。在角点处如图(c),窗口在各个方向上具有变化。Harris角点检测正是利用了这个直观的物理现象,通过窗口在各个方向上的变化程度,决定是否为角点。

将图像窗口平移[u,v]产生灰度变化E(u,v)

由:, 得到:

对于局部微小的移动量 [u,v],近似表达为:

其中M是 2*2 矩阵,可由图像的导数求得:

  • 55
    点赞
  • 162
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
Shi-Tomasi角点检测算法是一种经典的角点检测算法,它可以在图像中找到具有最大角度的角点。在OpenCV中,可以使用cv.goodFeaturesToTrack()函数进行Shi-Tomasi角点检测。 函数原型: ``` cv.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance[, corners[, mask[, blockSize[, useHarrisDetector[, k]]]]]) ``` 参数说明: - image:输入图像,必须是单通道8位或32位浮点型图像。 - maxCorners:检测到的最大角点数。 - qualityLevel:角点的最小质量水平,范围为0到1,表示角点的最小可接受质量。 - minDistance:角点之间的最小欧几里得距离。 - corners:输出角点的坐标。 - mask:用于限制检测区域的掩码图像。 - blockSize:计算图像梯度的邻域大小。 - useHarrisDetector:如果为true,则使用Harris角点检测算法。 - k:Harris角点检测算法的自由参数。 示例代码: ```python import cv2 as cv import numpy as np img = cv.imread('test.jpg') gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) corners = cv.goodFeaturesToTrack(gray, 100, 0.01, 10) corners = np.int0(corners) for corner in corners: x, y = corner.ravel() cv.circle(img, (x, y), 3, (0, 0, 255), -1) cv.imshow('img', img) cv.waitKey(0) cv.destroyAllWindows() ``` 效果如下图所示: ![shi-tomasi角点检测示例](https://img-blog.csdn.net/20180313173704656?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ29vZGllX2Jsb2c=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值