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