提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在进行图像处理时,绘制直方图和直方图均衡化是常见的图像处理方法。今天我将学习绘制直方图和直方图均衡化的内容并温习绘图方法的表示
一、简要介绍
matlab中绘制直方图的核心函数是imhist函数;直方图均衡化的函数是histeq函数。一般只需要调用这两个函数就可以完成要求操作。
如果要绘制柱状的直方图,常用的函数是bar函数;如果要绘制茎秆图,常用的函数是stem函数;如果要将各点连接起来,常用的函数是plot函数
二、代码展示
I1=imread('breast.tif');
I2=imadjust(I1,stretchlim(I1),[0,1],1);
I3=imhist(I2);%直接绘制直方图
g=imhist(I2,25);%将绘制的直方图分成25段(相当于纵坐标)
horz=linspace(0,255,25);%给出横坐标,将0—255的区间均分为255段
subplot(2,3,1),imshow(I2),title('原图');
subplot(2,3,2),imhist(I2),title('直方图');
%将horz做为横坐标,g作为纵坐标绘制棒状图。其中x轴总的范围为(0,255)且每一小段长50;y的总的范围为(0,60000)且每一小段长20000,
subplot(2,3,3),bar(horz,g),axis([0 255 0 60000]),set(gca,'xtick',0:50:255),set(gca,'ytick',0:20000:60000);
%gca在这里的意思是抓取的意思,后面的xtick意味着对x轴进行操作,ytick则意味着对y轴进行操作
subplot(2,3,4),stem(horz,g,'b-..'),axis([0 255 0 60000]),set(gca,'xtick',0:50:255),set(gca,'ytick',0:20000:60000);
subplot(2,3,5),plot(horz,g,'b-..'),axis([0 255 0 60000]),set(gca,'xtick',0:50:255),set(gca,'ytick',0:20000:60000);
I4=imread('pollen.tif');
I5=histeq(I4,256);%直方图均衡化处理
figure(2)
subplot(221),imshow(I4),title('原图');
subplot(222),imhist(I4),title('原图直方图'),ylim('auto');%ylim意味着自动对y轴进行划分,更加便利
subplot(223),imshow(I5),title('直方图均衡化后图像'),ylim('auto');
subplot(224),imhist(I5),title('直方图均衡化后图像直方图'),ylim('auto');
hnorm=imhist(I4)./numel(I4);%直方图均衡化的另一种表示方法
cdf=cumsum(hnorm);%该做法可以得到变换函数
figure(3)
x=linspace(0,1,256);
plot(x,cdf),axis([0 1 0 1]),set(gca,'xtick',0:0.2:1),set(gca,'ytick',0:0.2:1),xlabel('输入灰度值'),ylabel('输出灰度值');
三、结果展示
总结
直方图均衡化对于动态范围较窄,整体偏灰暗的图像进行对比度的调整具有很好的效果。