直方图均衡化与直方图规定化的MATLAB实现
@
1.直方图均衡化
对图像进行非线性拉伸,重新分配图像像元值,使一定灰度范围内像元值的数量大致相等就是直方图的均衡化。原来直方图中间的峰顶部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较平的分段直方图:如果输出数据分段值较小,会产生粗略的分类的视觉效果。
在MATLAB中,histeq函数用于直方图的均衡化。
实现代码如下
clear
close all
clc
I=imread('peppers.png');
subplot(221)
I=rgb2gray(I);
imshow(I)
title('原始图像')
subplot(222)
imhist(I)
title('原始图像直方图')
I1=histeq(I);
subplot(223)
imshow(I1)
title('图像均衡化')
subplot(224)
imhist(I)
title('直方图均衡化')
从MATLAB2007a开始,提供了一个新的函数adapthisteq,该函数限定对比度适应性直方图均衡化,它先对图像的局部块进行直方图均衡化,然后利用双线性插值方法把各个小块拼接起来,以消除局部造成的边界。代码如下:
clear
close all
clc
A=imread('cell.tif');
subplot(131)
imshow(A)
title('原始图像')
B=histeq(A);
subplot(132)
imshow(B)
title('histeq函数作用效果')
C=adapthisteq(A);
subplot(133)
imshow(C);
title('adapthisteq函数作用效果');
2.直方图规定化
所谓直方图规定化,就是通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图。所以直方图修正的关键就是灰度映像函数。直方图规定化是用于产生处理后有特殊直方图图像的方法。令Pr(V)和Pz(Z)分别为原始图像和期望图像的灰度概率密度函数。对原始图像和期望图像均做直方图均衡化处理,应有
由于都是作直方图均衡化处理,所以处理后的原图像的灰度概率密度函数Ps(S)及理想图像的灰度概率密度函数Pv(V)是相等的。因此,可以用变换后的原始图像灰度级S代替上式中的V,即
利用此式可以从原始图像得到希望的图像灰度级。对离散图像有
综上所述,数字图像的直方图规定化算法如下:
(1)将图像进行直方图均衡化处理,求出原图像中每一个灰度级ri所对应的变换函数Si;
(2)对给定直方图做类似计算,得到理想图像中每一个灰度级Zi所对应的函数Vi;
(3)找出Vi≈Si的点对,并映射到Zi;
(4)求出Pi(Zi);
代码如下:
clear
close all
clc
I=imread('tire.tif');
subplot(221)
imshow(I);
title('原始图像')
hgram=50:2:250;%规定化函数
J=histeq(I,hgram);
subplot(222)
imshow(J)
title('图像规定化')
subplot(223)
imhist(I,64)
title('原始图像直方图')
subplot(224)
imhist(J,64)
title('规定化后直方图')