一、实验原理
直方图均衡化(Histogram Equalization)是图像处理领域中利用图像直方图对对比度进行调整的方法。这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,通过有效地扩展常用的亮度来实现这种功能。
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。即对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同,将给定图像的直方图分布改变成“均匀”分布直方图分布。这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。在灰度直方图均衡化处理中对图像的映射函数可定义为:g=EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):
(1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。
(2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。
累积分布函数(cumulative distribution function,CDF)即可以满足上述两个条件,并且通过该函数可以完成将原图像f的分布转换成g的均匀分布。此时的直方图均衡化映射函数为:
gk = EQ(fk) = (ni/n) = pf(fi) ,(k=0,1,2,……,L-1)
上述求和区间为0到k,根据该方程可以由源图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布求出fk到gk的灰度映射关系。在重复上述步骤得到源图像所有灰度级到目标图像灰度级的映射关系后,按照这个映射关系对源图像各点像素进行灰度转换,即可完成对源图的直方图均衡化。
二、实验代码
方法一:
%直方图均衡化
function y=text1_zhifangjunheng(x)%x为输入的图片名称
I=imread(x);
I=rgb2gray(I);%改为二维灰度
[height,width]=size(I);
figure;
subplot(221);imshow(I);%显示原始图像
subplot(222);imhist(I);%显示原始图像直方图
%进行像素灰度统计
NumPixel=zeros(1,256);%统计各个灰度数目,共256个灰度
for i=1:height
for j=1:width
NumPixel(I(i,j)+1)=NumPixel(I(i,j)+1)+1;%对应灰度值像素点数量增加一
end
end
%计算灰度分布密度
ProbPixel=zeros(1,256);
for i=1:256
ProbPixel(i)=NumPixel(i)/(height*width*1.0);
end
%计算累计直方图分布
Cumupixel=zeros(1,256);
for i=1:256
if i==1
CumuPixel(i)=ProbPixel(i);
else
CumuPixel(i)=CumuPixel(i-1)+ProbPixel(i);
end
end
%累计分布取整
CumuPixel=uint8(255.*CumuPixel+0.5);
%对灰度值进行映射(均衡化)
for i=1:height
for j=1:width
I(i,j)=CumuPixel(I(i,j));
end
end
subplot(223);
imshow(I);
subplot(224);
imhist(I);
end
方法二:也可直接调用matlab中的histeq函数以及adapthisteq函数直接对图形进行直方均衡,代码如下:
function test1_zhifangjunheng(picturename)%x为输入的图片名称
A=imread(picturename);%读取图片
A=rgb2gray(A);%改为二维灰度
figure(1);subplot(1,2,1);imshow(A);title('原始图像');%显示原始图像
subplot(1,2,2);imhist(A);title('原始直方图');colorbar;%显示直方图
B=histeq(A);%直方图均衡
figure;subplot(2,2,1);imshow(B);title('使用histeq函数直方均衡后图像');
subplot(2,2,2);imhist(B);title('使用histeq函后数直方图');colorbar;
C=adapthisteq(A);
subplot(2,2,3);imshow(C);title('使用adapthisteq函数直方均衡后图像');
subplot(2,2,4);imhist(C);title('使用adapthisteq函后数直方图');colorbar;
end
三、实验结果及分析
方法一实验结果如下图所示
这种方法对于背景和前景都太亮或者太暗的图像非常有用,尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。缺点是它对处理的数据不加选择,它可能会增加背景杂讯的对比度并且降低有用信号的对比度;变换后图像的灰度级减少,某些细节消失;某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
方法二实验结果如图所示:
可以看出,adapthisteq函数相较histeq函数做了改进,效果也更好。