matlab绘制直⽅图的函数实现
⼀、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有着相同维数的向量,包含⽔平标度值的增量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
用subplot函数
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')