SIFT/SURF特征匹配能用于相似物体的分类吗?

3
我已经在OpenCV中实现了SIFT算法用于特征检测和匹配,具体步骤如下:
  1. 使用Otsu阈值法进行背景去除
  2. 使用SIFT feature detector进行特征检测
  3. 使用SIFT feature extractor提取描述符
  4. 使用BFMatcher(L2 Norm)匹配特征向量,并使用比率测试过滤好的匹配
我的目标是根据图像的相似性将图像分类为不同的类别,例如鞋子、衬衫等。例如,两个不同的高跟鞋应该比一个高跟鞋和一只运动鞋或一件T恤更相似。
然而,当我的模板图像不存在于搜索图像中时,这种算法只能正常工作。如果我比较两个不同的高跟鞋,它们并不能匹配得很好,匹配也是随机的(一张图片的高跟鞋与另一张图片的平面表面匹配)。当我比较高跟鞋与运动鞋、T恤或婴儿照片时,也会有许多误报。
我想看着一只高跟鞋并将其识别为高跟鞋,返回它与数据库中不同图像的相似度,最大相似度应该是其他高跟鞋,然后是其他鞋子。它不应该与无关的物体(如衬衫、手机、笔等)产生相似性。
我理解SIFT算法为每个关键点生成一个描述符向量,该向量基于关键点周围像素的梯度值,图像仅使用此属性进行匹配。因此,很可能在一只鞋子的高跟鞋附近位置上的关键点会被匹配到另一只鞋子表面上的关键点。因此,我认为这种算法只能用于检测确切的匹配,而不能用于检测图像之间的相似性。
请问这种算法能否用于我的目标,如果我做错了什么或建议我使用其他方法呢?

2
正如您所了解的,SIFT / SURF 基本上是为了找到相同/相似图像部分的关键点的具体匹配而发明的。但后来,SIFT / SURF 也被用于对象分类。我在这方面没有经验,但我猜这是通过机器学习完成的。尝试搜索“SIFT对象分类”或查看HoG描述符。也许这篇论文?http://cs229.stanford.edu/proj2011/SchmittMcCoy-ObjectClassificationAndLocalizationUsingSURFDescriptors.pdf - Micka
1个回答

3
对于相似对象的分类,我肯定会选择级联分类器。基本上,级联分类器是一种机器学习方法,您可以训练分类器来在不同的图像中检测对象。为了使其有效运作,您需要使用大量正(其中包含您的对象)和负(其中不包含您的对象)图像来训练分类器。该方法由Viola和Jones于2001年发明。OpenCV中有一个现成的实现用于人脸检测,在openCV文档中您将会得到更多解释。
现在,需要注意以下几点:
1. 首先,您需要大量的正面和负面图像。您拥有的图像越多,算法的性能就越好。请注意过度学习:如果您的高跟鞋训练数据集包含太多给定模型的图像,则可能无法正确检测其他模型。
2. 训练级联分类器可能会很长且困难。最终结果将取决于您如何选择训练分类器的参数。有关此信息,可以在此网页上找到:http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html

你好,感谢您的回复。我已经了解了使用Haar特征的级联分类器以及使用特征检测、聚类和朴素贝叶斯/SVM进行分类的词袋模型,用于物体分类。请问您能否解释一下它们之间的区别,以及哪种更适合我的目标?非常感谢。 - user3705926
嗨,我从未使用过词袋(Bag-of-words)方法,因此我会让更有经验的人回答其优点和缺点。最近这种方法被广泛用于类似的目的,所以我猜这是一个合适的方法,但我不知道实现/训练这种方法的复杂性。 - Ben
好的,非常感谢。 - user3705926

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