【*_*】【CBIR】【Color】颜色聚合向量Color Coherence vector CCV

颜色聚合向量Color Coherence vector CCV 

In HDU-Lab_532 on April 8, 2014 at 19:00 pm

written by erlingmusan (Huang Qian Ru)

一.颜色直方图

颜色特征是在图像检索中应用最为广泛的视觉特征,主要原因在于颜色往往和图像中所包含的物体或场景十分相关。此外,与其他的视觉特征相比,颜色特征对图像本身的尺寸、方向、视角的依赖性较小,从而具有较高的鲁棒性。

颜色直方图是在许多图像检索系统中被广泛采用的颜色特征。它所描述的是不同色彩在整幅图像中所占的比例,而并不关心每种色彩所处的空间位置,即无法描述图像中的对象或物体。颜色直方图特别适于描述那些难以进行自动分割的图像。

计算颜色直方图需要将颜色空间划分成若干个小的颜色区间,每个小区间成为直方图的一个bin。这个过程称为颜色量化(color quantization)。然后,通过计算颜色落在每个小区间内的像素数量可以得到颜色直方图。设一幅彩色图像包含N个象素,图像的颜色空间被量化为 L 种不同的颜色,则颜色直方图可通过下式计算:

graphic

graphic graphic 为整幅图像中第k种颜色的像素个数。

从上述定义可以看出,颜色直方图表现的是图像的一种全局特征,每一幅图像具有唯一的颜色直方图。并且,颜色直方图对图像的旋转、平移以及缩放具有天生不变性。但是,颜色直方图仅仅考虑了图像象素的颜色,但同时它丢失了图像颜色的空间分布信息,两幅颜色空间分布完全不同的图像可以具有相同的直方图,这样就会造成检索的误差,因此检索还应该加进颜色的空间分布信息。


二.颜色聚合向量

1.算法概述

针对颜色直方图和颜色矩无法表达图像色彩的空间位置的缺点, Pass 提出了图像的颜色聚合向量( color coherence vector ,CCV )。它是颜色直方图的一种演变,其核心思想是将属于直方图每一个 bin 的像素进行分为两部分:如果该 bin 内的某些像素所占据的连续区域的面积大于给定的阈值,则该区域内的像素作为聚合像素,否则作为非聚合像素,从而将每一个 bin 分文颜色聚合向量和颜色非聚合向量。假设 graphic graphic 分别代表直方图的第 i  bin中聚合像素和非聚合像素的数量,图像的颜色聚合向量可以表达为 graphic 。而显然, graphic 就是该图像的颜色直方图。由于包含了颜色分布的空间信息,颜色聚合向量相比颜色直方图可以达到更好的检索效果。


2.算法步骤及流程

颜色聚合向量算法可以通过以下几个步骤来完成对图像颜色特征的提取:

 1 )量化

CCV算法的第一步与求普通的直方图类似,即量化处理。可以采用各种量化方法,但是为了减少在接下来计算连通区域过程中的复杂度,一般采用均匀量化比较好。量化的结果是使得图片中只剩下 n 个颜色区间,即 bin 。

 2 )划分连通区域

对重新量化后的像素值矩阵,根据像素间的连通性把图像划分成若干个连通区域。连通区域可以看成是一个最大的像素集合,即对于一个区域 C ,对于任意两个像素点 graphic ,且graphic ,在区域 C 中p graphic 之间都存在一条通路(每一个 graphic 都在C 内,且graphic graphic 是相邻的,此处的相邻指周围的 8 个像素,也包括对角线在内)。

 3 )判断聚合性

通过上一步,可以把一幅图像划分成多个连通区域,统计每一个独立的连通区域 C 中的像素数,并设定一个阈值 graphic (一般取为图像总像素的 1% )作为判断某个区域C 中的像素是聚合的还是非聚合的,具体的判断依据如下:

 . 如果某个区域中的像素数大于阈值 graphic ,则该区域中的像素是聚合的。

 . 如果某个区域中的像素数小于阈值 graphic ,则该区域中的像素是非聚合的。

对于重新量化后的每一个颜色分量,按照上述的判断依据分别统计各连通区域中颜色值为似的像素中聚合像素的总数和非聚合像素的总数。

 4 )得到结果

根据上一步的统计结果,假设 graphic graphic 分别代表重新量化后的第 i 个颜色分量中聚合像素和非聚合像素的总数,则 graphic 称为第i 个颜色分量的聚合对,则图像的颜色聚合向量即该图像的颜色特征可以表示为:


graphic

3.算法性能及评价

颜色聚合向量很好地解决了直方图没有考虑图像颜色空间分布信息的缺点,可以有效地减少检索的误差。在实际检索应用中,对于两幅图像  ,它们的颜色聚合向量分别为 graphic graphic ,那么  的距离或者说不同可以表示为:

 graphic

但是,很明显,性能的增加是以效率为代价的,颜色聚合向量算法在直方图的基础上增加了划分连通区域和判断聚合性等步骤,大大增加了计算量。尤其是实现判断连通区域的时候需要用到迭代与回溯算法,这对于计算量是很大的考验。为了减少计算量,尽量采取均匀量化的方法,并可以适当减小量化的阶数,即 bin 的个数。另外,也可以对于很大的图像,可以先做一些“模糊化”的预处理,把某个小邻域内的值用平均值代替,这样也可以很大程度减少计算量。

=================================================================================
【*_*】【CBIR】【Color】颜色聚合向量Color Coherence vector CCV_第1张图片

Sample

【*_*】【CBIR】【Color】颜色聚合向量Color Coherence vector CCV_第2张图片
=================================================================================
4.Matlab Code

function CCV_output = Color_Coherence_Vectors(img)
%img is simple channel
[rows,cols] = size(img);
H = fspecial('average',3);
imgBlur = imfilter(img,H,'replicate');
clear('img');
N = 4;%量化为N等份
% Ndis = 256/N;%量化距离
% reduceColors = ((imgBlur-Ndis/2)/Ndis)+1;
imgBlur = double(imgBlur);

minpix = min(min(imgBlur));
maxpix = max(max(imgBlur));
reduceColors = round((imgBlur-minpix)/(maxpix-minpix)*(N-1))+1;
clear('imgBlur');
CCV_outputT = zeros(N,2);
for m = 1:N
    lianTong = bwlabel(reduceColors == m,8);
    JuHe = 0;
    N_JuHe = 0;
    for m1 = 1:max(max(lianTong))
        lianTongareaSimple = length(find(lianTong == m1));
        if lianTongareaSimple > rows*cols*0.01  %
            JuHe = JuHe + lianTongareaSimple;
        else
            N_JuHe = N_JuHe + lianTongareaSimple;
        end
    end
    CCV_outputT(m,1) = JuHe;
    CCV_outputT(m,2) = N_JuHe;
end
% CCV_output = CCV_outputT/(rows*cols)*1.0;
CCV_output = CCV_outputT;



参考文献:  Pass, Greg, Ramin Zabih, and Justin Miller. "Comparing Images Using Color Coherence Vectors." Paper presented at the Proceedings of the fourth ACM international conference on Multimedia, 1997.


转载请注明作者和出处:http://blog.csdn.net/erlingmusan.未经允许请勿用于商业用途

你可能感兴趣的:(【*_*】【CBIR】【Color】颜色聚合向量Color Coherence vector CCV)