开始之前首先要安装几个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