算法的原理在:
原理大概意思是:将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 |
...
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);
基于区间统计的颜色直方图图像匹配算法,布布扣,bubuko.com
原文地址:http://blog.csdn.net/eagleest/article/details/36004733