首页 > 代码库 > 基于区间统计的颜色直方图图像匹配算法

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

算法的原理在:

点击打开链接


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

例如下图:4X4X4 的区间

 red
0-6364-127128-191192-255
blue0-634378180
64-1274567332
128-19112758258
192-255140474713
在统计 各个区间内的像素数:


... 

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);