直方图均衡(Histogram Equalization)
- 预备知识(PMF、CDF)
- 概述
- 实现
- Matlab代码
预备知识(PMF、CDF)
1.PMF
概率质量函数(Probability Mass Function)是离散随机变量在各特定点取值上的概率。概率质量函数与概率密度函数的不同之处在于前者是对离散随机变量定义的,而后者对连续随机变量。
考虑一个离散的灰度图像{X},令
ni
表示灰度
i
出现的次数,
其中,L为图像所有的灰度数(通常为256)。
2.CDF
累积分布函数(Cumulative Distribution Function),又叫分布函数,是概率密度函数(概率质量函数)的积分(求和),能完整描述一个实随机变量X的概率分布。
考虑离散灰度图像{X},对应 PMFX 的累积分布函数定义为:
概述
直方图均衡是图像处理领域用于增强图像对比度的方法,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
缺点:直方图均衡对处理的数据不加以选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。
直方图均衡化的基本思想是把原始图像的灰度分布直方图变换为均匀分布的形式,扩大了像素灰度值的动态范围,从而增强图像对比度。把原始图像{X}映射为处理后图像{Y}的映射函数需要满足以下两个条件:
(1)映射函数单调递增。
(2)映射函数值域不超过原始图像灰度的动态范围(即
0≤i<L
)。
实现步骤
1.求原始图像灰度的PMF。
2.由PMF求出CDF。
3.将CDF映射为新图像的灰度值。
Matlab代码
I = imread('test.jpg');
[row,col] = size(I);
%display the original image
subplot(221);imshow(I);title('原始图像');
subplot(222);imhist(I);title('原始图像直方图');
%Compute the PMF of all pixels of the image
PMF = zeros(1,256);
for i = 1:row
for j = 1:col
PMF(I(i,j) + 1) = PMF(I(i,j) + 1) + 1;
end
end
%Compute the CDF of all pixels of the image
CDF = zeros(1,256);
CDF(1) = PMF(1);
for i = 2:256
CDF(i) = CDF(i - 1) + PMF(i);
end
%Mapping
for i = 1:256
Map(i) = round((CDF(i)-1)*255/(row*col));
end
for i = 1:row
for j = 1:col
I(i,j) = Map(I(i,j) + 1);
end
end
subplot(223);imshow(I);title('处理后图像');
subplot(224);imhist(I);title('处理后图像直方图');
运行结果: