我正在寻找一个可用的SURF指标。比如说在一个从0到1的范围内评估图像之间的相似度,其中0表示没有相似之处,1表示完全相同。
SURF提供以下数据:
- 查询图像(集合Q)中的兴趣点(及其描述符)
- 目标图像(集合T)中的兴趣点(及其描述符)
- 使用最近邻算法可以从上述两个集合中创建匹配对
到目前为止,我尝试了一些方法,但似乎都不太好用:
使用不同集合的大小来计算指标:d = N / min(size(Q), size(T)),其中N是匹配的兴趣点数量。这样,在非常相似的图像中也只能得到很低的分数,例如当Q中有大约600个兴趣点,T中有200个兴趣点时,即使匹配了70个兴趣点,也只能得到0.32的评分。我想使用一些对数缩放来处理,使得只有真正的低数字才会得到低结果,但似乎找不到合适的方程式。通过
d = log(9*d0+1)
,我得到了一个0.59的结果,这已经很不错了,但仍然会削弱SURF的效果。使用匹配对之间的距离计算指标:我尝试找到前K个最佳匹配,并将它们的距离相加。距离越小,两张图像就越相似。问题在于,我不知道一个兴趣点描述符元素的最大和最小值是什么,从而无法精确计算距离(只能通过多次输入来相对比较结果)。正如我所说的,我需要把指标放在0到1之间,以便将SURF与其他图像指标进行比较。
这两种方法中最大的问题是,它们互相排斥。一种方法没有考虑匹配数量,另一种方法则忽略了匹配之间的距离。我很迷茫。
编辑:对于第一种方法,使用公式log(x*10^k)/k,其中k为3或4,大多数情况下都能得到良好的结果。min函数并不好用,有时会使d大于1,如果不使用它,则可以得到较小的结果。