【翻译:OpenCV-Python教程】史-托马斯角点检测&用于追踪的好特征

⚠️由于自己的拖延症,3.4.3翻到一半,OpenCV发布了4.0.1了正式版,所以接下来是按照4.0.1翻译的。

⚠️除了版本之外,其他还是照旧,Shi-Tomasi Corner Detector & Good Features to Track,原文

目标

在本章

  • 我们将会学到另外一个角点检测算法:史-托马斯角点检测
  • 我们会用到这个函数:cv.goodFeaturesToTrack()

理论

在上一章,我们见到了哈里斯角点检测算法。后来在1994年,J. Shi 和 C. Tomasi 在他们的论文 Good Features to Track 里为这个算法做了一个小改动,其结果显示角点检测的效果比哈里斯角点检测算法要好。在哈里斯角点检测算法中的个计分函数(译者注:在很多文献里这个函数也被称为角点响应函数)是:

R = \lambda_1 \lambda_2 - k(\lambda_1+\lambda_2)^2

取而代之,史和托马斯推荐使用:

R = min(\lambda_1, \lambda_2)

如果它(R值)比阈值更大,它就被认为是一个角。如果我们把它画在λ1−λ2空间里,就好像我们在哈里斯角点检测算法中做过的那样,我们就会得到一张图像如下:

shitomasi_space.png

从这个计算,你可以看到只有当 λ1 和 λ2 都大于一个最小阈值λmin的时候,它才会被认为是一个角点。(绿色区域)。

编码

OpenCV 有一个函数,cv.goodFeaturesToTrack() (译者注:这个函数名是以他们的论文来命名的)。它按照史-托马斯的方法(或者哈里斯的算法,如果你给参数指定的话),在图像中找出N个最强的(译者注:就是R值最大)的角点。和平常一样,图像应该是灰度图像。然后你指定你想要找出的角点数量。然后是指定质量级别,这个值应该是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()

看以下的结果:

shitomasi_block1.jpg

这个函数更适合跟踪物体。到时候我们将会看到的。

额外资源

练习


上篇:【翻译:OpenCV-Python教程】哈里斯角点检测

下篇:【翻译:OpenCV-Python教程】SIFT(Scale-Invariant Feature Transform) 介绍

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值