首页 > 解决方案 > FAST 角点检测器中得分计算背后的算法

问题描述

FAST 角点检测器中检测到的角点的分数是如何计算的?我阅读了原始论文“用于高速角检测的机器学习”,但在分数计算部分没有明确提及他们指的是哪个 N 个连续像素。是满足该点角标准的 N 个连续像素吗?我还找到了以下链接

https://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/AV1011/AV1FeaturefromAcceleratedSegmentTest.pdf谈到 FAST 角分数计算。此外,我没有发现本文中描述的分数函数与 OPENCV 为半径为 3 的布雷森汉姆圆所做的分数计算之间存在任何对应关系。

https://github.com/opencv/opencv/blob/master/modules/features2d/src/fast_score.cpp

分数已在上述链接中的cornerScore<16> 函数中计算。除了这些之外,没有其他文章明确谈到 Fast feature Detector 中的 FAST 分数计算。任何人都可以给我任何见解吗?

注意 - 我也看过第二篇论文“Faster and Better:A machine learning approach to corner detection”,但它没有明确提到分数计算。

标签: c++opencv

解决方案


在线文档也让我感到困惑:

评分函数定义为:“连续弧内像素与中心像素的绝对差之和”</p>

我很确定 OpenCV 不会这样计算分数。如果您耐心阅读您提到的源代码,您会发现该函数cornerScore<16>正在执行此操作:

  1. 在以目标像素为中心的圆上获取 16 个像素值
  2. 从 16 个像素中取出一组 9 个连续像素,计算 9 个像素与中心像素之间的绝对差异,并取最小(来自 9 个 abs-diffs)值(称为阈值
  3. 将16个像素中的每个像素作为第2步的开始,你将得到16个阈值
  4. 返回最大阈值作为角点分数

从这个管道中,您可以看到 OpenCV 计算的分数是使目标像素成为 FAST-corner 的最大阈值


推荐阅读