![]() |
OpenCV 4.12.0
开源计算机视觉
|
在本章中,
在上一章中,我们学习了 Harris 角点检测器。 后来在 1994 年,J. Shi 和 C. Tomasi 在他们的论文Good Features to Track中对其进行了一个小的修改,与 Harris 角点检测器相比,它显示出更好的结果。 Harris 角点检测器中的评分函数由下式给出
\[R = \lambda_1 \lambda_2 - k(\lambda_1+\lambda_2)^2\]
Shi-Tomasi 提出了以下公式来代替它
\[R = \min(\lambda_1, \lambda_2)\]
如果它大于一个阈值,则被认为是角点。 如果我们像在 Harris 角点检测器中所做的那样在 \(\lambda_1 - \lambda_2\) 空间中绘制它,我们会得到如下图
从图中可以看出,只有当 \(\lambda_1\) 和 \(\lambda_2\) 高于最小值 \(\lambda_{\min}\) 时,才被认为是角点(绿色区域)。
OpenCV 有一个函数 cv.goodFeaturesToTrack()。 它通过 Shi-Tomasi 方法(如果您指定,也可以是 Harris 角点检测)找到图像中 N 个最强的角点。 与往常一样,图像应该是灰度图像。 然后指定要找到的角点数。 然后指定质量等级,这是一个介于 0-1 之间的值,表示角点的最低质量,低于该质量的所有角点都将被拒绝。 然后,我们提供检测到的角点之间的最小欧几里得距离。
有了这些信息,该函数会在图像中找到角点。 所有低于质量等级的角点都将被拒绝。 然后,它根据质量以降序对剩余的角点进行排序。 然后,该函数获取第一个最强的角点,丢弃最小距离范围内的所有附近角点,并返回 N 个最强的角点。
在下面的示例中,我们将尝试找到 25 个最佳角点
请参阅下面的结果
此函数更适合用于跟踪。 当时机到来时,我们会看到这一点。