原型基于颜色的图像检索与MATLAB
原型基于颜色的图像检索与MATLAB
摘要
基于内容的检索数据库(图像)已经变得越来越受欢迎。为了达到这一目的,需要发展算法检测/模拟工具,但市场上没有合适的商业工具。
本文介绍了一个模拟环境,能够从数据库中检索图像直方图的相似之处。该环境允许使用不同的色彩空间及柱,通过MATLAB实现算法。每一种颜色体系都有自己的m-files文件。
这个阶段的软件建设过程是从系统出发设计的pre-sented图形用户界面(GUI),对GUI作了简短的功能描述。
1.介绍
现阶段图像数据库有成千上万的数字图像,如果用户想要找一个适合他/她目的的图象,他/她必须寻遍整个数据库直到检索出正确的图片,或使用相关资料或者一些智能软件。为了最终用户,视频点播服务也需要一个智能搜索系统。视频点播系统的检索方式与图像数据库检索方式略有不同。
如果图像采用一个有效的方法排列,一些相关资料是一个不错的选择,例如:1)范畴:动物、旗帜等等;2)名字(需要一个好的命名法);3)日期:一位有经验的用户可以如同文本检索(关键词必须插入一个数据库)一样,有效地运用这些系统。还有使用多语言系统的情况。一种基于图象特性的工具可以是语言独立的,一种独立语言系统可以利用最佳属性进行搜索,这些属性可以有颜色、形态、质感、空间定位的形状等。
在MuVi-project中,这种工具正在建设中,它涵盖了以上各种性质。对基于内容的图像检索的研究工作,已经在文献[2 - 6]中完成了。该系统,文中已经提到过,是一种模拟环境,在它上面,基于颜色内容检索的MuVi已经开发并测试了。
2. 系统开发
MATLAB是一种有效的矢量和矩阵的数据处理程序。它包含了完整的矩阵运算函数和图像可视化功能且允许程序有模块化结构。因为以上这些因素,MATLAB被选为原型软件。
2.1系统设计
要在撰写m-files之前,完成这个系统设计。HSV(色调、饱和度、亮度)系统设计,颜色系统检索过程如图1。类似的设计已为所有颜色系统使用。
图1:HSV颜色空间及27个柱的流程图。
Tesths27是这个颜色系统及这些柱的最主要功能。它可以根据需要调用其他功能(hs27read,dif_hsv和image_pos)。每个颜色系统都有自己的主要功能和可变数目(2-3)的子功能。如果需要颜色空间转换,在功能表的第一个分支上有两个或者三个此功能。
主函数的调用功能:
matches=tesths27(imagen,directory,num)
imagen指定变量名称及查询图像的路径。
Directory是图像数据库的路径,num是图像检索的预期数字。
2.2功能
到目前为止已实现了四个色彩空间:HSV、L*a*b*、RGB和 XYZ。每一种颜色空间已从2到4实现了不同数量的柱。共计14个主要功能。
对于某些颜色系统使得这些动态功能成为可能,即动态直方图计算。每个颜色系统/柱组需要依靠自身直方图,这些可以仅用一个详尽的方法(像素x像素)实现。直方图计算每张图片要花费½- 5分钟,每张大约320×240个像素,根据每150MHz 奔腾上,颜色空间的复杂性。因此让每个用户自由选择每个柱的编号是不切实际的,特别是在大型数据库。
这些函数之所以如此命名,是因为这些名称当中包含了色彩空间的选择,函数功能柱的数目。一些函数,比如image_pos已经应用于许多或许所有的主函数当中,并且这些函数并未按照上述方法命名。
主函数的功能测试,如果这个函数调用是正确的。如果这个查询图像的名字不包含路径,该函数就会默认图像位于数据库目录下。除此之外,最主要的功能测试,查询图像的直方图是否已经位于当前数据库中。如果被查询的直方图不在数据库中,则调用图像读取(例如hs27read)函数。该函数还可以使像素值规格化,以及将图像矩阵数据矢量化。该阶段之后,将调用一个颜色空间转换函数(如有需要)。最后调用一个量化函数根据正确数目的柱建立直方图。
该直方图将被保存到数据库目录下。如果直方图已经存在,之前的三步骤将不会被执行。现在对这个查询图像的已经完成分析。然后主函数将依照查询图像,采用相似性算法,将图像数据库目录下的所有图像检索一遍,不同的是,现在将会在当前的检索图像直方图与查询图像直方图之间有一个的差异计算。最后image_pos函数将查询图像以及检索出来的要求数目的相似图像显示出来。
2.3链接
在主函数和子函数未链接之前要运行一个程序是不可能的。主函数将通过命令行或通过图形用户界面调运,本文将后面陈述。这两种函数调用的原理相同。对于多级搜索功能分开的主要函数已经实现,但它可以利用普通程序并添加一个参数,其中最匹配的数组可以转为第二阶段的比较函数。
主要的函数通过图像名称调用图像阅读取函数,直方图将返回到主函数。如果需要彩色空间转换,转换函数被读取函数通过R、G、B向量调用。直方图将返回到调用函数。最后,将通过转换后的颜色向量,调用直方图建立函数。该函数返回一个量化的直方图,它将遍历调用所有函数,直到实现主函数。
主要函数根据两个直方图向量,调用直方图差函数,并响应一个得到的差值。差值函数使用欧氏距离计算,但它可以依据程序的模块性很容易地更改为另一种算法。如果差值小于最佳匹配表中的最大差值,该结果将覆盖最佳匹配表中的最后一条纪录。最后,再将该表按照差值大小升序排列。当所有的图像分析完成后,最佳匹配的排序表,在所需的输出图像的数量,查询图像的名称,检索图像的路径和数据库路径均传递给image_pos函数。这些值可以传递到更大的组件(向量/容器)。现在,可以通过输入几个参数而快速实现,不需要从容器中查找变量。
2.4图形用户界面
图形用户界面(GUI)是一个软件开发的重要组成部分。该图形用户界面设计要解决以下问题:学习时间,速度的性能,用户的错误率,随着时间的推移保留和主观满意度。该软件目前仅预期用于测试目的,该软件最重要的性能是可以快速看到不同的测试查询的结果,且结果可以安全地保存在磁盘上。因此,可视化设计倒不如商业软件产品来得重要。
在图2中呈现的屏幕是基于GUI的,按钮、菜单和其他组件的功能将稍后介绍。如果这个软件要开发成商业产品,菜单栏将被禁用,并将在画布上添加退出和帮助按钮。
图2:选择查询图像之前的GUI。
图3查询界面在开始查询之前弹出。该用户选择一个查询图像,这样他/她可以断定,查询到正确的图像。
图3:进行查询之前的GUI。
数据的结果将以图像6中的界面显示出来。
3. 软件的使用
第一个界面已经出现在图2当中。用户可以从弹出式菜单中选择(见下图),如果该系统是单色或多级检索系统。在一个一级检索系统中一个粗量化或更精确的直方图从一次循环(一种颜色系统)中得到。
图4:系统颜色选择从弹出式菜单当中。
菜单中的第二项被禁用,因为选择了单级检索。
在一个多级检索当中,使用两种不同颜色系统/颜色直方图。在第一循环中,得到粗量化直方图,在第二重循环中,为了最佳匹配利用第一次循环从而得到更准确直方图。颜色系统的第二个循环可以与第一个循环相同或不同。对于一级检索,二级颜色系统的选择被禁用。用户可以选择图像检索在最后阶段的数目。该软件可以链接到许多图像数据库,用户可以选择设定数据库用来查询。
用户选择一个查询图像,可以从查询设定的同一(默认)数据库当中或从他/她的PC下的任意目录中,该选择将以图5中的文件-打开对话框出现,该列表可以通过“重置”按钮被清除,通过“检索”按钮可以执行检索。最后,搜索结果将以一个独立的窗口显示在屏幕上的,如图6。早些时候,该软件将每一张图都以一个独立窗口打开,计算和保存结果都比改进之后更困难。在顶部左上角是原来的查询的图像,在该图像的下面是从左到右、从上到下,按照相似度降序排列的最佳匹配图像。用户可以进一步使用“复制选择”或 “打印选择”按钮选择合适的图像。 “新检索”按钮将关闭此列表,并又回到了原来的搜索列表。 “相似检索”按钮执行一个新的检索在查询直方图是由所有选定图像的直方图组成时。如果用户选择了更大的数目超过了21,作为“匹配图像组”,最佳匹配将在多级界面上显示。用户可以通过“上一页”和“下页” 按钮浏览页面。
图5:选择查询图片对话框。对话框的语言决于操作系统使用的语言。
图6:查询结果以列表方式。
4. 摘要
基于颜色内容的检索需要能提供直观正确结果的算法,在模拟前不能选择正确运算的算法。本文介绍的软件以测试为目的的。一些功能还能够扩展,假如该软件想要开发成商业产品,一些修改正在逐步实施过程。该软件已被用来作为直方图量化测试的测试平台。该软件的模块化使得在新算法能够在很短的时间内成为软件的一部分。MATLAB的使得快速原型的建造成为可能,使得直接在磁盘上快速保存数据(检索结果),实现了软件的要求。在结果可视化分析完成之后,最佳算法将成为这个最终软件的一部分。
参考资料
[1]Alaya Cheikh F et. al. MUVIS:一种基于内容的检索和大型图像数据库检索系统.SPIE图像和视频的存储检索,圣何塞,1999年,第一卷, 3656:98 - 106.
[2]Sawhney H. S., Hafner J. L.高效二次型距离函数颜色直方图检索,IEEE上的模式分析与机器智能,1995年,第17卷,7:729 – 736
[3]Vellaikal A. et. al.基于颜色内容的检索和多光谱图像使用联合Spatial-Spectral索引。SPIE 2606:232 - 243。
[4]Ng V. et. al.自动直方图索引,SPIE 2606:202 - 211。
[5]Smith J. R., Chang S. F. 基于颜色纹理的自动图像检索,1995-6,
[6]Flickner M. et. Al.基于图像和视频内容的检索:QBIC系统,IEEE计算机1995年第28卷. 9:23 - 32。
[7]Jain A. K. 数字图像处理基础,Prentice Hall出版社,1989:66 - 71。
[8Kerminen P, Gabbouj M. 基于颜色匹配的图像检索。FINSIG99年学报,Oulun yliopistopai,1999:89 - 93。
[9]Shneiderman B.设计的用户界面,Addison Wesley Longman,1998:14 - 16。
petteri.kerminen@pori.tut.fi
相关文章:

原型基于颜色的图像检索与MATLAB
原型基于颜色的图像检索与MATLAB 摘要 基于内容的检索数据库(图像)已经变得越来越受欢迎。为了达到这一目的,需要发展算法检测/模拟工具,但市场上没有合适的商业工具。 本文介绍了一个模拟环境,能够从数据库中检索图像直方图的相似之处。该…...

【C++笔试强训】如何成为算法糕手Day9
学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 添加逗号 思路: 代码实现: 跳台阶 思路: 代码实现: 扑克牌顺子 思路…...

初识算法 · 二分查找(1)
目录 前言: 二分查找 题目解析 算法原理 算法编写 搜索插入位置 题目解析 算法原理 算法编写 前言: 本文呢,我们从滑动窗口窗口算法移步到了二分查找算法,我们简单了解一下二分查找算法,二分查找算法是一个十…...
数据结构:数字统计
请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。 比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围…...

网页前端开发之HTML入门
HTML入门 HTML全称HyperText Markup Language,中文译为:超文本标记语言。 它有一个同胞兄弟叫:XML,全称Extensible Markup Language,中文译为:可扩展标记语言。 简单来讲,它们都是标记语言。 …...

Python do while 实现案例
在 Python 中没有传统的 do while 循环语法。 但是可以通过使用 while True 结合条件判断来实现类似 do while 的效果。 一、语法 while True:# 执行某些操作#...if not condition:break 这里先无条件地执行一次循环体中的代码,然后在每次循环结束时检查条件&#…...
docker网络管理详解 一
一 生产故障:docker 同一宿主机不能通信 1. 检查容器网络配置 1.1 查看容器的网络信息 使用 docker inspect 命令查看容器的网络配置,确保它们连接到了正确的网络。 docker inspect -f {{json .NetworkSettings.Networks }} container1 docker inspe…...

前端使用Canvas实现网页电子签名(撤销、下载)
前言:一般在一些后台的流程资料以及审核的场景中会需要电子签名,介绍一种用canvas实现的电子签名,此案例用的是原生js 效果展示: 一、html和css: <div class"divCla2"><canvas id"myCanvas&q…...

Lepus安装与配置管理(Lepus Installation and Configuration Management)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...
Tomcat中存放图片文件丢失问题
1、tomcat中存放的图片丢失原因: tomcat 在处理 WAR 包时,会在部署时解压 WAR 包并创建文件夹。如果在 tomcat 运行时删除了 WAR 包,tomcat会检测到这种变化,然后可能会自动清理已解压的文件夹。这是tomcat默认的行为,…...
Webpack一键打包多个环境
1. 安装打包插件 安装如下插件,以便可以在打包命令中设置环境变量区分不同的环境。 npm install --save-dev cross-env 2. 配置打包命令 在package.json中配置正式环境和测试环境打包命令,同时添加一个命令同打包两个环境。 // package.json "…...
Neo4j 构建文本类型的知识图谱
Neo4j 是一个强大的图数据库,用于构建和查询各种类型的图数据结构。构建知识图谱是一项常见任务,尤其在处理自然语言处理 (NLP) 和文本信息时。基于 Neo4j,可以将文本数据转换为知识图谱,使得复杂的文本关系以图结构存储ÿ…...

【SSM详细教程】-03-Spring参数注入
精品专题: 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课…...
深度学习 %matplotlib inline
%matplotlib inline 是在 Jupyter Notebook 中使用的一个魔法命令,主要用于配置 Matplotlib 图形的显示方式。具体来说,这个命令的作用是将 Matplotlib 生成的图形直接嵌入到 notebook 中,而不是在弹出的窗口中显示。 使用方法 在 Jupyter …...

RT-Thread线程的定义和属性
目录 概述 1 RT-Thread线程定义 1.1 优先级设定方法 1.2 内存管理 1.2.1 RT-Thread的线程类别 1.2.2 RT-Thread的线程调度 2 线程重要属性 2.1 线程栈 2.2 线程状态 2.3 线程优先级 2.4 时间片 概述 本文主要介绍RT-Thread线程的定义和属性,其包括线程的…...

【大模型问答测试】大模型问答测试脚本实现(第二版)——接入pytest与代码解耦
背景 接上一篇,【大模型问答测试】大模型问答测试脚本实现(第一版)。 在实现自动化的时候,原先把很多方法与request请求写在一块了,趁着目前实现接口数量较少,决定对代码进行解耦,并且清晰目录…...

Windows模拟电脑假死之键盘鼠标无响应
Windows模拟电脑假死之键盘鼠标无响应 1. 场景需求 模拟Windows电脑假死,失去键盘鼠标响应。 2. 解决方案 采用Windows系统提供的钩子(Hook) API 拦截系统鼠标键盘消息。 3. 示例程序 【1】. 创建MFC对话框项目 新建一个MFC应用程序项目,项目名称…...
一文详解线程池
什么是线程池? 线程池:就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。 为什么用线程池? 线程池的优势:线程池做的工作…...

网际报文协议ICMP及ICMP重定向实例详解2
之前在一个项目中遇到了与ICMP重定向相关的问题,因为缺乏对ICMP相关内容的了解,排查了很长一段时间才查出来。本文给大家简要地介绍一下ICMP及ICMP重定向相关的内容。 1、ICMP的概念 ICMP(Internet Control Message Protocol)网际…...
CSS 总结
CSS 总结 引言 CSS(层叠样式表)是网页设计中不可或缺的一部分,它用于控制网页的布局和样式。本文将对CSS的基本概念、关键特性、常用属性以及最佳实践进行总结,旨在帮助读者深入理解并有效运用CSS。 CSS基本概念 1. 什么是CSS? CSS是一种样式表语言,用于描述HTML或X…...

大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...