BOW图像检索

  • 一、图像检索
    • 1.1图像检索原理
    • 1.2实现步骤
  • 二、实验过程
    • 2.1数据集
    • 2.2代码
    • 2.3结果
  • 三、实验总结

一、图像检索

1.1图像检索原理

1、图像检索
简单的说便是从图片检索数据库中检索出满足条件的图片,图像检索技术的研究根据描述图像内容方式的不同可以分为两类:一类是基于文本的图像检索技术,一类为基于内容的图像检索技术。它最早用于对于文章内容的检索,原理是将文本看作是单词的集合,不考虑其中的语法,上下文等等。通过建立词典,对每个单词出现次数进行统计,以便得到文本内容的分类。计算机视觉的专家从中获得灵感,将其用于图像的检索中,就有了Bag Of Features。
2、Bag of Feature 算法
1、Bag-of-Features模型仿照文本检索领域的Bag-of-Words方法,把每幅图像描述为一个局部区域/关键点(Patches/Key Points)特征的无序集合。使用某种聚类算法(如K-means)将局部特征进行聚类,每个聚类中心被看作是词典中的一个视觉词汇(Visual Word),相当于文本检索中的词,视觉词汇由聚类中心对应特征形成的码字(code word)来表示(可看当为一种特征量化过程)。所有视觉词汇形成一个视觉词典(Visual Vocabulary),对应一个码书(code book),即码字的集合,词典中所含词的个数反映了词典的大小。图像中的每个特征都将被映射到视觉词典的某个词上,这种映射可以通过计算特征间的距离去实现,然后统计每个视觉词的出现与否或次数,图像可描述为一个维数相同的直方图向量,即Bag-of-Features。

2、Bag-of-Features算法
Bag-of-Features模型仿照文本检索领域的Bag-of-Words方法,把每幅图像描述为一个局部区域/关键点(Patches/Key Points)特征的无序集合。使用某种聚类算法(如K-means)将局部特征进行聚类,每个聚类中心被看作是词典中的一个视觉词汇(Visual Word),相当于文本检索中的词,视觉词汇由聚类中心对应特征形成的码字(code word)来表示(可看当为一种特征量化过程)。所有视觉词汇形成一个视觉词典(Visual Vocabulary),对应一个码书(code book),即码字的集合,词典中所含词的个数反映了词典的大小。图像中的每个特征都将被映射到视觉词典的某个词上,这种映射可以通过计算特征间的距离去实现,然后统计每个视觉词的出现与否或次数,图像可描述为一个维数相同的直方图向量,即Bag-of-Features。

Bag-of-Features更多地是用于图像分类或对象识别。对训练集提取Bag-of-Features特征,在某种监督学习(如:SVM)的策略下,对训练集的Bag-of-Features特征向量进行训练,获得对象或场景的分类模型;对于待测图像,提取局部特征,计算局部特征与词典中每个码字的特征距离,选取最近距离的码字代表该特征,建立一个统计直方图,统计属于每个码字的特征个数,即为待测图像之Bag-of-Features特征;在分类模型下,对该特征进行预测从实现对待测图像的分类。

1.2实现步骤

1.特征提取
局部特征提取:通过分割、密集或随机采集、关键点或稳定区域、显著区域等方式使图像形成不同的patches,并获得各patches处的特。其中,SIFT特征较为流行。
2.采用K-means算法学习“视觉词典”(visual vocabulary)
由聚类中心代表的视觉词汇形成视觉词典
3.针对输入特征集,根据视觉词典进行量化
4.把输入图像,根据TF-IDF转化成视觉单词( visual words)的频率直方图
TF-IDF是一种用于信息检索的经常使用加权技术,在文本检索中。用以评估词语对于一个文件数据库中的当中一份文件的重要程度。词语的重要性随着它在文件里出现的频率成正比添加,但同一时候会随着它在文件数据库中出现的频率成反比下降。TF的主要思想是:假设某个关键词在一篇文章中出现的频率高。说明该词语能够表征文章的内容。该关键词在其它文章中非常少出现,则觉得此词语具有非常好的类别区分度,对分类有非常大的贡献。IDF的主要思想是:假设文件数据库中包括词语A的文件越少。则IDF越大,则说明词语A具有非常好的类别区分能力。
词频(Term Frequency。TF)指的是一个给定的词语在该文件里出现的次数。如:tf = 0.030 ( 3/100 )表示在包括100个词语的文档中, 词语’A’出现了3次。
逆文档频率(Inverse Document Frequency。IDF)是描写叙述了某一个特定词语的普遍重要性。假设某词语在很多文档中都出现过,表明它对文档的区分力不强,则赋予较小的权重;反之亦然。
5.构造特征到图像的倒排表,通过倒排表快速索引相关图像
6.根据索引结果进行直方图匹配

二、实验过程

2.1数据集

2.2代码

1、生成词典:

# -*- 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('C:/Users/apple/Desktop/计算机视觉/图像检索')
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, 30, 10)
#保存词汇
# saving vocabulary
with open('C:/Users/apple/Desktop/计算机视觉/图像检索/vocabulary.pkl', 'wb') as f:pickle.dump(voc, f)
print ('vocabulary is:', voc.name, voc.nbr_words)

2、将数据导入数据库:

# -*- coding: utf-8 -*-
import picklefrom PCV.imagesearch import imagesearch
from PCV.localdescriptors import sift
import sqlite3
from PCV.tools.imtools import get_imlist# 获取图像列表
# imlist = get_imlist('E:/Python37_course/test7/first1000/')
imlist = get_imlist('C:/Users/apple/Desktop/计算机视觉/图像检索')
nbr_images = len(imlist)
# 获取特征列表
featlist = [imlist[i][:-3] + 'sift' for i in range(nbr_images)]# load vocabulary
# 载入词汇
'''with open('E:/Python37_course/test7/first1000/vocabulary1.pkl', 'rb') as f:voc = pickle.load(f)'''
with open('C:/Users/apple/Desktop/计算机视觉/图像检索//vocabulary4.pkl', 'rb') as f:# voc = pickle.load(f)voc = pickle.load(f, encoding='iso-8859-1')
# 创建索引
indx = imagesearch.Indexer('testImaAdd4.db', voc)
indx.create_tables()
# go through all images, project features on vocabulary and insert
# 遍历所有的图像,并将它们的特征投影到词汇上# for i in range(nbr_images)[:1000]:
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 = sqlite3.connect('testImaAdd4.db')
print(con.execute('select count (filename) from imlist').fetchone())
print(con.execute('select * from imlist').fetchone())

3、测试

# -*- coding: utf-8 -*-
import pickle
# import sift
from PCV.imagesearch import imagesearch
from PCV.geometry import homography
from PCV.tools.imtools import get_imlist
from PIL import Image
# from pylab import *
from PCV.localdescriptors import sift
from PCV.localdescriptors import harris# load image list and vocabulary
# 载入图像列表
# imlist = get_imlist('E:/Python37_course/test7/first1000/')
imlist = get_imlist('C:/Users/apple/Desktop/计算机视觉/图像检索/')
nbr_images = len(imlist)
# 载入特征列表
featlist = [imlist[i][:-3] + 'sift' for i in range(nbr_images)]# 载入词汇
'''with open('E:/Python37_course/test7/first1000/vocabulary.pkl', 'rb') as f:voc = pickle.load(f)'''
with open('C:/Users/apple/Desktop/计算机视觉/图像检索//vocabulary1.pkl', 'rb') as f:voc = pickle.load(f, encoding='iso-8859-1')src = imagesearch.Searcher('testImaAdd1.db', voc)# index of query image and number of results to return
# 查询图像索引和查询返回的图像数
q_ind = 0
nbr_results = 20# regular query
# 常规查询(按欧式距离对结果排序)
res_reg = [w[1] for w in src.query(imlist[q_ind])[:nbr_results]]
print('top matches (regular):', str(res_reg))# load image features for query image
# 载入查询图像特征
q_locs, q_descr = sift.read_features_from_file(featlist[q_ind])
fp = homography.make_homog(q_locs[:, :2].T)# RANSAC model for homography fitting
# 用单应性进行拟合建立RANSAC模型
model = homography.RansacModel()
rank = {}# load image features for result
# 载入候选图像的特征
for ndx in res_reg[1:]:locs, descr = sift.read_features_from_file(featlist[ndx])  # because 'ndx' is a rowid of the DB that starts at 1# get matchesmatches = sift.match(q_descr, descr)ind = matches.nonzero()[0]ind2 = matches[ind]tp = homography.make_homog(locs[:, :2].T)# compute homography, count inliers. if not enough matches return empty listtry:H, inliers = homography.H_from_ransac(fp[:, ind], tp[:, ind2], model, match_theshold=4)except:inliers = []# store inlier countrank[ndx] = len(inliers)# sort dictionary to get the most inliers first
sorted_rank = sorted(rank.items(), key=lambda t: t[1], reverse=True)
res_geom = [res_reg[0]] + [s[0] for s in sorted_rank]
print('top matches (homography):', res_geom)# 显示查询结果
imagesearch.plot_results(src, res_reg[:5])  # 常规查询
imagesearch.plot_results(src, res_geom[:5])  # 重排后的结果

2.3结果

测试图片:

三、实验总结

1、原先使用自己拍摄的图片集的时候,图片大而多,生成sift特征平均每张图要运行2分钟左右,因此采用了网上搜索到的图片集进行实验。图片集每4张图片相似,25组共100张。图片像素为640x480,运行速度明显变快。
2、运行结果来看,BOW图像检索的效果相对较好,前四张为相似图片。
3、仍存在某些劣势:
a、Kmeans聚类时间长
b、词袋表的量化的过程,损失了匹配精度(本实验中采用网上的图,匹配效果相对较好)
4、出现错误:

计算机视觉—BOW图像检索相关推荐

  1. 计算机视觉——bow图像检索

    计算机视觉--bow图像检索 1.BOW模型简介 2.基于bag of words的图像检索基本步骤 2.1 特征提取 2.2 学习 "视觉词典(visual vocabulary)&quo ...

  2. Python 计算机视觉-BOW图像检索

    一.图像检索的概述和原理   从20世纪70年代开始,有关图像检索的研究就已开始,当时主要是基于文本的图像检索技术(Text-based Image Retrieval,简称TBIR),利用文本描述的 ...

  3. 基于python3计算机视觉编程(八)BOW图像检索

    BOW图像检索 一. 图像检索简介 二. 检索的分类 三. BOW图像检索 3.1 BOW原理简述 3.2 算法实现步骤 (1) 特征提取 (2) 学习"视觉词典"visual v ...

  4. BoW图像检索Python实战

    BoW图像检索Python实战 2015年06月16日  Image Retrieval  词袋模型 字数:11854 前几天把HABI哈希图像检索工具包更新到V2.0版本后,小白菜又重新回头来用Py ...

  5. CV之IR:计算机视觉之图像检索(Image Retrieval)方向的简介、使用方法、案例应用之详细攻略

    CV之IR:计算机视觉之图像检索(Image Retrieval)方向的简介.使用方法.案例应用之详细攻略 目录 图像检索(Image Retrieval)方向的简介 图像检索(Image Retri ...

  6. 词袋模型BoW图像检索Python实战

    前几天把HABI哈希图像检索工具包更新到V2.0版本后,小白菜又重新回头来用Python搞BoW词袋模型,一方面主要是练练Python,另一方面也是为了CBIR群开讲的关于图像检索群活动第二期而准备的 ...

  7. 词袋 图像检索 matlab,词袋模型BoW图像检索Python实战

    前几天把HABI哈希图像检索工具包更新到V2.0版本后,小白菜又重新回头来用Python搞BoW词袋模型,一方面主要是练练Python,另一方面也是为了CBIR群开讲的关于图像检索群活动第二期而准备的 ...

  8. 计算机视觉——BOF图像检索算法

    文章目录 Bag of Words 模型 Bag of Feature 算法 一.Bag of Feature 算法过程 1.1提取图像特征 1.2训练字典 1.3图片直方图表示 1.4根据TF-ID ...

  9. 计算机视觉之图像检索

    结构 相似检索 颜色.纹理.形状 局部特征点 词包(Bag of Visiual Word) 索引加速 KD-tree 局部敏感哈希(Locality Sensitive Hash)

最新文章

  1. Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节
  2. interp3函数-----三维数据插值
  3. download first at netease music
  4. matlab教程点语言,编程语言 / Matlab教程_电脑教程学习网( 5 )
  5. 秦九韶算法matlab程序,数值分析matlab程序实例.doc
  6. 俄罗斯套娃(JOISC 2016 Day 1)
  7. [Luogu 3835]【模板】可持久化平衡树
  8. 第 5 章 File Share
  9. linux初学者-DNS集群篇
  10. angular动态绑定样式以及改变UI框架样式的方法
  11. 测试用例之黑盒测试方法
  12. 【MATLAB图像融合】[18]双通道PCNN模型实现图像融合
  13. SSM+Flowplayer实现web项目网页看视频
  14. python宣传视频 抖音_python下载抖音无水印视频
  15. 配置标准IP ACL实验
  16. Threejs入门之五:Threejs中的辅助对象
  17. 查询出每个雇员的姓名,工资,部门名称,工资在公司的等级及其领导的姓名,领导的工资,以及领导所对应的等级
  18. 在微信小程序中 使用uView rules 表单校验 validator 不起作用(无效)
  19. 图片浏览器功能的实现(一)——图片放大与缩小功能实现
  20. 机器学习的所有资源链接和经验教训(五)ML技术讲座

热门文章

  1. 代号Gimmick Arch Linux 0.7.2发布
  2. 婚恋网站能遇见幸福吗?2019互联网婚恋交友行业洞察
  3. 万有(惠州)国际旅游度假区项目落户惠州
  4. 数据加密解决方案有哪些?
  5. MAE学习 论文阅读与学习 源码阅读
  6. 进制转换 原码、反码、补码
  7. 广和通5G模组FG360系列推出最新迭代版本,持续释放5G FWA商业价值
  8. 我的有趣的英语学习经历
  9. 等风来不如追风去,贵阳校区小哥哥转行软件测试获12k,做职场最靓的仔~
  10. 2021年中国医疗美容(医美)行业发展回顾:监管不断趋严、市场规模稳步扩大,发展前景广阔[图]