您的位置:首页 > 编程语言 > MATLAB

matlab 绘制直方图的函数实现

2017-04-19 00:11 387 查看
一、matlab 绘制直方图:
function paint(f)
[m,n]=size(f);%m,n分别存储图像像素点的长度与宽度
g=zeros(1,256);
for i=1:256%图像的横轴取值从1-256
g(i)=length(find(f==i))/(m*n);%显示图像像素点在直方图纵轴的频率
end;
bar(0:255,g,'b');
系统函数绘制直方图:
1.
h=imhist(f,b);%f为灰度图像,b是是用于形成直方图的“收集箱”的个数。若b未包含在此变量中,则其默认值为256

2.
bar(horse,v,width);%绘制条形图形式的直方图,v,行向量,包含被绘制的点。horz与v有着相同维数的向量,包含水平标度值的增量width是一个值在0-1之间的数

EXAMPLE:
h=imhist(f);
h1=h(1:10:256);
horz=1:10:256;
bar(horse,h1);%这里width的默认值是0.8.大家可以多的尝试width 的值在0-1之间的变化对条形直方图的影响




3.
stem(horse,v,'属性'...);%这里的horz和v的作用与bar相同,不同的是stem增加了一个属性选项,可以设置绘制直方图的颜色,线段的形式,符号。
EXAMPLE:
h=imhist(f);
h1=h(1:10:256);
horz=1:10:256;
stem(hora,h1,'color','r');%绘制出线段为红色的直方图显示

二、直方图均衡化:
x=rgb2gray(imread('p1.jpg'));
[m,n]=size(x);
p=zeros(1,256);
for i=0:255
p(i+1)=length(find(x==i))/(m*n);
end
subplot(2,2,1);
bar(0:255,p,'b');
title('原图直方图');
s=zeros(1,256);
for i=1:256
for j=1:i
s(i)=p(j)+s(i);
end
end

a=round(s*255);  %四舍五入函数进行像素点的取整
for i=0:255
GPeq(i+1)=sum(p(find(a==i))); %利用求和函数对直方图纵轴坐标赋值
end
subplot(2,2,3);
bar(0:255,GPeq,'b')
title('均衡化后的直方图');

系统均衡化的函数:
g=histeq(f,nlev);%f为输入图像,nlev为输出图像指定的灰度级,一般默认为64
EXAPLE:
f=imread('1.jpg');
g=rgb2gray(f);
figure,imhist(g);
ylim('auto')
g1=histeq(f,256);
figure,imshow(g1);
figure,imhist(g1);
ylim('auto')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: