计算机视觉——Bag of features:图像检索作业

1、实验需求

1.构造不小于100张图片的数据集
2. 针对数据集,做SIFT特征提取
3. 根据SIFT特征提取结果,采用k-means算法学习“视觉词典
(visual vocabulary)”,其中维度至少满足4个量级( 比如10,50,100,1000,5000 )
4.根据IDF原理,计算每个视觉单词的权
5.针对数据库中每张图片的特征集,根据视觉词典进行量化以及TF-IDF解算。每张图片转化成特征向量
6.对于输入的检索图像(非数据库中图片),计算SIFT特征,并根据TF-IDF转化成频率直方图/特征向量
7.构造检索图像特征到数据库图像的倒排表,快速索引相关候选匹配图像集
8.针对候选匹配图像集与检索图像进行直方图/特征匹配

2、语言和平台

语言:python2.7.13 (anaconda2)
平台:pycharm 2018.2

3、实验原理

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

Bag of Feature 算法过程
1、特征提取(sift)
局部特征提取:通过分割、密集或随机采集、关键点或稳定区域、显著区域等方式使图像形成不同的patches,并获得各patches处的特。其中,SIFT特征较为流行。
2、构建视觉词典
由聚类中心代表的视觉词汇形成视觉词典:
在这里插入图片描述
3、生成码书,即构造Bag of Features特征,也即局部特征投影过程:
在这里插入图片描述
4、SVM训练BOF特征得分类模型,对待测图像BOF特征预测:
在这里插入图片描述
实现检索的过程同分类的过程无本质的差异,更多的是细节处理上的差异:
1、局部特征提取;
2、构建视觉词典;
3、生成原始BOF特征;
4、引入TF-IDF权值:TF-IDF是一种用于信息检索的经常使用加权技术,在文本检索中。用以评估词语对于一个文件数据库中的当中一份文件的重要程度。词语的重要性随着它在文件里出现的频率成正比添加,但同一时候会随着它在文件数据库中出现的频率成反比下降。TF的主要思想是:假设某个关键词在一篇文章中出现的频率高。说明该词语能够表征文章的内容。该关键词在其它文章中非常少出现,则觉得此词语具有非常好的类别区分度,对分类有非常大的贡献。IDF的主要思想是:假设文件数据库中包括词语A的文件越少。则IDF越大,则说明词语A具有非常好的类别区分能力。
词频(Term Frequency。TF)指的是一个给定的词语在该文件里出现的次数。如:tf = 0.030 ( 3/100 )表示在包括100个词语的文档中, 词语’A’出现了3次。
逆文档频率(Inverse Document Frequency。IDF)是描写叙述了某一个特定词语的普遍重要性。假设某词语在很多文档中都出现过,表明它对文档的区分力不强,则赋予较小的权重;反之亦然。

4、代码

Visualdictionary.py
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('D:/PyCharm/dictionary/')
nbr_images = len(imlist)
#获取特征列表
featlist = [imlist[i][:-3]+'sift' for i in range(nbr_images)]

#提取文件夹下图像的sift特征
for i in range(nbr_images)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值