我已经在OpenCV中实现了SIFT算法,以便使用以下步骤进行特征检测和匹配:
我的目标是根据图像的相似性将图像分类为不同的类别,如鞋子,衬衫等。例如,两个不同的鞋跟应该比鞋跟和运动鞋或鞋跟和T恤更彼此相似。
然而,只有当我的模板图像出现在搜索图像中时(无论是任何比例和方向),此算法才能正常工作。如果我比较两种不同的高跟鞋,它们不能很好地匹配,并且匹配也是随机的(一个图像的跟部与另一个图像的平面匹配)。当我将鞋跟与运动鞋或鞋跟与T恤或鞋跟与婴儿的照片进行比较时,也有许多误报!
我想看一个鞋跟,并将其标识为鞋跟,并将鞋跟与我的数据库中的不同图像的相似程度与其他高跟鞋相提并论,然后是其他鞋跟。它不应与衬衫,手机,笔等无关物体产生任何相似之处。
据我所知,SIFT算法根据关键点周围像素的梯度值为每个关键点生成描述符向量,并且图像仅使用此属性进行匹配。因此,很可能位于一个鞋的跟部附近的关键点与另一个鞋的表面处的关键点匹配。因此,我收集到的是,该算法只能用于检测精确匹配,而不能用于检测图像之间的相似性
请您告诉我这个算法是否可以用于我的目标,如果我做错了或建议我应该使用其他任何方法。
答案 0 :(得分:1)
对于类似对象的分类,我当然会选择级联分类器。
基本上,级联分类器是一种机器学习方法,您可以在其中训练分类器以检测不同图像中的对象。为了使它运作良好,你需要训练你的分类器有很多正面(你的对象在哪里)和负面(你的对象不是)图像。该方法是由Viola和Jones于2001年发明的。
在OpenCV中有一个现成的面部检测实现,你会对openCV文档有更多的解释(对不起,不能发布链接,我暂时只限于1个链接..)
现在,注意事项:
首先,你需要很多正面和负面的图像。您拥有的图像越多,算法执行的效果就越好。谨防过度学习:如果您的高跟鞋训练数据包含例如某个模型的太多图像,则可能无法正确检测到其他模型
训练级联分类器可能很长且很困难。最终结果将取决于您选择用于训练分类器的参数的程度。有关此问题的一些信息,请访问此网页:http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html