基于BOW的图像检索(Python)

一、BOW原理

      最初的Bag of words,也叫做“词袋”。Bag of words模型是信息检索领域常见的文档表示方法。在信息检索中,假设一个文本,忽视它的词序和语法等要素,将其仅仅看作是一个词集合,文本中每个词的出现都是独立的。然后根据文本中的词频分布,构造文本描述子。

例如:文本1:Tom likes to eat cake, Jake likes too.

           文本2:Tom likes to eat fruit .

基于这两个文本,构造一个词典:

dictionary={1:“Tom”,2:“likes”,3:“to”,4,:“eat”,5:“cake”,6:“fruit”,7:“Jake”,8:“too”}

这个词典一共包含8个不同的单词,利用词汇中的索引号,上面的两个文档每一个都可以用一个8维的向量表示某词在文档中出现的次数。

文本1:【1,2,1,1,1,0,1,1】

文本2:【1,1,1,1,0,1,0,0】

然后根据每个单词在文本中出现的权重,便可构造单词的频率直方图。

二、将Bag of words模型应用到图像检索中

       为了表示一幅图像,我们可以将图像看作文档,即若干个“视觉词汇”的集合,同样的,视觉词汇之间没有顺序。

1、特征提取

       由于图像中的词汇不像文本文档那样是现成的单词,所以我们首先要从图像中提取出相互独立的视觉词汇。然后为创建视觉单词词汇,第一步要做的就是提取特征描述子。

      SIFT算法是提取图像中局部不变特征的应用最广的算法,所以我们可以采用SIFT算法才进行特征提取,SIFT特征的具体原理分析,请参见博客:https://blog.csdn.net/sinat_37751993/article/details/88578410

然后将每幅图像提取出的描述子保存在一个文件中,构建视觉词典

2、学习 “视觉词典(visual vocabulary)”

 聚类是实现 visual vocabulary /codebook的关键 ,最常见的聚类方法就是,K-means 聚类算法。

(1)随机初始化 K 个聚类中心 

(2)对应每个特征,根据距离关系赋值给某个中心/类别 。其中距离的计算可采用欧式距离:

(3)对每个类别,根据其对应的特征集重新计算聚类中心

重复(2)(3)步骤,直至算法收敛

3、 针对输入特征集,根据视觉词典进行量化 

       对于输入特征,量化的过程是将该特征映射到距离其最接近的视觉单词,并实现计数 。选择合适的视觉词典的规模是我们需要考虑的问题,若规模太少,会出现视觉单词无法覆盖所有可能出现的情况 。若规模太多,又会计算量大,容易过拟合 。只能通过不断的测试,才能找到最合适的词典规模。

4、把输入图像转化成视觉单词(visual words) 的频率直方图 

利用SIFT算法,可以从每幅图像中提取很多特征点,通过统计每个视觉单词在词汇中出现的次数,可以得到如下直方图,(假设词汇中只有四个视觉单词)

5、构造特征到图像的倒排表,通过倒排表快

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值