Shi-Tomasi角点检测与Good Features to track特征检测原理 OpenCV-Python v4.7.0

目标

在这一章中

理论

在上一章中,我们看到了哈里斯转角检测器。后来在1994年,J.Shi和C.Tomasi在他们的论文 《Good Features to Track》 中对它做了一个小小的修改,与Harris Corner Detector相比,结果更好。哈里斯拐角检测器中的评分函数是这样给出的:
R = λ 1 λ 2 − k ( λ 1 + λ 2 ) 2 R=\lambda _1\lambda _2−k\left( \lambda _1+\lambda _2 \right) ^2 R=λ1λ2k(λ1+λ2)2
与此相反,Shi-Tomasi提出:
R = m i n ( λ 1 , λ 2 ) R=min\left( \lambda _1,\lambda _2 \right) R=min(λ1,λ2)

如果它大于一个阈值,就被认为是一个角。如果我们像在哈里斯拐角检测器中那样在λ1-λ2空间中绘制它,我们得到的图像如下所示
在这里插入图片描述
从图中可以看出,只有当λ1和λ2高于一个最小值λmin时,它才被认为是一个角(绿色区域)。

代码

OpenCV有一个函数,cv.goodFeaturesToTrack()。它通过Shi-Tomasi方法(或者Harris Corner Detection,如果你指定的话)找到图像中最强的角。像往常一样,图像应该是一个灰度图像。然后你指定你想找到的角的数量。然后你指定质量等级,这是一个介于0-1之间的值,表示角的最小质量,低于这个值的人将被拒绝。然后我们提供检测到的角之间的最小欧几里得距离。

有了所有这些信息,该函数就能找到图像中的角。所有低于质量水平的角都被拒绝。然后,它根据质量从高到低的顺序对剩余的角进行排序。然后,函数选择第一个最强的角,扔掉附近所有最小距离范围内的角,并返回N个最强的角。

在下面的例子中,我们将尝试找到25个最佳角:

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('blox.jpg')
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
corners = cv.goodFeaturesToTrack(gray,25,0.01,10)
corners = np.int0(corners)
for i in corners:
    x,y = i.ravel()
    cv.circle(img,(x,y),3,255,-1)
plt.imshow(img),plt.show()

请看下面的结果:
在这里插入图片描述
这个函数更适合用于跟踪。我们将在它的时机到来时看到这一点。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值