在OpenCV中训练SIFT特征

6
我创建了一个小型的SIFT应用程序,它获取关键点并将其保存到文本文件中。我使用它来从标志(例如AT&T)中获取信息,并将其与其他带有该标志的图像进行比较。问题是我的许多图像都具有该标志的变化形式,由于缩放、旋转或照明等原因,它无法识别。我想知道是否有可能获得一组图像,获取它的关键点,并通过某种训练算法来增强检测。

我在网上搜索了训练SIFT关键点的方法,但它们都在某种博士论文中,介绍了所有这些数学算法,老实说,这让我感到困惑,因为我已经有一段时间没有上过数学课了。

如果有人有任何建议或链接,能够理解训练如何工作或需要执行哪些操作来实现训练,请告诉我。或者,如果有人有更简单的方法来进行此操作而不使用SIFT,则非常感激其他形式的检测。下面是我尝试过的列表:

  • SURF
    • 失败,因为它返回无效结果
  • Haar特征和Adaboosting
    • 失败,因为我开始在7/11/2011上使用100个正面模型和100个负面图像进行训练,到7/19/2011仍在运行
  • 使用同一标志的各种变换和阈值处理的模板匹配
    • 失败,因为我需要指数级地创建基于未能在图像中检测到任何内容的次数的标志

提前感谢。

2个回答

3

一个简单的起点是收集几个AT&T标志的SIFT/SURF描述符,并在它们上使用FLANN。然后,拿一张测试图片,计算描述符并进行范围搜索,确定最近邻距离等等,试图找出“接近度”的度量。


谢谢您的建议,但我还有一个问题。该链接并没有提到FLANN树,但据我所知,我需要通过SIFT/SURF算法运行“n”个标志来提取所有关键点和描述符。然后,我需要对所有关键点和描述符进行knnsearch,并保存最佳匹配项。完成所有这些后,我可以加载测试图像并迭代遍历树以找到最接近的匹配项? - Seb
你说得对,只是FLANN。另外,是的,那就是我在回答中的意思。 - Jacob

0
你可以使用PCA来减少维度的数量,然后可以在从标志中提取的向量特征集上训练某种分类器,例如SVM。 此外,你还可以使用BoW(词袋/特征)。 你也可以在谷歌上搜索“标志识别”,有很多相关资料可供参考。

我一直认为在SVM中不需要PCA? - Niki
我不确定,但是如果你有高维向量,至少对于SVM来说,你必须有更多的例子。http://en.wikipedia.org/wiki/Curse_of_dimensionality - mrgloom
但谁说在使用PCA时需要更少的样本呢?PCA所做的只是将特征向量长度缩短,同时尽可能保持与原始向量之间的距离相似(以最小二乘意义上),而SVM(至少在高斯核函数下)只使用样本之间的距离,因此PCA不应该产生太大的影响。 - Niki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接