基于区间统计的颜色直方图图像匹配算法

算法的原理在:

点击打开链接


原理大概意思是:将R,G,B各分量信息 颜色信息划分为 N 区间。

例如下图:4X4X4 的区间

  red
0-63 64-127 128-191 192-255
blue 0-63 43 78 18 0
64-127 45 67 33 2
128-191 127 58 25 8
192-255 140 47 47 13
在统计 各个区间内的像素数:

基于区间统计的颜色直方图图像匹配算法_第1张图片

... 

MATLAB 代码实现 

就算函数是dhist.m 文件 参数 bins 是需要划分的区间,filename 需要计算 直方图的文件名,result 为计算的直方图结果。


function result = dhist(bins,filename)
   pic =  imread(filename);
   PR = pic(:,:,1);
   PG = pic(:,:,2);
   PB = pic(:,:,3);
   %%
   dim = bins^3; %%得到总维数
   %%划分的区间为
   step = round(256/bins);
   %%
    resultr = 0;
    resultg = 0;
    resultb = 0;
   GP=zeros(1,dim);
   for r=0:(bins-1)            %r分量
       resultr = 0;
       for s=(step*r):(step*(r+1)-1)
           resultr = resultr + length(find(PR==s));
       end 
       for g=0:(bins-1)        %g分量
           resultg = 0;
           for s=(step*g):(step*(g+1)-1)
               resultg = resultg + length(find(PG==s));
           end 
           %% 正确计算了b的数值
           for b=0:(bins-1)    %b分量
               resultb = 0;
               %% 划分的区间为
               for s=(step*b):(step*(b+1)-1)
                   resultb = resultb + length(find(PB==s));
                   %fprintf(' %d\n',s);   
               end  
                 GP((bins*bins*r)+((bins*g)+(b+1))) =  GP((bins*bins*r)+((bins*g)+(b+1))) + resultb + resultg + resultr;
           end
           %%
       end
   end
   result = GP;
%    [M,N]=size(result);
%    fprintf('%d     %d\n',M,N);
end


 
  

下面是测试文件:一下是 10x10的划分区间

red = dhist(10,'red.bmp');
blue = dhist(10,'blue.bmp');

cov = corrcoef(red,blue);
fprintf('相关系数为 %d\n\n',cov);










你可能感兴趣的:(图像处理)