我将我为一个区域计算的所有特征集中到一个长特征向量中。[...]
什么是量化 F1 和 F2 之间相似性的好指标?[...]
如何最好地标准化 F1 和 F2?
tl;dr:使用此处描述的TF-IDF评分(参见离散方法,幻灯片 18-35)。
有一个(相当古老的)CBIR 引擎,称为GIFT(又名 GNU 图像查找工具),它精确地遵循这种计算图像之间相似性的方法。
GIFT 的真正有趣之处在于它将文本检索技术应用于CBIR - 在某些方面已成为一种经典方法(请参阅视频中对象匹配的文本检索方法)。
在实践中,GIFT 提取了大量的局部和全局颜色和纹理低级特征,其中每个单独的特征(例如直方图中第 i 个颜色的数量)都可以被认为是一个视觉词:
- 全局颜色(HSV 颜色直方图):166 个 bin = 166 个视觉词
- 局部颜色(通过递归地将输入图像细分为子区域的颜色直方图分析):340(子区域)x 166(箱)= 56,440 个视觉词
- 全局纹理(Gabor 直方图):3(尺度)x 4(方向)x 10(范围)= 120 个视觉词
- 局部纹理(子区域网格中的 Gabor 直方图):256(子区域)x 120(箱)= 30,720 个视觉词
因此,对于任何输入图像,GIFT 都能够提取一个 87,446 维的特征向量F
,记住一个特征被认为是存在(以特定频率F[i]
)或不存在于图像中(F[i] = 0
)。
然后诀窍在于首先将每个图像(这里是每个区域)索引到一个反转文件中以进行有效查询。在第二步(查询时间)中,您可以自由地将每个区域用作查询图像。
在查询时,引擎使用经典的TF-IDF评分:
/* Sum: sum over each visual word i of the query image
* TFquery(i): term frequency of visual word i in the query image
* TFcandidate(i): term frequency of visual word i in the candidate image
* CF(i): collection frequency of visual word i in the indexed database
*/
score(query, candidate) = Sum [ TFquery(i) * TFcandidate(i) * log**2(1/CF(i)) ]
自 GIFT 以来,内部情况有点复杂:
- 通过分别关注每种低级特征(子查询 1 = 仅颜色历史,子查询 2 = 颜色块等)执行子查询并合并分数,
- 包括特征修剪以仅评估一定百分比的特征。
GIFT 非常有效,所以我很确定你会在那里找到可以适应的有趣想法。当然,如果您没有性能限制,您可以避免使用倒排索引。