首页 文章

使用SIFT / SURF进行特征匹配是否可以用于类似对象的分类?

提问于
浏览
0

我已经在OpenCV中实现了SIFT算法,使用以下步骤进行特征检测和匹配:

  • 使用Otsu的阈值处理去除背景

  • 使用SIFT特征检测器进行特征检测

  • 使用SIFT特征提取器进行描述符提取

  • 使用BFMatcher(L2 Norm)匹配特征向量并使用比率测试来过滤良好匹配

我的目标是根据图像的相似性将图像分类到不同的类别,如鞋子,衬衫等 . 例如,两个不同的鞋跟应该比鞋跟和运动鞋或鞋跟和T恤更彼此相似 .

但是,只有当我的模板图像出现在搜索图像中时(无论是任何比例和方向),此算法才能正常工作 . 如果我比较两种不同的高跟鞋,它们不匹配并且匹配也是随机的(一个图像的跟部与另一个图像的平面匹配) . 当我将鞋跟与运动鞋或鞋跟与T恤或鞋跟与婴儿的照片进行比较时,也存在许多误报!

我想看一下鞋跟,并将其标识为鞋跟,并将鞋跟与我的数据库中的不同图像的相似程度与其他鞋跟的最大相似度,然后是其他鞋子 . 它不应与衬衫,手机,笔等无关物体产生任何相似之处 .

据我所知,SIFT算法根据关键点周围像素的梯度值为每个关键点生成描述符向量,并且纯粹使用此属性匹配图像 . 因此,很可能位于一个鞋的跟部附近的关键点与另一个鞋的表面处的关键点匹配 . 因此,我收集的是该算法只能用于检测精确匹配而不能检测图像之间的相似性

你能否告诉我这个算法是否可以用于我的目标,如果我做错了什么或建议我应该使用任何其他方法 .

1 回答

  • 1

    对于类似对象的分类,我当然会选择级联分类器 .

    基本上,级联分类器是一种机器学习方法,您可以在其中训练分类器以检测不同图像中的对象 . 为了使它运作良好,你需要训练你的分类器有很多正面(你的对象在哪里)和负面(你的对象不是)图像 . 该方法由Viola和Jones于2001年发明 .

    在OpenCV中有一个现成的面部检测实现,你会对openCV文档有更多的解释(抱歉,不能发布链接,我暂时只限于1个链接..)

    现在,注意事项:

    • 首先,你需要很多正面和负面的图像 . 您拥有的图像越多,算法执行的效果就越好 . 谨防过度学习:如果您的高跟鞋训练数据集包含例如给定模型的太多图像,则可能无法正确检测到其他模型

    • 训练级联分类器可能很长且很困难 . 最终结果将取决于您选择用于训练分类器的参数的程度 . 有关此信息,请访问此网页:http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html

相关问题