1

我正在尝试使用 opencv 2.4.2 中的 SURF、FERN、FREAK 等算法进行对象识别。

我正在使用 opencv 示例中的程序而无需修改 -find_obj.cpp, find_obj_ferns.cpp, freak_demo.cpp

我尝试更改没有帮助的算法的参数。

我在这里有我的训练图像、测试图像和 FREAK 识别结果

如您所见,结果非常糟糕。

我有几个问题:

  1. 为什么这些算法适用于灰度图像?很明显,对于我上面的训练图像,如果包含 RGB,则可以轻松检测到对象。有没有考虑到这一点的技术。

  2. 有没有其他方法可以提高性能。我尝试摆弄效果不佳的功能参数。

4

1 回答 1

4

我在您的图像中观察到的第一件事是,物体是平面并且没有纹理差异......我的意思是您使用的所有特征检测器都用于查找视图不变的角,这意味着这些是图像中的关键点独特的邻域和良好的 x 和 y 导数。我已经上传了我的分析……看数字在此处输入图像描述

怎么知道我说的是对的?

只需转到您在对象上找到的关键点的描述符值并查看值,您会看到它们中的大多数都是零......因为描述符是对特定方向上角点周围边缘变化的描述(有关详细信息,请参阅 surf 文档)。

您尝试检测的对象看起来像手机,因此您只需将对象或移动设备反转并重复实验,您肯定会得到很好的结果......因为在正面通常对象具有更多纹理,如开关、徽标等..

这是我上传的结果, 在此处输入图像描述

于 2012-08-12T10:10:43.340 回答