注册 登录
编程论坛 Matlab

一个图像彩色直方图计算的程序,给初学者

just_panlei 发布于 2008-11-11 16:45, 3458 次点击
一个图像彩色直方图计算的程序,给初学者^_^
比较简单,如果有问题的请跟帖,我看到以后会回复的。
计算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
3 回复
#2
bitzw2008-11-21 14:42
如何制作一个三维的直方图?
#3
czjszx20002008-12-10 09:56
xiexie
#4
victor03082009-11-01 23:30
首先感谢lz提供的代码 真是感激不尽啊 我是新手 这个为什么在MATLAB 运行的时候 数据老是显示是0啊
1