c++ - 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”,但它没有明确提到分数计算。
解决方案
在线文档也让我感到困惑:
评分函数定义为:“连续弧内像素与中心像素的绝对差之和”</p>
我很确定 OpenCV 不会这样计算分数。如果您耐心阅读您提到的源代码,您会发现该函数cornerScore<16>
正在执行此操作:
- 在以目标像素为中心的圆上获取 16 个像素值
- 从 16 个像素中取出一组 9 个连续像素,计算 9 个像素与中心像素之间的绝对差异,并取最小(来自 9 个 abs-diffs)值(称为阈值)
- 将16个像素中的每个像素作为第2步的开始,你将得到16个阈值
- 返回最大阈值作为角点分数
从这个管道中,您可以看到 OpenCV 计算的分数是使目标像素成为 FAST-corner 的最大阈值。
推荐阅读
- macros - 宏数值比较
- javascript - 更改只读输入值
- javascript - 如何强制组件在同步请求之间重新渲染?(反应原生)
- excel - 如何从表中选择除标题之外的所有项目?
- r - 我该如何解决这个 t 检验错误 - 它说“数据基本上是恒定的”?
- c++ - (Qt with C++)读取文件(~25Mb)并比较字符串比python慢
- html - 带有垂直列文本的引导表样式
- three.js - THREE.js:如何在忽略材质颜色的情况下更改面的颜色?
- android - Flutter,根据屏幕分辨率/dpi优化材料尺寸的最佳方法?
- python - 如何在散景中设置字形的悬停颜色?