基于MATLAB颜色直方图的图像检索

article/2025/9/28 12:23:43

基于颜色直方图的图像检索

概述

在过去的十几年间,有许多知名机构都对图像检索系统进行了深入的研究,病开发出了相应的检索系统,例如IBM Almaden研究中心研制的QBIC系统,Virage公司研发的VIRAGE系统,麻省理工大学多媒体实验室研发的Photobook系统,哥伦比亚大学研发的VisualSeek系统,斯坦福大学研发的WBIIS系统,U.C.伯克利分校研发的Blobworld系统等等。

这些检索系统的基本特征都是基于图像像素值的特征提取相应的规则图像,例如形状、颜色、纹理等,并以此为依据对图像进行比较检索,在这篇论文中,系统采用了基于颜色特征提取的检索。基于直方图在两个颜色空间对图像特征进行判定检索。这两个颜色空间是RGB和HSV。通过对两副图像对应的RGB和HSV值计算其距离,依据距离的远近来判断相似性,这种方法简单易行,由于丢弃了图像的形状、颜色、纹理等信息,判定的计算量相对较小。当然这也导致了两副图像之间的判定没有实际的语义上的关联,也就是说,距离相近的图像并不一定有事实上的相应联系。但是,经过试验的判定,这种基于直方图的图像检索系统能够为图片检索提供相对精确的检索结果。


相关知识

RGB颜色空间

RGB颜色模型中每种颜色都是由红绿蓝三种颜色组成。这种颜色模型在许多CRT显示器和彩色光栅图形设备中被广泛使用。这三种颜色被认为是其他颜色的添加剂,对于所需要的颜色通过对这三种颜色进行不同的比例进行相加即可得到。RGB模型可以用如下的颜色坐标系表示。注意从(0,0,0)到(1,1,1)的对角线,白色代表了灰阶,RGB色彩模式俯视从白色开始的。


v2-5a9094d5e4f10258056d2c5bf5030ef3_b.jpg



HSV颜色空间(也称HIS颜色空间)

HSV字母分别代表了色度(Hue),饱和度(Saturation),色调。上面的锥形图说明HSV的颜色模型。Value代表了颜色的强度,他是从图像信息中分离出来,可以表示相关信息的部分。色度和饱和度代表了颜色在人眼中的生理特征。色度与红色等颜色从0到1的表示不同,色度是从红色通过黄,绿,青,蓝,洋红色,再回到红色。饱和度的区分是从0 到 1,他通过值大小来影响颜色的饱和度。对于色调,也是从0到1,随着他的增大,图像的颜色就会越来越亮。


v2-6d7917335b62156a3e06156adf013302_b.jpg


颜色模型之间的转换

为了针对特定的应用更好的使用颜色,颜色空间的颜色转换是非常必要的。一个好的颜色空间必须能够很好的表示两种颜色之间的颜色差别。也就是说,数值表示的颜色可以近似的表示人类可以感觉的颜色的差别。


v2-2c9404853c34e76c9b369672bd70cd1b_b.jpg



v2-c07775d20a8d94d4492164395396a207_b.jpg



v2-82d3287e42badf9f74b7c2ca65d18211_b.jpg




距离


v2-4bcd7146393cd7265f8b42d3eaa4613b_b.jpg



v2-b35c3c1a5dd5d5e42a382a1c1e9f6018_b.jpg



v2-8be0be855a3217fd10fdf3084c9ce1c9_b.jpg


算法原理

一个图像的颜色直方图是通过统计图像各个颜色的像素个数构成的。其处理过程:1、选择颜色空间;2、对颜色空间进行量化;3、统计直方图;4、推到直方图的距离函数;5、通过索引指出最相近的图像。算法中的每一步对于结果的可能都是至关重要的。

通过直方图检索也存在几个问题。首先,颜色直方图有很高的维度,即便是经过极度的量化处理,图像的直方图特征空间也将占据超过100的特征值。这种高维度就要求在处理过程中要减少统计特征,提前进行过滤以及对图像的分层级进行索引。同时,这些大数据量也增加了计算距离函数的计算量和计算复杂度。对于穿越距离的情况,这样的问题会更加的复杂。

算法实现

产生图像数据库

RGB颜色直方图被生成为512列 (r : 0~7, g: 0~7, b: 0~7 )(8 × 8 × 8)

function makeRGBHistogramData()

cd '.\img'


str_head='RGB_zft_';

str_tail='.txt';

for file_num=0:499;

filename=sprintf('%s%d%s',str_head,file_num,str_tail)

imname=sprintf('%d.jpg',file_num)

h = imread(imname,'jpg');


%红色

Red = h(:,:,1)'/(256/7);

%绿色

Green = h(:,:,2)'/(256/7);

%蓝色

Blue = h(:,:,3)'/(256/7);

zft=zeros(8,8,8);

[r,c] = size(Red);

for i=1:r;

for j= 1:c;

zft(round(Red(i,j))+1,round(Green(i,j))+1,round(Blue(i,j))+1)= zft(round(Red(i,j))+1,round(Green(i,j))+1,round(Blue(i,j))+1) + 1;

end;

end;


f_id=fopen(filename,'w');

fprintf(f_id,'%d\n',zft);

fclose(f_id);

end;

cd '..'

return;

end



HSV颜色空间被生成为162列 (h: 0~17, s: 0~2,v: 0~2)(18 × 3 × 3)

function makeHSVHistogramData()

cd '.\img'


str_head='HSV_zft_';

str_tail='.txt';

for file_num=0:499;

filename=sprintf('%s%d%s',str_head,file_num,str_tail)

imname=sprintf('%d.jpg',file_num)

h = imread(imname,'jpg');

HSV = rgb2hsv(h);

Hue = HSV(:,:,1)'/(1/17);

Saturation = HSV(:,:,2)'/(1/2);

Value = HSV(:,:,3)'/(1/2);

zft=zeros(18,3,3);

[r,c] = size(Hue);

for i=1:r;

for j= 1:c;

zft(round(Hue(i,j))+1,round(Saturation(i,j))+1,round(Value(i,j))+1)= zft(round(Hue(i,j))+1,round(Saturation(i,j))+1,round(Value(i,j))+1) + 1;

end;

end;


f_id=fopen(filename,'w');

fprintf(f_id,'%d\n',zft);

fclose(f_id);

end;

cd '..'

return;

end


计算距离

function jl=calc_RGB_euclidean_distance(id0,id1)

cd '.\img'

filename0 = sprintf('RGB_zft_%d.txt',id0);

filename1 = sprintf('RGB_zft_%d.txt',id1);

f_id0=fopen(filename0,'r');


zft0=zeros(8,8,8);

zft0 = fscanf(f_id0,'%d\n');

fclose(f_id0);


f_id1=fopen(filename1,'r');

zft1=zeros(8,8,8);

zft1 = fscanf(f_id1,'%d\n');

fclose(f_id1);

jl=0;

for i=1:512;

jl = jl + (zft0(i) - zft1(i))*(zft0(i) - zft1(i));

end;


cd '..'

return;

end

function jl=calc_HSV_euclidean_distance(id0,id1)

cd '.\img'

filename0 = sprintf('HSV_zft_%d.txt',id0);

filename1 = sprintf('HSV_zft_%d.txt',id1);

f_id0=fopen(filename0,'r');


zft0=zeros(18,3,3);

zft0 = fscanf(f_id0,'%d\n');

fclose(f_id0);


f_id1=fopen(filename1,'r');

zft1=zeros(18,3,3);

zft1 = fscanf(f_id1,'%d\n');

fclose(f_id1);

jl=0;

for i=1:162;

jl = jl + (zft0(i) - zft1(i))*(zft0(i) - zft1(i));

end;


cd '..'

return;

end

程序界面


v2-14d4c6c953df10def77625e1d861748d_b.jpg


测试结果


v2-8a62a9a3f5dd9751b239b144b8737b36_b.jpg



v2-ee9f37c485c99b5b7f884dfd3a83c287_b.jpg



v2-83eb04fa2214cba14321ccdd7bb3b31f_b.jpg



v2-6739b35c3dfa0050c2aa7d3f94fd86d3_b.jpg



v2-b6beec9e2c3263ed8bb28c02b579b061_b.jpg


结论

论文结论

基于直方图的图像检索在RGB颜色空间具有比HSV颜色空间更好的检索效果

从计算时间的观点上来说,使用HSV颜色空间使用几何或二次方法比使用RGB颜色空间需要更小的时间开销

在同时考虑计算时间和检索效率的情况下,在HSV颜色空间下的直方图交叉检索是六种方法中最可取的方法。

二次距离在计算负担下是不具有效率的。

我的结论

基于直方图的图像检索在RGB颜色空间具有比HSV颜色空间更好的检索效果

使用HSV颜色空间需要更小的时间开销

交叉检索没有效率

在考虑时间效率的情况下可以考虑在HSV空间下使用直方图检索

讨论

我们来分析上面结论产生偏差的原因,首先我们来看两个距离公式以及两张最容易检索出来的图片。


v2-5fcf75a8ce18abee59b789dad2f01b9d_b.jpg



v2-181fb2435341a55b1f0ed807297d7fdd_b.jpg


在这里我们分析图片的统计数据,从中发现规律,通过将数据从直方图中我们可以看出,对于最容易选出的295图片,其HSV值偏小,易于在距离计算中被选出。


v2-df80b62a6fa9133703eae7ee3365ff27_b.jpg



v2-b843817bc4e2e99424236a678f005aef_b.jpg


最终结论

对于图片295 ,在HSV空间小的数比例偏小,导致用min选择时容易选到该张图片。


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

相关文章

pyimagesearch-4 聪明的女孩:计算机视觉和图像搜索引擎使用颜色直方图的指南

原文链接 It’s…it’s a histogram. – Dr. Grant 好吧,也许这不是确切的引用。但是,如果格兰特博士知道颜色直方图的力量,我认为他会同样激动。 更重要的是,当电力耗尽时,直方图不会让游客吃东西。 那么&#xff…

OpenCV 学习笔记(颜色直方图计算 calcHist)

OpenCV 学习笔记(颜色直方图计算 calcHist) 最近在看一本OpenCV 的书,书名是 《OpenCV 3 Computer Vision Application Programming Cookbook (third edition)》,里面给了很多很实用的代码片段。最近这几篇…

Opencv绘制HSV颜色直方图

一. 使用Opencv绘制HSV颜色直方图 所用的函数 cvCvtColor 可在: 使用Opencv将RGB颜色空间转换到HSV颜色空间/灰度图 文章中查找相关介绍 所使用的结构体: CvHistogram 以及函数: cvCalcHist CvCreateHist cvGetMinMaxHistValue cv…

基于颜色直方图优化的图像增强方法

最近改图像颜色迁移的论文,审稿人要求补充基于直方图优化的方法细节。趁此机会,我重新下载了相关文献,决定重新学习下该类方法,并把一些细节记录在本篇博客中,供交流学习。 目录 1. 前言 2. 背景知识 3. 颜色变换 4. 颜…

[OpenCV实战]52 在OpenCV中使用颜色直方图

颜色直方图是一种常见的图像特征,顾名思义颜色直方图就是用来反映图像颜色组成分布的直方图。颜色直方图的横轴表示像素值或像素值范围,纵轴表示该像素值范围内像素点的个数或出现频率。颜色直方图属于计算机视觉中的基础概念,其常常被应用于…

关于颜色直方图

一、颜色距 转自:https://blog.csdn.net/jaych/article/details/51137341 1、颜色距离 颜色距离指的是两个颜色之间的差距,通常距离越大,两个颜色相差越大,反之,两个颜色越相近。在计算颜色距离时,有类似…

图像特征分析---颜色特征描述---颜色距和颜色直方图

一、颜色距 转自:https://blog.csdn.net/jaych/article/details/51137341 1、颜色距离颜色距离指的是两个颜色之间的差距,通常距离越大,两个颜色相差越大,反之,两个颜色越相近。在计算颜色距离时,有类似计算…

颜色特征提取(一)——颜色直方图(opencv实现)

直方图——再讲颜色直方图之前,先简单介绍一下直方图。 直方图作为一种简单有效的基于统计特性的特征描述子,在计算机视觉领域广泛使用。它的优点主要体现在两个方面:一是对于任意一个图像区域,直方图特征的提取简单方便;其二,直…

一般颜色直方图

颜色直方图是一种用于图像处理和分析的图表,它可以显示图像中不同颜色的数量。通常,颜色直方图会将颜色分成几个色调区间,每个区间对应一个条形图,其中条形图的高度表示该色调区间中的像素数量。通过颜色直方图,你可以…

网络爬虫Jsoup

简介 网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、…

【Java】Jsoup爬虫快速入门案例

1、前言 该技术博客是根据B站狂神说Java教程的笔记总结,希望能为大家带来帮助! 2、Jsoup实战案例 爬虫可以理解为爬取数据,所谓爬取数据就是: 获取请求返回的页面信息,筛选出我们想要的数据 如果想要爬取数据&#…

android爬虫框架jsoup,Android笔记之JSoup爬虫入门

前言 闲扯一些没用的,写这篇文章之前是有点私心的,因为之前评论某简书大v的文章是鸡汤,瞬间被拉黑,连个解释和说明的机会都没有,文章语言干涩,内容平平,于是就好奇到底是些什么样的人喜欢和吹捧…

Java的Jsoup爬虫

Java的Jsoup爬虫,爬携程酒店评分,保存数据库中 前言一、Jsoup爬虫pom二、逻辑代码部分1.首先我们要先确定爬取的东西,这边我就以携程的酒店评分为例子。2.Jsoup进行解析具体要求爬的内容3.接下来我们就是将爬取的数据存入数据库中 总结 前言 …

使用Jsoup爬虫爬取相关图片

一、Jsoup概述 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 主要功能: 1. 从一个URL,文件或字符串…

jsoup爬虫实战详解之新浪

** jsoup爬虫实战详解之新浪 ** 今天分享一个之前困扰了一段时间的关于jsoup爬取新浪网页信息的踩坑总结。 在实现以上功能的之前我门首先要了解两个重点:1.关于jsoup的爬取细节以及教程,爬取时所要了解jsoup的相关标签:具体的自己大家感兴…

Java JSOUP爬虫学习分享

昨天从狂神大佬那学习了如何用jsoup爬去网站数据,现在整理了一下给大家分享一下。 先创建一个名叫JsoupPojo的实体类用来装入数据。 Data public class JsoupPojo {private String src;private String name; } 下面是将用来爬取的方法封装成了一个工具类 Compon…

java jsoup爬虫

前言:在日常开发中,我们必定是与我们的数据源打交道,我们的数据源无非就那么几个 1.数据库2.爬虫数据 3.第三方系统交互,这里介绍java 中网页版的爬虫jsoup的使用 1.首先导入我们的jar包 maven坐标如下 org.jsoup jsoup 1.13.1 c…

Jsoup爬虫并解析网页

Jsoup爬虫并解析网页 京东搜索 java,爬取有关java的商品信息 1、获取请求 String url"https://search.jd.com/Search?keywordjava";2、解析网页。(Jsoup返回的Document对象就是浏览器的Document对象) 所有js中操作Document对象的…

Jsoup爬虫入门实战

一、Jsoup介绍 jsoup 是一款基于 Java 的HTML解析器,它提供了一套非常省力的API,不但能直接解析某个URL地址、HTML文本内容,而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据,所以 jsoup 也可以被当做爬虫工具使用。 相关…

Jsoup爬虫实例

一、简介 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。(来源百度) 二、准备 首先你需要找到一个你…