基于颜色直方图的图像检索
- 概述
在过去的十几年间,有许多知名机构都对图像检索系统进行了深入的研究,病开发出了相应的检索系统,例如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色彩模式俯视从白色开始的。
-
- HSV颜色空间(也称HIS颜色空间)
HSV字母分别代表了色度(Hue),饱和度(Saturation),色调。上面的锥形图说明HSV的颜色模型。Value代表了颜色的强度,他是从图像信息中分离出来,可以表示相关信息的部分。色度和饱和度代表了颜色在人眼中的生理特征。色度与红色等颜色从0到1的表示不同,色度是从红色通过黄,绿,青,蓝,洋红色,再回到红色。饱和度的区分是从0 到 1,他通过值大小来影响颜色的饱和度。对于色调,也是从0到1,随着他的增大,图像的颜色就会越来越亮。
-
- 颜色模型之间的转换
为了针对特定的应用更好的使用颜色,颜色空间的颜色转换是非常必要的。一个好的颜色空间必须能够很好的表示两种颜色之间的颜色差别。也就是说,数值表示的颜色可以近似的表示人类可以感觉的颜色的差别。
-
- 距离
- 算法原理
一个图像的颜色直方图是通过统计图像各个颜色的像素个数构成的。其处理过程: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
-
- 程序界面
- 测试结果
- 结论
- 论文结论
基于直方图的图像检索在RGB颜色空间具有比HSV颜色空间更好的检索效果
从计算时间的观点上来说,使用HSV颜色空间使用几何或二次方法比使用RGB颜色空间需要更小的时间开销
在同时考虑计算时间和检索效率的情况下,在HSV颜色空间下的直方图交叉检索是六种方法中最可取的方法。
二次距离在计算负担下是不具有效率的。
-
- 我的结论
基于直方图的图像检索在RGB颜色空间具有比HSV颜色空间更好的检索效果
使用HSV颜色空间需要更小的时间开销
交叉检索没有效率
在考虑时间效率的情况下可以考虑在HSV空间下使用直方图检索
- 讨论
我们来分析上面结论产生偏差的原因,首先我们来看两个距离公式以及两张最容易检索出来的图片。
在这里我们分析图片的统计数据,从中发现规律,通过将数据从直方图中我们可以看出,对于最容易选出的295图片,其HSV值偏小,易于在距离计算中被选出。
-
- 最终结论
对于图片295 ,在HSV空间小的数比例偏小,导致用min选择时容易选到该张图片。