python基于内容的图像检索(CBIR)

本文介绍了Python实现基于内容的图像检索(CBIR)的原理和方法,包括SIFT特征提取和匹配。文章详细阐述了CBIR的关键步骤,包括建立图像数据库、特征提取、图像索引和查询测试图片。最后,提到了代码实现过程。

开始之前首先要安装几个python第三方库包:pyQt5、cherrypy、pysqlite(我是python3.7安装的pysqlite3)
将PCV文件包及vlfeat放到工作目录下,配置sift文件
一、原理介绍:
基于内容的图像检索(CBIR)是指根据图像颜色、纹理、形状等视觉特征,在给定的图像库中查找含有一定特征的图像。它融合了图像理解技术,在输入图像的同时将其相应的特征向量也存入特征库。在进行图像检索时,对每-幅给定的关键图,进行图像分析,并提取图像的特征向量。将该图像的特征向量和特征库中的特征向量进行匹配,根据相似距离的大小在图像库中进行搜索就可以得到所需要的检索图了。其关键技术在于图像特征提取和特征匹配。
二、方法分类:
1、基于 SIFT 特征方法(本文采用)
2、基于 CNN 的方法
三、基本步骤:
1.建立图像数据库
2.对输入的图像进行分析并分类统一建模
3.根据各种图像模型提取图像特征存入特征库, 同时对特征库建立索引
4.根据条件查询测试图片
四、代码实现:
1.添加图片

# -*- coding: utf-8 -*-
import pickle
from PCV.imagesearch import imagesearch
from PCV.localdescriptors import sift
from sqlite3 import dbapi2 as sqlite
from PCV.tools.imtools import get_imlist

#获取图像列表
imlist = get_imlist('first1000/')
nbr_images = len(imlist)
#获取特征列表
featlist = [imlist[i][:-3]+'sift' for i in range(nbr_images)]

# load vocabulary
#载入词汇
with open('first1000/vocabulary.pkl', 'rb') as f:
    voc = pickle.load(f)
#创建索引
indx = imagesearch.Indexer('testImaAdd.db',voc)
indx.create_tables()
# go through all images, project features on vocabulary and insert
#遍历所有的图像,并将它们的特征投影到词汇上
for i in range(nbr_images)[:1000]:
    locs,descr = sift.read_features_from_file(featlist[i])
    indx.add_to_index(imlist[i],descr)
# commit to database
#提交到数据库
indx.db_commit()

con = sqlite.connect('testImaAdd.db')
print (con.execute('select count (filename) from imlist').fetchone())
print (con.execute('select * from imlist').fetchone())

2.创建词汇

# -*- coding: utf-8 -*-
import pickle
from PCV.imagesearch import vocabu
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值