BOF图像检索

  • Post author:
  • Post category:其他




一、Bag of features算法



1、算法原理

Bag of features算法一种是用于图像和视频检索的算法,该算法对于不同角度、光照的图像,基本都能在图像库中正确检索。



2、算法步骤

(1)收集图片,用sift算法生成图像库中没附图的特征及描述符。

(2)用K-means算法对图像库中的特征点进行训练,生成类聚中心。

(3)通过判断图像的每个特征点与那个类心最近,最近则放入该类心,最后生成一列频数表,生成每幅图像的BOF。

(4)对需要查询的图片不断进行(3)操作,生成一列查询图片的BOF。

(5) 将得到的BOF向量与图像库中每幅图的BOF向量求夹脚,夹脚最小的即为匹配对象。



3、补充:K-means算法

K-means算法是一种类聚算法,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。

K-means算法步骤:

(1)从数据中选择K个对象作为初始类聚中心。

(2)计算每个类聚对象到类心的距离。

(3)计算标准测度函数,直到达到最大迭代次数,停止。



4、BOF算法的流程

1、准备一个训练图片集,提取这些图片的SIFT特征

2、对这些特征进行K-Means聚类,创建视觉词典。

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

4、输入测试图片,提取测试图片的SIFT特征,把输入图像转成视觉单词的频率直方图。

5、构造特征到图像的倒排表,通过倒排表快速索引相关图像。

6、根据索引结果进行直方图匹配



数据集

在这里插入图片描述



代码

(1)提取每张图片的sifi特征,生成词汇表。

# -*- 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:/pythonProjects/ImageRetrieval/first500/')
imlist = get_imlist('D:/pythonProjects/ImageRetrieval/animaldb/')
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')



版权声明:本文为t20187原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。