MATLAB直方图均衡化函数的计算及使用
本文针对灰度图像的直方图均衡化函数给出运算方法。
图像的直方图展示了图像汇总的不同灰度级的分布。由下图的比较,我们可以清楚地区分:左上原始图像的像素值主要集中在低值处,因此整个图像看起来较为暗沉,不易分辨;而左下处理后的图像进行了灰度均衡化之后,整幅图像的像素值在0~256上分布较为均匀,因此更加清晰可辨。
matlab中有自带函数histeq可以很好地完成灰度直方图均衡化,而本文用的是展开图像频率的直方图均衡化方法,因为这个方法是先求出转换函数再进行计算,因此可以更直观地看出转换过程。
所谓展开图像频率,是指使用如下方程进行处理。
其中,sk为输出亮度值,T()为转换函数,rk为输入亮度值;L为图像中可能的灰度级数。本文中的原始图像为uint8格式,所以L=2^8=256; Pr为亮度值为rk的像素的分布概率,Pr(rk)=nk/MN,其中MN为像素总个数,nk为像素值为rk的像素点个数。
s0=255pr(r0);
s1=255[pr(r0)+pr(r1)];
…
sk=255*[pr(r0)+pr(r1)+…Pr(rk)];
以此类推。
此图即为转换函数图。由此图可以看出,此函数主要将原先集中在亮度值较低处的函数值拉伸到了整个0~255区间上,因此图像会变得更加清晰。
以下为源代码:
I1=imread('Fig1.tif');
[M,N]=size(I1