直方图是多种空间域处理技术的基础。仿图操作能有效地用于图像增强,直方图固有的信息在其他图像处理应用中也是非常有用的,如图像压缩与分割。訪图在软件中易于计算,也适用于商用硬件设备,因此直方图成为实时图像处理的一个流行工具。
在MATLAB中,我们使用imhist函数来显示一-幅图像的直方图。
一.imhist函数
imhist函数多用于根据导入的图像绘制直方图,应用范围较广,其基本语法是:
h=imhist(f,b)
其中的f是输入的图像,h为其直方图,b是灰度级的个数。默认情况下,可直接写作:
imhist(f)
例如,导入一张图片,然后运行:
I=imread('hx.jpg');
imhist(I)
可以看到,我们这里已经绘制出了这幅图片的直方图。
二.直方图处理实践
题目:自定义一个函数,将输入图像(hx.jpg)进行直方图均衡化处理,该函数输入参数为处理前的图像,输出处理后的图像并显示处理过程中的灰度直方图。
1.读取图像并显示
I=imread('hx.jpg'); %读入图像
figure
subplot(2,3,1); %在窗口中排列图像
imshow(I) %X显示图像
title('原始图像'); %赋标题
2.转化为灰度图
J=rgb2gray(I); %转化为灰度图
subplot(2,3,2);
imshow(J);
title('原图像灰度图');
3.绘制灰度直方图
subplot(2,3,3);
imhist(J);
title('灰度直方图');
4.直方图均衡化,这里用到了adapthisteq函数,adapthisteq函数使用限制对比度的自适应直方图均衡化 (CLAHE) 来变换值,从而增强灰度图像I
的对比度[1]。
subplot(2,3,4);
H=adapthisteq(J); %对灰度直方图均衡化处理
imhist(H);
title('直方图均衡化');
5.输出均衡化后的图像。
subplot(2,3,5);
imshow(H);
title('均衡化后的图像');
运行结果如图所示,可以看到我们处理的效果还是不错的。
另外直方图的均衡化可以通过一串源代码来实现,由于篇幅有限,我放到公众号了,编程实现的代码请到公众号回复 直方图均衡化 获取。
好了,今天的分享就到这里,关注我,每天更新matlab相关内容,获取更多知识可以关注下我们的公众号Asoul水云天课堂,也可以加qq群953314432,一个人学习也许会迷路,一群人学习绝不会孤单。