一个图像彩色直方图计算的程序,给初学者
一个图像彩色直方图计算的程序,给初学者^_^比较简单,如果有问题的请跟帖,我看到以后会回复的。
计算16*16*16的彩色直方图程序如下(8*8*8或者32*32*32的可以类推):
RGB = imread('autumn.tif');
[p,q,r]=size(RGB);
f=RGB; %read image
f_r=f(:,:,1); % R,G,B of the image
f_g=f(:,:,2);
f_b=f(:,:,3);
f_r1=fix(double(f_r)/16); %将图像颜色级数变为16bin,颜色值从0-15
f_g1=fix(double(f_g)/16);
f_b1=fix(double(f_b)/16);
f(:,:,1)=f_r1; %得到16bin的图像
f(:,:,2)=f_g1;
f(:,:,3)=f_b1;
H=zeros(16*16*16,1); %直方图初始化
i=1;
for c1=0:15 %计算彩色直方图
for c2=0:15
for c3=0:15
temp=[c1 c2 c3]; %计算彩色为c1,c2,c3的像素个数
num=length(find(double(f(:,:,1))==temp(1) & double(f(:,:,2))==temp(2) & double(f(:,:,3))==temp(3)));
H(i)=num;
i=i+1;
end
end
end
%已知像素彩色为(x1,x2,x3),则其在彩色直方图的第几个bin可以用以下公式计算:x1*256+x2*16+x3+1
%已知彩色直方图的第i个bin,则其对应的像素彩色可用以下公式计算:x1=fix(i/256),x2=fix(i-x1*256/16)
%x3=i-x1*256-x2*16-1