我在matlab中使用SIFT算法来确定模板图像和一组图像之间的相似性,最后我必须根据SCORES确定图像集之间的最佳匹配,是否可以这样说图像得分越高,匹配越好? 我知道当有完全匹配时,得分为零,但如果图像相似怎么办?
答案 0 :(得分:4)
我假设SCORES是指一对匹配描述符(例如欧几里德距离)之间的相似性度量。如果我的假设是正确的,统计平均所有匹配(例如SSD)的分数应该给你两个图像之间的一定程度的相似性。即,平均分数越小,相似性越高,零意味着完美匹配。要改进此相似性度量,您可以查看RANSAC,它可以删除匹配描述符集中的异常值。
编辑:平均匹配分数当然只有在匹配描述符的百分比足够高时才有意义(正如Maurits建议的那样)。因此,计算匹配和平均距离的组合可能是一种合理的方法。
答案 1 :(得分:3)
这个问题比可能看起来更为复杂。要想到这个想法,请尝试仅根据l1或l2距离在模板和目标图像之间匹配SIFT描述符并显示结果。因此,当l1或l2距离最小时,将每个模板点与目标点匹配。就指标而言,您无法做得更好。但是,在视觉上,您会看到这会产生不良结果。
这使人们有了不同的匹配策略。大多数程序部署的默认值是使用l2距离匹配,但仅接受两点之间的匹配,如果第二个最佳匹配显着(例如60%)更差。它运作得很好,但在这个策略中,有些点永远不会匹配。作为“得分”,您可以首先尝试模板与成功匹配或配对的图像之间的点数百分比。
大多数人在顶部部署的策略是确定在匹配的模板和图像点之间,应该保持x= Ax'
之类的关系。这意味着,如果图像是模板的旋转副本,我们希望在匹配的SIFT点A
和x'
之间找到旋转矩阵x
。为这种关系设置的大量匹配点集合的常用方法是RANSAC。所有不符合此共识变形A
的点都可以作为异常值从集合中移除。
这种方法的一个很好的演示可以在Peter Kovesi's site找到。