BOF图像检索

本文详细介绍了Bag of features(BOF)算法在图像检索中的应用,包括算法原理、步骤,以及K-means聚类算法的补充说明。通过提取SIFT特征,使用K-Means创建视觉词典,将图像转换为频率直方图,进而实现图像检索。在数据集上进行了实际操作,展示了从提取特征到图像检索的完整流程,并给出了运行结果。
摘要由CSDN通过智能技术生成

一、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')
voc.train(featlist, 1000, 10)
#保存词汇
# saving vocabulary
with open('D:/pythonProjects/ImageRetrieval/animaldb/vocabulary.pkl
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值