计算机视觉 图像检索与识别

article/2025/7/16 4:49:25

目录

一.图像检索相关介绍:

1.起因:

2.参数介绍:

     图像纹理:    

词序无关的文本表述:

图像分类:

 图像特征词典:

图像整体描述子:

二. 图像分类/检索具体内容:

图像分类/检索:

单词的TF-IDF权重:

 倒排表(Inverted file):

图像检索流程:

图像检索结果:

三.代码实现:

1.数据集:

2.创建数据:

3.建立数据库:

4.检索:


一.图像检索相关介绍:

1.起因:

我们为什么要图像检索与识别?
在图像特征提取后进行比对 ,如果采用暴力匹配法:
        250,000 张图像 ~ 310 亿个图像对 :
        – 每个图相对 2 秒 匹配 500 台并行计算机需要 1 年才能完成计算 ;
        • 1,000,000 张图像~5000亿个图像对 :
        – 500 台并行计算机需要 15 年才能完成计算。
对于大场景数据集(如城市场景) , 只有少 0.1% 的图像对具有匹配关系, 我们的解决方案 利用图像整体特征实现匹配 / 检索, 而非局部特征点。

2.参数介绍:

对于图像检索 我们首先了解一下:

     图像纹理:    

        纹理是指图像中的重复模式,或纹理基元组成的结构

 

词序无关的文本表述:

根据文本中的词频分布,构造文本描述子;

        研表究明,汉字序顺并不定一影阅响读。比如当你看完这句话后,才发这现里的字全是都乱的。

图像分类:

对于图像我们可以将它分类成很多小组成;

 图像特征词典:

Bag of features ( BOF)一种适用于图像和视频检索的算法。BOF借鉴了文本分类的思路(也就是BOW),从图像抽象出很多具有代表性的「关键词」,形成一个字典,再统计每张图片中出现的「关键词」数量,得到图片的特征向量。

        基础流程:
        1. 特征提取;

        2. 学习 视觉词典(visual vocabulary” ;

        3. 针对输入特征集,根据视觉词典进行量化;

                        对于输入特征,量化的过程是将该特征映射到距离其最接近的 codevector ,并实现                 计数 ,码本 = 视觉词典 ,Codevector = 视觉单词 。

                聚类是实现 visual vocabulary /codebook的关
                        • 无监督学习策略
                        • k-means 算法获取的聚类中心作为 codevector
                        • Codebook 可以通过不同的训练集协同训练获得
                        • 一旦训练集准备足够充分, 训练出来的码本( codebook )将 具有普适性
                K-means 聚类算法:
最小化每个特征 x i 与其相对应的聚类中心 m k 之间的欧式距离;

                        算法流程: • 随机初始化 K 个聚类中心

                                        • 重复下述步骤直至算法收敛:
                                        • 对应每个特征,根据距离关系赋值给某个中心/类别
                                        • 对每个类别,根据其对应的特征集重新计算聚类中心

        4. 把输入图像转化成视觉单词(visual words的频率直方图;

最后生成的 图像特征词典(例):

        

         视觉词典存在的问题:

                •如何选择视觉词典/ 码本的规模 ?
                        太少:视觉单词无法覆盖所有可能出现的情况
                        太多: 计算量大,容易过拟合
                •如何提升计算效率?
                        Vocabulary trees (Nister & Stewenius, 2006)

图像整体描述子:

 

二. 图像分类/检索具体内容:

图像分类/检索:

给定图像的 bag-of-features 直方图特征,如何实现图像分类 / 检索?

 

给定输入图像的 BOW 直方图 , 在数据库中查找 k 个最近邻的图像
对于图像分类问题,可以根据这 k 个近邻图像的分类标签,投票获得分类结果
当训练数据足以表述所有图像的时候,检索 / 分类效果良好
        常用参数设置:
        视觉单词数量(K-means 算法获取的聚类中心)一般为 K=3000~10000. 即图像整体描述的直方图维度为 3000~10000.
        求解近邻的方法一般采用L2- 范数:即 Euclidean 距离 .
        目前普适的视觉单词采用 Lowe SIFT 特征描述子 . 特征 点检测采用 DOG (Difference of Gaussians).

单词的TF-IDF权重:

inverse document frequency (IDF) of word j =

 

 倒排表(Inverted file):

 

Can quickly use the inverted file to compute similarity between a new image and all the
images in the database
Only consider database images whose bins overlap the query image

图像检索流程:

1. 特征提取
2. 学习 视觉词典(visual vocabulary
3. 针对输入特征集,根据视觉词典进行量化
4. 把输入图像,根据 TF-IDF 转化成视觉单词(visual words )的频率直方图
5. 构造特征到图像的倒排表,通过倒排表快速索引相关图像
6. 根据索引结果进行直方图匹配

图像检索结果:

 

三.代码实现:

1.数据集:

 55张集美大学图片

 59张厦门图片

2.创建数据:

import pickle
from PCV.imagesearch import vocabulary
from PCV.tools.imtools import get_imlist
from PCV.localdescriptors import sift# 获取图像列表
imlist = get_imlist('D:\\pythonProject\\computer5\\picture\\sumpicture\\')
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('training')
voc.train(featlist, 114, 10)# 保存词汇
# saving vocabulary
with open('D:\\pythonProject\\computer5\\picture\\sumpicture\\vocabulary.pkl', 'wb') as f:pickle.dump(voc, f)
print('vocabulary is:', voc.name, voc.nbr_words)

 结果:

3.建立数据库:

import pickle
from PCV.imagesearch import imagesearch
from PCV.localdescriptors import sift
import sqlite3
from PCV.tools.imtools import get_imlist# 获取图像列表
# imlist = get_imlist('E:/Python37_course/test7/first1000/')
imlist = get_imlist('D:\\pythonProject\\computer5\\picture\\sumpicture\\')
nbr_images = len(imlist)
# 获取特征列表
featlist = [imlist[i][:-3] + 'sift' for i in range(nbr_images)]# load vocabulary
# 载入词汇
with open('D:\\pythonProject\\computer5\\picture\\sumpicture\\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
# 遍历所有的图像,并将它们的特征投影到词汇上(比如我的是180张图片)
for i in range(nbr_images)[:179]:locs, descr = sift.read_features_from_file(featlist[i])indx.add_to_index(imlist[i], descr)
# commit to database
# 提交到数据库
indx.db_commit()con = sqlite3.connect('testImaAdd.db')
print(con.execute('select count (filename) from imlist').fetchone())
print(con.execute('select * from imlist').fetchone())

结果:

 

4.检索:

建立好图像的索引,就可以在数据库中搜索相似的图像了。这里,使用BOW(词袋模型)来表示整个图像,这是通用的,可以应用于寻找相似的物体、相似的脸、相似的颜色等,它完全取决于图像及所用的描述子。

import pickle
from PCV.localdescriptors import sift
from PCV.imagesearch import imagesearch
from PCV.geometry import homography
from PCV.tools.imtools import get_imlist# load image list and vocabulary
# 载入图像列表
imlist = get_imlist('D:\\pythonProject\\computer5\\picture\\sumpicture\\')  # 存放数据集的路径
nbr_images = len(imlist)
# 载入特征列表
featlist = [imlist[i][:-3] + 'sift' for i in range(nbr_images)]# 载入词汇
with open('D:\\pythonProject\\computer5\\picture\\sumpicture\\vocabulary.pkl', 'rb') as f:  # 存放模型的路径voc = pickle.load(f)
src = imagesearch.Searcher('testImaAdd.db', voc)# index of query image and number of results to return
# 查询图像索引和查询返回的图像数
q_ind = 18
nbr_results = 5# regular query
# 常规查询(按欧式距离对结果排序)
res_reg = [w[1] for w in src.query(imlist[q_ind])[:nbr_results]]
print('top matches (regular):', res_reg)# load image features for query image
# 载入查询图像特征
q_locs, q_descr = sift.read_features_from_file(featlist[q_ind])
fp = homography.make_homog(q_locs[:, :2].T)# RANSAC model for homography fitting
# 用单应性进行拟合建立RANSAC模型
model = homography.RansacModel()
rank = {}# load image features for result
# 载入候选图像的特征
for ndx in res_reg[1:]:locs, descr = sift.read_features_from_file(featlist[ndx])  # because 'ndx' is a rowid of the DB that starts at 1# get matches# 获取匹配数 # get matches执行完后会出现两张图片matches = sift.match(q_descr, descr)ind = matches.nonzero()[0]ind2 = matches[ind]tp = homography.make_homog(locs[:, :2].T)# compute homography, count inliers. if not enough matches return empty list# 计算单应性,对内点技术。如果没有足够的匹配书则返回空列表try:H, inliers = homography.H_from_ransac(fp[:, ind], tp[:, ind2], model, match_theshold=4)except:inliers = []# store inlier countrank[ndx] = len(inliers)# 将字典排序,以首先获取最内层的内点数
sorted_rank = sorted(rank.items(), key=lambda t: t[1], reverse=True)
res_geom = [res_reg[0]] + [s[0] for s in sorted_rank]
print('top matches (homography):', res_geom)# 显示查询结果
imagesearch.plot_results(src, res_reg[:8])  # 常规查询
imagesearch.plot_results(src, res_geom[:8])  # 重排后的结果

结果:

 

 

 


http://chatgpt.dhexx.cn/article/lZm38uiY.shtml

相关文章

【计算机视觉学习05】图像检索与识别

文章目录 1. 原理解析1.1 什么是图像分类1.2 如何实现图像分类1.2.1 词袋模型(Bag-of-words)1.2.2 Bag-of-features模型1.2.3 Bag-of-features算法1.2.4 Bag-of-features过程 1.3 TF-IDF1.4 图像分类遇到的问题1.4.1 类内差异1.4.2 类间差异1.4.3 语义鸿…

OCR文字识别在计算机视觉的重要性、基本技术和最新进展

【摘要】 主要是文字检测和文字识别作为计算机视觉一部分的重要性,基本知识,面临的挑战,以及部分最新的成果。 人类认识了解世界的信息中91%来自视觉,同样计算机视觉成为机器认知世界的基础,也是人工智能研究的热点&a…

MATLAB计算机视觉与机器认知----Haar矩形遍历演示

clc; clear; close all;% Haar-like特征矩形计算board 24 % 检测窗口宽度 num 24 % 检测窗口分划数show 1; % 1为作图 time …

一文概括机器视觉常用算法以及常用开发库

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 本篇就软件部分,对机器视觉的算法处理进行大致概括分析。 一、算法(预处理算法、检测算法) 在采集完图像后,首先会对图像…

[5机器学习]python计算机视觉应用-图片内容识别

上一期中,ofter介绍了计算机视觉的常用神经网络模型,以及如何选择模型,今天我们就趁热打铁拿个实际的模型跑跑,欢迎大家跨入数据科学家们的世界。 一、机器学习的目标 作为数据科学家,我们必须明白投入大量时间精力进…

计算机视觉用于图像识别的难点在哪?

计算机视觉用于图像识别的难点在哪?作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取‘信息’的人工智能系统,但也存在一些难点,本篇来解答一下这个问题。 计算机视觉用于图像…

Java OCR tesseract 图像智能字符识别技术 Java代码实现

接着上一篇OCR所说的,上一篇给大家介绍了tesseract 在命令行的简单用法,当然了要继承到我们的程序中,还是需要代码实现的,下面给大家分享下java实现的例子。 拿代码扫描上面的图片,然后输出结果。主要思想就是利用Java…

六、计算机视觉相关内容

文章目录 前言一、图像增广1.1 常用的图像增广1.1.1 翻转和裁剪1.1.2 变换颜色1.1.3 结合多种图像增广方法 二、微调2.1 微调的步骤2.2 具体案例 三、 目标检测和边界框3.1 边界框 四、锚框五、多尺度目标检测六、目标检测数据集七、单发多框检测(SSD)八、区域卷积神经网络(R-C…

python计算机视觉学习第七章——图像搜索

目录 一、基于内容的图像检索 二、 视觉单词 三、 图像索引 3.1 建立数据库 3.2 添加图像 ​编辑四、在数据库中搜素图像 4.1 利用索引获取候选图像 4.2 用一幅图像进行查询 4.3 确定对比基准并绘制结果 五、 使用几何特性对结果排序 一、基于内容的图像检索 CBI…

使用计算机视觉和深度学习创建现代OCR管道

作者 | 学海无涯yc 编辑 | 3D视觉开发者社区 文章目录 前言1.研究和原型设计2.字深网3.字检测器4.组合式端到端系统5.生产化6.性能调优7.优雅 导读 此篇文章中讲述使用了计算机视觉和深度学习的进步,如双向长短期记忆(LSTM),连接…

Java OCR tesseract 图像智能字符识别技术

公司有需求啊,所以就得研究哈,最近公司需要读验证码,于是就研究起了图像识别,应该就是传说中的(OCR:光学字符识别OCR),下面把今天的收获整理一个给大家做个分享。 本人程序用的tess…

《深度学习中的字符识别在工业视觉中的实际应用》

最近在公司做了一个构建卷积神经网络来识别字符的项目,编程环境为pycharm2019,使用的是OpenCvPytorch进行项目的实现,因此想总结和归纳一下方法。 本次的字符识别项目可以分为以下几个步骤: 一、图像处理和字符分割 二、创建自…

python计算机视觉-图像检索和识别

目录 一、原理解析 1.1计算机视觉领域的图像分类是什么意思? 1.2图像分类要如何实现? 1.3Bag-of-features算法和过程? 1)提取图像特征 2)训练字典( visual vocabulary ) 3)图片直方图表示 4)训练分类器 1.4TF-IDF? 1.5当前图像分类中会遇到…

使用计算机视觉和深度学习创建现代 OCR 管道

文章目录 研究和原型设计字深网字检测器组合式端到端系统生产化性能调优优雅 在这篇文章中,我们将带您了解我们如何为[【移动文档扫描仪】构建最先进的光学字符识别(OCR)管道的幕后故事。我们使用了计算机视觉和深度学习的进步,如…

最流行的4个机器学习数据集

最流行的4个机器学习数据集 机器学习算法需要作用于数据,而数据的本质则决定了应用的机器学习算法是否合适,而数据的质量也会决定算法表现的好坏程度。所以会研究数据,会分析数据很重要。本文作为学习研究数据系列博文的开篇,列举…

机器学习——数据集预处理(数据查看和空值处理)

目录 前言 数据集查看 前言 目的:本数据集是为了分析炉丝功率和炉膛温度以及样品盒内部温度之间的关系,分析温场的分布等。 来源:本数据集的来源是实验获得的数据。 特点:特征维度高,数据量大。 数据集查看 1.查…

推荐收藏:50个最佳机器学习公共数据集

外国自媒体mlmemoirs根据github、福布斯、CMU官网等信息,整理了一张50个最佳机器学习公共数据集的榜单,为大家分享一下~ 作者:mlmemoirs 郭一璞 编译 外国自媒体mlmemoirs根据github、福布斯、CMU官网等信息,整理了一张50个最佳…

8种适用于不同机器学习问题的常用数据集

要找到一定特定的数据集可以解决各种机器学习问题,是一件很难的事情。越来越多企业或研究机构将自己的数据集公开,已经成为全球的趋势,这也将有助于大家进行更多研究。 近期,亚马逊高级技术顾问 Will Badr 分享了 8 种适用于不同…

【ML】机器学习数据集:sklearn中回归数据集介绍

目录 1. Boston房价预测数据集2. California房价预测数据集3. 糖尿病预测数据集 在机器学习的教程中,我们会看到很多的demo,这些demo都是基于python中自带的数据集。今天我们将介绍三个用于回归预测的数据集。 1. Boston房价预测数据集 该数据集将在sci…

浅谈机器学习之数据集构建

浅谈机器学习之数据集构建 ​ 正如大家现在知道的,深度学习模型(DL)和机器学习模型(ML)是数据驱动型任务,在近乎完美的数据集面前,模型间的细微差异可以忽略。但要获得覆盖目标场景所有特征的样本,不仅要耗费巨大的人力物力&…