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

来源:互联网 发布:kieng软件 编辑:程序博客网 时间:2024/06/06 15:57

算法的原理在:

点击打开链接


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

例如下图:4X4X4 的区间

 red0-6364-127128-191192-255blue0-63437818064-1274567332128-19112758258192-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);










0 0