hsv
来源:互联网 发布:h3c 查看端口日志 编辑:程序博客网 时间:2024/05/19 12:12
颜色特征是在图像检索中应用最为广泛的视觉特征,主要原因在于颜色往往和图像中所包含的物体或场景十分相关。此外,与其他的视觉特征相比,颜色特征对图像本身的尺寸、方向、视角的依赖性较小,从而具有较高的鲁棒性。
面向图像检索的颜色特征的表达涉及到若干问题。首先,我们需要选择合适的颜色空间来描述颜色特征;其次,我们要采用一定的量化方法将颜色特征表达为向量的形式;最后,还要定义一种相似度(距离)标准用来衡量图像之间在颜色上的相似性。在本节中,我们将主要讨论前两个问题,并介绍颜色直方图、颜色矩、颜色集、颜色聚合向量以及颜色相关图等颜色特征的表示方法。
1 颜色直方图
颜色直方图是在许多图像检索系统中被广泛采用的颜色特征。它所描述的是不同色彩在整幅图像中所占的比例,而并不关心每种色彩所处的空间位置,即无法描述图像中的对象或物体。颜色直方图特别适于描述那些难以进行自动分割的图像。
当然,颜色直方图可以是基于不同的颜色空间和坐标系。最常用的颜色空间是RGB颜色空间,原因在于大部分的数字图像都是用这种颜色空间表达的。然而,RGB空间结构并不符合人们对颜色相似性的主观判断。因此,有人提出了基于HSV空间、Luv空间和Lab空间的颜色直方图,因为它们更接近于人们对颜色的主观认识。其中HSV空间是直方图最常用的颜色空间。它的三个分量分别代表色彩(Hue)、饱和度(Saturation)和值(Value)。
计算颜色直方图需要将颜色空间划分成若干个小的颜色区间,每个小区间成为直方图的一个bin。这个过程称为颜色量化(color quantization)。然后,通过计算颜色落在每个小区间内的像素数量可以得到颜色直方图。颜色量化有许多方法,例如向量量化、聚类方法或者神经网络方法。最为常用的做法是将颜色空间的各个分量(维度)均匀地进行划分。相比之下,聚类算法则会考虑到图像颜色特征在整个空间中的分布情况,从而避免出现某些bin中的像素数量非常稀疏的情况,使量化更为有效。另外,如果图像是RGB格式而直方图是HSV空间中的,我们可以预先建立从量化的RGB空间到量化的HSV空间之间的查找表(look-up table),从而加快直方图的计算过程。
上述的颜色量化方法会产生一定的问题。设想两幅图像的颜色直方图几乎相同,只是互相错开了一个bin,这时如果我们采用L1距离或者欧拉距离(见3.1.1节)计算两者的相似度,会得到很小的相似度值。为了克服这个缺陷,需要考虑到相似但不相同的颜色之间的相似度。一种方法是采用二次式距离[4](见3.1.3节)。另一种方法是对颜色直方图事先进行平滑过滤,即每个bin中的像素对于相邻的几个bin也有贡献。这样,相似但不相同颜色之间的相似度对直方图的相似度也有所贡献。
面向图像检索的颜色特征的表达涉及到若干问题。首先,我们需要选择合适的颜色空间来描述颜色特征;其次,我们要采用一定的量化方法将颜色特征表达为向量的形式;最后,还要定义一种相似度(距离)标准用来衡量图像之间在颜色上的相似性。在本节中,我们将主要讨论前两个问题,并介绍颜色直方图、颜色矩、颜色集、颜色聚合向量以及颜色相关图等颜色特征的表示方法。
1 颜色直方图
颜色直方图是在许多图像检索系统中被广泛采用的颜色特征。它所描述的是不同色彩在整幅图像中所占的比例,而并不关心每种色彩所处的空间位置,即无法描述图像中的对象或物体。颜色直方图特别适于描述那些难以进行自动分割的图像。
当然,颜色直方图可以是基于不同的颜色空间和坐标系。最常用的颜色空间是RGB颜色空间,原因在于大部分的数字图像都是用这种颜色空间表达的。然而,RGB空间结构并不符合人们对颜色相似性的主观判断。因此,有人提出了基于HSV空间、Luv空间和Lab空间的颜色直方图,因为它们更接近于人们对颜色的主观认识。其中HSV空间是直方图最常用的颜色空间。它的三个分量分别代表色彩(Hue)、饱和度(Saturation)和值(Value)。
计算颜色直方图需要将颜色空间划分成若干个小的颜色区间,每个小区间成为直方图的一个bin。这个过程称为颜色量化(color quantization)。然后,通过计算颜色落在每个小区间内的像素数量可以得到颜色直方图。颜色量化有许多方法,例如向量量化、聚类方法或者神经网络方法。最为常用的做法是将颜色空间的各个分量(维度)均匀地进行划分。相比之下,聚类算法则会考虑到图像颜色特征在整个空间中的分布情况,从而避免出现某些bin中的像素数量非常稀疏的情况,使量化更为有效。另外,如果图像是RGB格式而直方图是HSV空间中的,我们可以预先建立从量化的RGB空间到量化的HSV空间之间的查找表(look-up table),从而加快直方图的计算过程。
上述的颜色量化方法会产生一定的问题。设想两幅图像的颜色直方图几乎相同,只是互相错开了一个bin,这时如果我们采用L1距离或者欧拉距离(见3.1.1节)计算两者的相似度,会得到很小的相似度值。为了克服这个缺陷,需要考虑到相似但不相同的颜色之间的相似度。一种方法是采用二次式距离[4](见3.1.3节)。另一种方法是对颜色直方图事先进行平滑过滤,即每个bin中的像素对于相邻的几个bin也有贡献。这样,相似但不相同颜色之间的相似度对直方图的相似度也有所贡献。
选择合适的颜色小区间(即直方图的bin)数目和颜色量化方法与具体应用的性能和效率要求有关。一般来说,颜色小区间的数目越多,直方图对颜色的分辨能力就越强。然而,bin的数目很大的颜色直方图不但会增加计算负担,也不利于在大型图像库中建立索引。而且对于某些应用来说,使用非常精细的颜色空间划分方法不一定能够提高检索效果,特别是对于不能容忍对相关图像错漏的那些应用。另一种有效减少直方图bin的数目的办法是只选用那些数值最大(即像素数目最多)的bin来构造图像特征,因为这些表示主要颜色的bin能够表达图像中大部分像素的颜色。实验证明这种方法并不会降低颜色直方图的检索效果。事实上,由于忽略了那些数值较小的bin,颜色直方图对噪声的敏感程度降低了,有时会使检索效果更好。两种采用主要颜色构造直方图的方法可以在文献[5,6]中找到。
Matlab实现
- function colorhist = colorhist(rgb)
- if size(rgb,3) ~= 3
- error(‘3 components are needed for histogram’);
- end
- % globals
- H_BITS = 4; S_BITS =2; V_BITS = 2;
- % rgb2hsv可用rgb2hsi代替
- hsv = uint8(255*rgb2hsv(rgb));
- imgsize = size(hsv);
- % get rid of irrelevant boundaries
- %i0 = round(0.05*imgsize(1));
- %i1 = round(0.95*imgsize(1));
- %j0 = round(0.05*imgsize(2));
- %j1 = round(0.95*imgsize(2));
- %hsv = hsv(i0:i1, j0:j1);
- % histogram
- for i = 1 : 2^H_BITS
- for j = 1 : 2^S_BITS
- for k = 1 : 2^V_BITS
- colorhist(i,j,k) = sum(sum(bitshift(hsv(:,:,1),-(8-H_BITS))==i-1 & bitshift(hsv(:,:,2),-(8-S_BITS))==j-1 & bitshift(hsv(:,:,3),-(8-V_BITS))==k-1));
- end
- end
- end
- colorhist = reshape(colorhist, 1, 2^(H_BITS+S_BITS+V_BITS));
- %normalize
- %colorhist = colorhist/sum(colorhist);
function colorhist = colorhist(rgb)if size(rgb,3) ~= 3 error('3 components are needed for histogram');end% globalsH_BITS = 4; S_BITS =2; V_BITS = 2;% rgb2hsv可用rgb2hsi代替hsv = uint8(255*rgb2hsv(rgb));imgsize = size(hsv);% get rid of irrelevant boundaries%i0 = round(0.05*imgsize(1));%i1 = round(0.95*imgsize(1));%j0 = round(0.05*imgsize(2));%j1 = round(0.95*imgsize(2));%hsv = hsv(i0:i1, j0:j1);% histogramfor i = 1 : 2^H_BITS for j = 1 : 2^S_BITS for k = 1 : 2^V_BITS colorhist(i,j,k) = sum(sum(bitshift(hsv(:,:,1),-(8-H_BITS))==i-1 & bitshift(hsv(:,:,2),-(8-S_BITS))==j-1 & bitshift(hsv(:,:,3),-(8-V_BITS))==k-1)); end endendcolorhist = reshape(colorhist, 1, 2^(H_BITS+S_BITS+V_BITS));%normalize%colorhist = colorhist/sum(colorhist);
说明:bitshift是对数据的位操作,其实就是乘除法,例如:bitshift(12,-2),就是12除以2的2次方,结果为3,第二个参数是负数就是除,是整数就是乘。
reshape是吧一个矩阵变成1*M的长向量。
最后一步是归一化的计算。
原图
直方图
参考资料:
- .颜色直方图, HSV直方图, histogram bins
- 图像颜色特征提取
- 百度知道的一个答案
阅读全文
0 0
- HSv
- HSV
- HSV
- HSV
- hsv
- HSV空间
- hsv -> rgb
- 关于HSV
- hsv空间
- HSV 量化
- RGB,HSV
- opencv--HSV
- HSV(HSV颜色模型)
- cvCvtColor(image,hsv,CV_BGR2HSV); BGR2HSV( bgr, hsv);
- HSV to RGB and RGB to HSV
- HSV Color Space
- RGB和HSV转换
- HSV颜色空间
- unity摄像机中clear flags属性介绍
- LeetCode-7-Reverse-Integer 水题
- 安装APK,提示“该安装包未包含任何证书”
- 基于SpringSecurity4.2.2权限框架搭建教程
- python web py入门-1-web.py简介和安装
- hsv
- Python之禅
- tab框切换嵌套tab框
- 线性表-1
- 【算法】求两个数中,bit位不同的个数
- 算法基础之----堆排序
- 2017美团点评秋招笔试编程
- 【美图】- 2018届校招在线考试
- java并发编程之组合对象学习笔记