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

一、Bag of features算法

1、算法原理

Bag of features(Bof)一种是用于图像和视频检索的算法,此算法的神奇之处,就在于对于不同角度,光照的图像,基本都能在图像库中正确检索。Bof,即Bag of features,中文翻译为“词袋”,是一种用于图像或视频检索的技术。而检索就要进行比对。两幅不同的图像如何比对,比对什么,这就需要提炼出每幅图像中精练的东西出来进行比较。正如超市中的条形码,就能很好的反映出一件商品的所有特征。因此概括的来说,bof就是生成每幅图像的“条形码”来进行检索。

实验中,我们有一个包含100幅图像的小型图像库。然后再拿一些图像进行query,来找出库中与之对应的图像。

2、算法过程

1.首先,我们用sift算法生成图像库中每幅图的特征点及描述符。

2.再用k-means算法对图像库中的特征点进行训练,生成类心。

3.生成每幅图像的BOF,具体方法为:判断图像的每个特征点与哪个类心最近,最近则放入该类心,最后将生成一列频数表,即初步的无权BOF。
4.通过tf-idf对频数表加上权重,生成最终的bof。(因为每个类心对图像的影响不同。比如超市里条形码中的第一位总是6,它对辨别产品毫无作用,因此权重要减小)。
5.对query进来的图像也进行3.4步操作,生成一列query图的BOF。
6.将query的Bof向量与图像库中每幅图的Bof向量求夹角,夹角最小的即为匹配对象。

二、实验分析

1、数据集准备

本次实验准备了100张图片,来源于附近的景观,以及网络上面的图片。在实验开始前最好进行图片压缩,以方便后续的运行,否则速度将会很慢。同样也可以选择网络上的数据集直接进行操作。
在这里插入图片描述

2、实验源码

第一部分 sift特征匹配

# -*- coding: utf-8 -*

import pickle

from PCV.imagesearch import vocabulary

from PCV.tools.imtools import get_imlist

from PCV.localdescriptors import sift

# 要记得将PCV放置在对应的路径下


# 获取图像列表

imlist = get_imlist('D:/pycharm/untitled1/image/')  # 存放数据集的路径

nbr_images = len(imlist)  # 获取数据集的长度

# nbr_images = 300  # 可以是自己选择用多少张图片作为训练数据集

# 获取特征列表

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('imglltest')

voc.train(featlist, 300, 10)

# 保存词汇

with open('D:/pycharm/untitled1/vocabulary.pkl', 'wb') as f:
  
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值