Python计算机视觉——Bag of features算法
一、Bag of features算法
1.1Bag of features算法原理
此算法的思想是在我们先做一个数据集,然后找到图像中的关键词,这些关键词必须具备较高的区分度,最主要的操作就是提取sift特征,然后对这些特征点进行聚类算法,然后得到聚类中心,聚类中心就具有很高的代表性,这些聚类中心形成字典,然后自取一张图片,进行sift特征提取,就可以在字典里找到最相似的聚类中心,统计这些聚类中心出现的次数,然后就直方图表示出来,对于不同类别的图片,就可以训练处一些分类模型,然后就可以进行图片分类。
1.2算法流程
1.2.1收集数据集
1.2.2提取sift特征
1.2.3根据sift特征提取结果,进行聚类,得到一个字典
1.2.4根据字典将图片表示成向量(直方图);
1.2.5训练分类器或者用 KNN 进行检索
提取特征:
我们为了是图片具有较高的分辨度,我们使用sift特征提取,保证旋转不变性和尺度不变性,每个特征点都是128维的向量,将会提取很多的特征点
得到字典:
我们再次之前提取了很多的特征向量,然后就对这些特征向量进行k-means聚类,k值根据实际情况而定。聚类完成后,我们就得到了这 k 个向量组成的字典,这 k 个向量有一个通用的表达,叫 visual word。
直方图表示:
聚类之后,我们匹配图片的「SIFT」向量与字典中的 visual word,统计出最相似的向量出现的次数,最后得到这幅图片的直方图向量。

训练分类器:
当我们得到每幅图片的直方图向量后,剩下的这一步跟以往的步骤是一样的。无非是根据数据库图片的向量以及图片的标签,训练分类器模型。然后对需要预测的图片,我们仍然按照上述方法,提取「SIFT」特征,再根据字典量化直方图向量,用分类器模型对直方图向量进行分类。当然,也可以直接根据 KNN 算法对直方图向量做相似性判断
二、图像源

三、基于Bag of features算法的图像检索
3.1读取图片,提取特征,建立字典
3.1.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('D:/new/feng/')
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]

本文详细介绍了Bag of features算法在Python中的应用,包括算法原理、图像源、图像检索过程。通过提取SIFT特征,进行聚类构建字典,将图片表示为直方图向量,用于分类或KNN检索。在实践中遇到的问题,如SIFT特征提取的效率和代码错误,也进行了讨论。
最低0.47元/天 解锁文章
1332

被折叠的 条评论
为什么被折叠?



