1. BOF原理

Bag of features(Bof)一种是用于图像和视频检索的算法。要了解Bag Of Feature 就要先知道Bag Of Words(BOW),Bag of Words 是文本分类中一种通俗易懂的策略。一般来讲,如果我们要了解一段文本的主要内容,最行之有效的策略是抓取文本中的关键词,根据关键词出现的频率确定这段文本的中心思想。期初用于语言和文本的分析,通过改进后用于图像的分类。
BOW中Bag里的Words通常是有代表性的词语或者说区分度高的词语。 在这里插入图片描述
如上图,我们不需要将整篇文本进行分析,仅从Iraq和Terrorists就可以大致判断这篇文章的中心。
而BOF算法与BOW大同小异,只是我们抽出的“关键词word”是图像中的关键特征(feature)。

BOF算法将一幅图像拆分成多个局部图像特征,这些特征必须具有很高的区分度。一个数据集中有多幅图像,每一幅图像做上述特征提取动作。所有图像的特征集结在一起形成“视觉词典”,每当输入新图像,就将图像的特征提取出来,与视觉词典中已有的特征进行匹配对比,由此进行图像检索/分类。

基本流程:

  1. 首先,我们用sift算法生成图像库中每幅图的特征点及描述符。
  2. 再用k-means算法对图像库中的特征点进行聚类,得到一部视觉词典。
  3. 针对输入特征集,根据视觉词典进行量化
  4. 把输入图像转化成视觉单词(visual words) 的频率直方图
  5. 构造特征到图像的倒排表,通过倒排表快速 索引相关图像
  6. 根据索引结果进行直方图匹配

在这里插入图片描述
数据集使用的是一个有100张图片的数据集。

  1. 提取sift特征
# -*- coding: utf-8 -*-
import pickle
from PCV.imagesearch import vocabulary
from PCV.tools.imtools import get_imlist
from PCV.localdescriptors import sift
#获取图像列表
imlist = get_imlist('first1000/')
nbr_images = len(imlist)
#获取特征列表
featlist = [imlist[i][:-3]+'sift' for i in range(nbr_images)]
#提取文件夹下图像的sift特征
for i in range(nbr_images):
    sift.process_image(imlist[i], featlist[i])
#生成词汇
voc = vocabulary.Vocabulary('ukbenchtest')
voc.train(featlist, 1000, 10)
#保存词汇
# saving vocabulary
with open('first1000/vocabulary.pkl', 'wb') as f:
    pickle.dump(voc, f)
print ('vocabulary is:', voc.name, voc.nbr_words)
  1. 遍历所有图像到数据库
# -*- coding: utf-8 -*-
import pickle
from PCV.imagesearch import imagesearch
from PCV.localdescriptors import sift
from sqlite3 import dbapi2 as sqlite
from PCV.tools.imtools import get_imlist
#获取图像列表
imlist = get_imlist('first1002/')
nbr_images = len(imlist)
#获取特征列表
featlist = [imlist[i][:-3]+'sift' for i in range(nbr_images)]
# load vocabulary
#载入词汇
with open('first1002/vocabulary.pkl', 'rb') as f:
    voc = pickle.load(f)
#创建索引
indx = imagesearch.Indexer('testImaAdd3.db',voc)
indx.create_tables()
# go through all images, project features on vocabulary and insert
    #遍历所有的图像,并将它们的特征投影到词汇上
for i in range(nbr_images)[:1000]:
    locs,descr = sift.read_features_from_file(featlist[i])
    indx.add_to_index(imlist[i],descr)
# commit to database
#提交到数据库
indx.db_commit()
con = sqlite.connect('testImaAdd3.db')
print (con.execute('select count (filename) from imlist').fetchone())
print (con.execute('select * from imlist').fetchone())
# -*- coding: utf-8 -*-
import pickle
from PCV.imagesearch import imagesearch
from PCV.localdescriptors import sift
from sqlite3 import dbapi2 as sqlite
from PCV.tools.imtools import get_imlist
#获取图像列表
imlist = get_imlist('first1000/')
nbr_images = len(imlist)
#获取特征列表
featlist = [imlist[i][:-3]+'sift' for i in range(nbr_images)]
#载入词汇
f = open('first1000/vocabulary.pkl', 'rb')
voc = pickle.load(f)
f.close()
src = imagesearch.Searcher('testImaAdd.db',voc)
locs,descr = sift.read_features_from_file(featlist[0])
iw = voc.project(descr)
print ('ask using a histogram...')
print (src.candidates_from_histogram(iw)[:10])
src = imagesearch.Searcher('testImaAdd.db',voc)
print ('try a query...')
nbr_results = 10
res = [w[1] for w in src.query(imlist[0])[:nbr_results]]
imagesearch.plot_results(src,res)

将数据集中的图片进行sift特征分析,再将特征向量保存成词汇词典,生成一个Vocabulary.pkl即词汇词典。
在这里插入图片描述
生成视觉词典:
在这里插入图片描述
建立数据库索引:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改变维度为50在这里插入图片描述
运行结果:
在这里插入图片描述
在这里插入图片描述
与维度为10时效果差不多。

本次实验中遇到很多的问题,生成词汇词典时就遇到了很多问题。还有因为sqlite总是安装不了,导致还无法得出正确结果。

遇到的问题

在这里插入图片描述
是因为imagesearch函数中的参数和我岁传入的参数类型不一致,修改过后就好了。

文章目录1. BOF原理实验内容数据集实验代码实验结果总结1. BOF原理Bag of features(Bof)一种是用于图像和视频检索的算法。要了解Bag Of Feature 就要先知道Bag Of Words(BOW),Bag of Words 是文本分类中一种通俗易懂的策略。一般来讲,如果我们要了解一段文本的主要内容,最行之有效的策略是抓取文本中的关键词,根据关键词出现的频率确定这段文本的中心思想。期初用于语言和文本的分析,通过改进后用于图像的分类。BOW中Bag里的Words通常是有代表性 1.1 原理 要了解Bag of Features,首先要知道Bag of Words。 Bag of Words是文本分类中一种通俗易懂的策略。一般来讲,如果我们要了解一段文本的主要内容,最行之有效的策略是抓取文本中的关键词,根据关键词出现的频率确定这段文本的中心思想。 比如:如果一则新闻中经常出现「iraq」、「terrorists」,那么,我们可以认为这则新闻应该跟
Bag of Features: Bag-of-Words(BoW)模型源于文本分类技术,在信息检索中,它假定对于一个文本,忽略其词序和语法、句法。将其仅仅看作是一个词集合,或者说是词的一个组合,文本中每个词的出现都是独立的,不依赖于其他词是否出现,或者说这篇文章的作者在任意一个位置选择词汇都不受前面句子的影响而独立选择的。 图像可以视为一种文档对象,图像中不同的局部区域或其特征可看做构成图像的词汇,其中相近的区域或其特征可以视作为一个词。这样,就能够把文本检索及分类的方法用到图像分类及检索中去。
Bag of features算法Bag of features算法原理实验代码实现实验结果实验结果分析: Bag of features算法原理 Bag of features,简称Bof,中文翻译为“词袋”,是一种用于图像或视频检索的技术。而检索就要进行比对。两幅不同的图像如何比对,比对什么,这就需要提炼出每幅图像中精练的东西出来进行比较。 1、Bag of features算法基础流程 1、收集图片,对图像进行sift特征提取。 2、从每类图像中提取视觉词汇,将所有的视觉词汇集合在一起。 3、利用K-
1.首先,我们用sift算法生成图像库中每幅图的特征点及描述符。 2.再用k-means算法对图像库中的特征点进行训练,生成类心。 3.生成每幅图像BOF,具体方法为:判断图像的每个特征点与哪个类心最近,最近则放入该类心,最后将生成一列频数表,即初步的无权BOF。 4.通过tf-idf对频数表加上权重,生成最终的bof。(因为每个类心对图像的影响不同。比如超市里条形码中的第一位总是6,它对
图像分类一直是图像处理问题的热点,近年来基于BoFbag-of-feature)特征袋方法倍受关注,特征袋方法BoF)是词袋方法(BoW)一种改进。本文简要的介绍了基本BoF图像分类的思路和其目前的一些改进方法。 字典学习过程(train a codebook) (1)特征提取:利用SIFT等局部描述子(SIFT方法最为常用,OpponentSIFT在各类SIFT改进方式综合表现最
Bag of Feature 是一种图像特征提取方法,它借鉴了文本分类的思路(Bag of Words),从图像抽象出很多具有代表性的「关键词」,形成一个字典,再统计每张图片中出现的「关键词」数量,得到图片的特征向量。 Bag of Words 模型 要了解「Bag of Feature」,首先要知道「Bag of Words」。「Bag of Words」 是文本分类中一种通俗易懂的策略。一般来讲,如果我们要了解一段文本的主要内容,最行之有效的策略是抓取文本中的关键词,根据关键词出现的频率确定这段文本的中
Bag of features算法Bag of features算法原理实验代码实现实验结果实验结果分析: Bag of features算法原理 Bag of features,简称Bof,中文翻译为“词袋”,是一种用于图像或视频检索的技术。而检索就要进行比对。两幅不同的图像如何比对,比对什么,这就需要提炼出每幅图像中精练的东西出来进行比较。 1、Bag of features算法基础流程 1、收集图片,对图像进行sift特征提取。 2、从每类图像中提取视觉词汇,将所有的视觉词汇集合在一起。 3、利用K-
Bag of Feature 是一种图像特征提取方法,它借鉴了文本分类的思路(Bag of Words),从图像抽象出很多具有代表性的「关键词」,形成一个字典,再统计每张图片中出现的「关键词」数量,得到图片的特征向量。Bag of Words 模型 要了解「Bag of Feature」,首先要知道「Bag of Words」。 Bag of Words ...
文章目录1. 原理1.1 Bag of features算法1.2 K-means算法简介2. 代码3. 实验结果及分析3.1实验结果3.2 实验小结4. 遇到的问题及解决方法 1. 原理 1.1 Bag of features算法 Bag of features,简称Bof,中文翻译为“词袋”,是一种用于图像或视频检索的技术。而检索就要进行比对。两幅不同的图像如何比对,比对什么,这就需要提炼出每幅图像中精练的东西出来进行比较。 1、Bag of features算法基础流程 1、收集图片,对图像进行sif
哈希图像检索是一种用于在大规模图像数据库中快速搜索相似图像方法。在哈希图像检索中,图像被转换为哈希码,然后通过比较哈希码的相似性来确定图像之间的相似度。有几种常用的哈希算法可以用于图像检索,如SIFT、SURF、ORB等特征提取算法\[1\]。此外,还有一些基于哈希的图像检索方法,如VLAD、BOF等,可以用于处理海量数据的图像检索\[1\]。 在哈希图像检索中,可以使用不同的方法来计算图像之间的相似度。一种常用的方法是通过比较图像的颜色、纹理和局部特征来计算相似度\[2\]。另外,还可以使用KD-Tree、局部敏感哈希(LSH)和原子哈希函数等方法来在高维空间中进行图像检索\[2\]。 此外,还有一种基于监督学习和核的Hash算法,称为KSH算法。KSH算法利用核主要是为了解决线性不可分问题,通过监督学习来学习到更有区分度的哈希值,从而降低特征维数\[3\]。 总之,哈希图像检索是一种用于在大规模图像数据库中快速搜索相似图像方法,它可以通过提取图像特征和计算相似度来实现。不同的哈希算法和方法可以用于不同的图像检索任务。 #### 引用[.reference_title] - *1* *3* [图像检索传统算法学习笔记](https://blog.csdn.net/qq_39858278/article/details/83895342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [8月23日计算机视觉理论学习笔记——图像检索](https://blog.csdn.net/Ashen_0nee/article/details/126467437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]