基于内容的图像检索(2):算法流程以及典型方法及相关资料

一、图像检索方法流程

  • 流程 :构建特征库,构建索引,图像检索
    构建索引的一个例子是,倒排索引,所谓倒排索引:就是利用稀疏的特征值代替文件编号作为索引值,可以提高检索的效率)
  • 核心方法:特征提取,近邻查找
  • 特征提取:全局特征、局部特征
    全局特征与局部特征需要不同的检索方法,如果是全局特征可以直接通过欧式距离进行相似性比较,局部特征一般包含:特征点和特征描述符,则需要对局部的特征点进行匹配,匹配过程更加复杂。
  • 查找方法:近邻查找,近似最近邻查找方法(ANN)

二、几种典型的特征提取方法

2.1 BOF(bag of feature)

这种方法起源于文本分析中的BOW方法,其主要过程分为以下几步:

  • 使用surf生成图像的特征描述点和特征描述点的特征描述符

  • 使用聚类算法将上述特征描述符进行聚成K类,每一类生成一个聚类中心

  • 将描述符与各个聚类中心进行计算欧式距离,选择最近的距离,在该聚类中心内的频数上加1,生成频数表

  • 通过tf-idf对频数进行加权,生成最终的BOF

    • 词频(Term frequency,TF)给定词在文件中出现的次数。例如tf=3/100表示包括100个词语的文档中,词语Z出现了3次。
    • 逆文档频率(inverse Document Frequency,IDF),描述了一个词语的普遍重要性。假设该词语在很多文档中都出现过,表示该词语对文本的区分力不强。如:idf = log (10 000 000/1 000) ,表示在总的10 000 000个文档中,有1,000个文档包括词语’A‘。
    • TF的主要思想是:假设某个关键词在一篇文章中出现的频率高。说明该词语能够表征文章的内容。该关键词在其它文章中非常少出现,则觉得此词语具有非常好的类别区分度,对分类有非常大的贡献。IDF的主要思想是:假设文件数据库中包括词语A的文件越少。则IDF越大,则说明词语A具有非常好的类别区分能力。

    以上是特征提取阶段
    以下是特征匹配阶段

  • 对请求进来的图像也进行前面的操作,生成请求图像的BOF。

  • 将请求图像的BOF向量与求方向余弦,夹角最小的就是匹配对象。

2.2 VLAD(vector of locally aggregated descriptors)

VLAD算法可以看做是一种简化的FV算法,其主要方法是通过聚类方法训练一个小的码本,对于每幅图像中的特征找到最近的码本聚类中心,随后所有特征与聚类中心的差值做累加,得到一个kd的vlad矩阵,其中k是聚类中心个数,d是特征维数(如sift是128维),随后将该矩阵扩展为一个(kd)维的向量,并对其L2归一化,所得到的向量即为VLAD。关于该算法为何有效,Jegou et al.在2012年的期刊版本Aggregating local image descriptors into compact codes中有着相关证明。

  • 算法流程

    • 读取图片文件路径及特征提取

    • 使用聚类方法训练码本

    • 将每张图片的特征与最近的聚类中心进行累加

    • **对累加后的VLAD进行PCA降维并对其归一化

    • ***得到VLAD后,使用ADC方法继续降低储存空间和提高搜索速度

      最后两步可选,也可以在第三步拉伸矩阵后进行L2归一化操作,然后使用欧式距离计算两张图片的相似性实现图片检索。

      L2范数归一化:每一个元素除以L2范数(每一项的平方累加开平方)

该部分参考:https://blog.csdn.net/o3279/article/details/81221881
其他更多VLAD算法的介绍:

https://www.cnblogs.com/mafuqiang/p/6909556.html opencv的实际例子

https://blog.csdn.net/zshluckydogs/article/details/81003966 解读与python实现

3.3 FV(fisher vector)

传统方法中还有一种这种方法,与前两种类似,由于VLAD具有更加简化,更多的使用VLAD算法。

三、检索方法介绍

3.1一种近邻查找方法(NN):k-D树

总结了一下近邻查找方法中的一种常用方法K-D树(k-dimensional trees)方法,该方法其实相当于一个划分二叉树的过程。
假设在特征提取阶段生成了一个100维度的特征向量用于描述原图像,整个数据集上所有图像这100个维度的特征称为特征空间。在特征空间中选定方差最大的维度(认为方差越大,该维度上的内部差异越大,具有更好的区分性),将所有图像数据集在该维度上进行降序排列,选择中值,进行切分。之后对左右子树在一次进行上述过程。

3.2 一种近似最近邻查找方法:LSH(局部敏感哈希)

被认为是一种适用于大规模高纬度图像检索方法。

后续看了其他方法在补充吧

四、相关资源

https://cloud.tencent.com/developer/article/1333143 资源汇总

https://zhuanlan.zhihu.com/p/34332385 一篇论文

https://modeldepot.io/mikeshi/delf delf的实现,下一篇文章会介绍相关论文

https://github.com/willard-yuan/awesome-cbir-papers 令人惊叹的图像检索论文汇总

https://zhuanlan.zhihu.com/p/42237442 基于内容的图像检索方法综述

你可能感兴趣的:(基于内容的图像检索)