OpenCV FAST TYPE_5_8

Posted

技术标签:

【中文标题】OpenCV FAST TYPE_5_8【英文标题】: 【发布时间】:2017-01-23 15:17:30 【问题描述】:

我正在试验不同类型的 OpenCV 的 FAST 检测器。

可用的类型有:

TYPE_5_8, 
TYPE_7_12, 
TYPE_9_16

最后一个是默认的,由这张照片描述:

我假设TYPE_7_12 的含义如下:

TYPE_5_8 的意思是:

现在,我使用阈值 30 和 TYPE_5_8 运行 FAST 检测器,以下图像部分不会产生单个关键点:

基于documentation说:

现在像素 p 是一个角,如果存在一组 n 连续 圆圈中的像素(16 个像素)都比 I_p + 亮 t,或者都比 I_p 暗 - t

,我预计中心像素(值为 203 的像素)将被检测为关键点。明显有 5 个连续像素的强度低于 203 - 30。

但没有检测到任何东西。为什么?

【问题讨论】:

【参考方案1】:

当 8 个连续像素位于下方/上方时,中心像素将被检测为关键点。 您可以阅读以下源代码,0-8、2-10 表示 type_5_8 的 0-0、2-2

int d = tab[ptr[pixel[0]]] | tab[ptr[pixel[8]]];
if( d == 0 )
    continue;
d &= tab[ptr[pixel[2]]] | tab[ptr[pixel[10]]];
d &= tab[ptr[pixel[4]]] | tab[ptr[pixel[12]]];
d &= tab[ptr[pixel[6]]] | tab[ptr[pixel[14]]];

if( d == 0 )
   continue;
d &= tab[ptr[pixel[1]]] | tab[ptr[pixel[9]]];
d &= tab[ptr[pixel[3]]] | tab[ptr[pixel[11]]];
d &= tab[ptr[pixel[5]]] | tab[ptr[pixel[13]]];
d &= tab[ptr[pixel[7]]] | tab[ptr[pixel[15]]];

【讨论】:

是否有任何文档明确声明它始终是 8 个连续像素,无论图案大小如何?如果没有,我觉得应该更新文档或者这应该被认为是一个错误。在我自己对 5_8 和 7_12 模式的实验中,我也注意到了这个问题。如果不是走捷径,它会拒绝弯道。

以上是关于OpenCV FAST TYPE_5_8的主要内容,如果未能解决你的问题,请参考以下文章

OpenCv dnn模块扩展研究--style transfer

Python,opencv匹配模板错误

OpenCV__elemSize

Opencv 2.4.12_2 calcOpticalFlowPyrLK() 错误

调试断言失败 OpenCv is_block_type_valid(header->_block_use)

为啥我解决了“Debug Assertion Failed OpenCv is_block_type_valid(header->_block_use)”