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