您现在的位置:首页 > 教案格式 > 正文

基于BOW的图像检索(Python)(2)

2019-07-13 09:06 网络整理 教案网

直方图匹配原理_直方图匹配步骤_直方图匹配

| `set_parameter` | c->s s->c | p,s | 可选 | 这个方法请求设置演示或url指定流的参数值. 请求仅应包含单个参数, 允许客户端决定某个特殊请求为何失败. 如请求包含多个参数, 所有参数可成功设置, 服务器必须只对该请求起作用. 服务器必须允许参数可重复设置成同一值, 但不让改变参数值. 注意: 媒体流传输参数必须用setup命令设置. 将设置传输参数限制为setup有利于防火墙. 将参数划分成规则排列形式, 结果有更多有意义的错误指示 |。| `set_parameter` | c->s s->c | p,s | 可选 | 这个方法请求设置演示或url指定流的参数值. 请求仅应包含单个参数, 允许客户端决定某个特殊请求为何失败. 如请求包含多个参数, 所有参数可成功设置, 服务器必须只对该请求起作用. 服务器必须允许参数可重复设置成同一值, 但不让改变参数值. 注意: 媒体流传输参数必须用setup命令设置. 将设置传输参数限制为setup有利于防火墙. 将参数划分成规则排列形式, 结果有更多有意义的错误指示 | 。不可以删除,已有的xml数据索引方法从实现思想上可分为两类:结构归纳法和节点定位法.这两种方法都存在一定的问题,结构归纳法的缺点是索引规模较大而且难以有效支持较复杂的查询,而节点定位法的主要缺点是容易形成过多的连接操作.针对这些问题,提出了一种新的动态的xml索引体系difx,它扩展了已有的动态索引方法,采用一种动态的bisimilarity的概念,可以根据实际查询需求以及最优化的要求动态决定索引中保存的结构信息,以实现对各种形式的查询最有效的支持.实验结果证明difx是一种有效而且高效的xml索引方法,其可以获得比已有的xml索引方法更高的查询执行效率.。

代码中的最后一行通过读取service.conf配置文件开启CherryPy Web服务器,配置如下:第一部分指定使用的IP地址和端口,第二部分为存放图像的地址。

[global]
server.socket_host = "127.0.0.1"
server.socket_port = 8080
server.thread_pool = 50
tools.sessions.on = True
[/]
tools.staticdir.root = "F:\\ch07"
tools.staticdir.on = True
tools.staticdir.dir = ""
# -*- coding: utf-8 -*-
import cherrypy
import pickle
import urllib
import os
from numpy import *
#from PCV.tools.imtools import get_imlist
from PCV.imagesearch import imagesearch
import random
"""
This is the image search demo in Section 7.6.
"""
class SearchDemo:
    def __init__(self):
        # 载入图像列表
        self.path = 'first1000/'
        #self.path = 'D:/python_web/isoutu/first500/'
        self.imlist = [os.path.join(self.path,f) for f in os.listdir(self.path) if f.endswith('.jpg')]
        #self.imlist = get_imlist('./first500/')
        #self.imlist = get_imlist('E:/python/isoutu/first500/')
        self.nbr_images = len(self.imlist)
        print (self.imlist)
        print (self.nbr_images)
        self.ndx = list(range(self.nbr_images))
        print (self.ndx)
        # 载入词汇
        # f = open('first1000/vocabulary.pkl', 'rb')
        with open('first1000/vocabulary.pkl','rb') as f:
            self.voc = pickle.load(f)
        #f.close()
        # 显示搜索返回的图像数
        self.maxres = 10
        # header and footer html
        self.header = """
            <!doctype html>
            <head>
            <title>Image search</title>
            </head>
            <body>
            """
        self.footer = """
            </body>
            </html>
            """
    def index(self, query=None):
        self.src = imagesearch.Searcher('testImaAdd.db', self.voc)
        html = self.header
        html += """
            <br />
            Click an image to search. <a href='?query='> Random selection </a> of images.
            <br /><br />
            """
        if query:
            # query the database and get top images
            #查询数据库,并获取前面的图像
            res = self.src.query(query)[:self.maxres]
            for dist, ndx in res:
                imname = self.src.get_filename(ndx)
                html += "<a href='?query="+imname+"'>"
                
                html += "<img src='"+imname+"' alt='"+imname+"' width='100' height='100'/>"
                print (imname+"################")
                html += "</a>"
            # show random selection if no query
            # 如果没有查询图像则随机显示一些图像
        else:
            random.shuffle(self.ndx)
            for i in self.ndx[:self.maxres]:
                imname = self.imlist[i]
                html += "<a href='?query="+imname+"'>"
                
                html += "<img src='"+imname+"' alt='"+imname+"' width='100' height='100'/>"
                print (imname+"################")
                html += "</a>"
        html += self.footer
        return html
    index.exposed = True
#conf_path = os.path.dirname(os.path.abspath(__file__))
#conf_path = os.path.join(conf_path, "service.conf")
#cherrypy.config.update(conf_path)
#cherrypy.quickstart(SearchDemo())
cherrypy.quickstart(SearchDemo(), '/', config=os.path.join(os.path.dirname(__file__), 'service.conf'))

打印从索引中查找出的前十个图像,其中第一幅为查询图像本身,之后的图像,根据匹配效果由前往后排序

通过提取颜色、形状等图像自身特征从互联网上搜索相似图像,而不是仅仅依靠传统意义的文字搜索。 还可按照人脸类型搜索、过滤图像,从图像中分辨面部特征并搜索相似面孔,让图片管理便捷轻松。2、通告分数是关键,好好表现拿高分 通告的好坏结果由分数决定。

此时的搜索分数为3.6,接近4,说明这次的查询结果是比较不错的。

因为没有指定要查询的图像,所以随机从数据库中选择了十张图像显示

直方图匹配原理_直方图匹配步骤_直方图匹配

假设选择第一张图像,查询数据库并且获取靠前的图像,得到查询结果。并且在控制台输出,所选择那张图像在数据库中的id,和剩下所显示图像的id

若点击页面的Random selection链接,页面上的图像就会重新刷新,重新随机选择新的十张图像

打印从索引中查找出的前十个图像:

此时的搜索分数为1.9,与理想状态4相差的还是比较远的。由于测试的数据集只有50张图像,这个数据库容量是相对较少的,容易出现差错。而且很重要的一点是,集大建筑的特殊性,很多建筑都是对称的直方图匹配原理,且很多建筑都十分的相似,提取的特征类似,给后续的特征匹配等工作造成了很大困扰,因此导致了误差很大。

随机从数据库中选择了十张图像显示:

假设选择第一张图像,查询数据库并且获取靠前的图像,得到查询结果。并且在控制台输出,所选择那张图像在数据库中的id,和剩下所显示图像的id