我已经在OpenCV中实现了SIFT算法,使用以下步骤进行特征检测和匹配:
使用Otsu的阈值处理去除背景
使用SIFT特征检测器进行特征检测
使用SIFT特征提取器进行描述符提取
使用BFMatcher(L2 Norm)匹配特征向量并使用比率测试来过滤良好匹配
我的目标是根据图像的相似性将图像分类到不同的类别,如鞋子,衬衫等 . 例如,两个不同的鞋跟应该比鞋跟和运动鞋或鞋跟和T恤更彼此相似 .
但是,只有当我的模板图像出现在搜索图像中时(无论是任何比例和方向),此算法才能正常工作 . 如果我比较两种不同的高跟鞋,它们不匹配并且匹配也是随机的(一个图像的跟部与另一个图像的平面匹配) . 当我将鞋跟与运动鞋或鞋跟与T恤或鞋跟与婴儿的照片进行比较时,也存在许多误报!
我想看一下鞋跟,并将其标识为鞋跟,并将鞋跟与我的数据库中的不同图像的相似程度与其他鞋跟的最大相似度,然后是其他鞋子 . 它不应与衬衫,手机,笔等无关物体产生任何相似之处 .
据我所知,SIFT算法根据关键点周围像素的梯度值为每个关键点生成描述符向量,并且纯粹使用此属性匹配图像 . 因此,很可能位于一个鞋的跟部附近的关键点与另一个鞋的表面处的关键点匹配 . 因此,我收集的是该算法只能用于检测精确匹配而不能检测图像之间的相似性
你能否告诉我这个算法是否可以用于我的目标,如果我做错了什么或建议我应该使用任何其他方法 .