直方图均衡化的数学原理
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布【1】。
下图为直方图均衡化的过程,体现了“均衡”的含义:(概率密度的均匀)
网上可以查阅到关于直方图均衡化的各种解释、用法、程序、优缺点,这里只关注直方图均衡化的数学原理(可以参阅【1】)。
我们知道直方图变换其实是一种灰度变换,灰度变换的变换函数决定了输入随机变量与输出随机变量之间的关系,也就是两个随机变量的关系;一副图像是二维离散的数据,不利于使用数学的工具进行处理,在数字图像处理中,我们通常是采用连续的变量进行推导,最后在推广到离散的情况。
以下我们介绍:1.图像直方图的定义 2.直方图变换的理论基础(为什么介绍它?直方图变换是直方图均衡化的基础)3.概率知识-随机变量的函数分布 4.直方图均衡化的理论基础 5.离散形式的直方图均衡化。
一、图像直方图的定义
1.定义(1):
2.定义(2):
3.比较:
二、直方图变换的理论基础
注意:T(r)为单值单调增加(此为数字图像处理-冈萨雷斯-第二版中的表述),在第三版中有一些变化,具体的可以查阅此书的对应章节。
三、概率论的知识-随机变量的函数的分布
这一块涉及了概率论的知识-随机变量的函数的分布:
四、直方图均衡化的理论基础
五、离散形式的直方图均衡化
六、例子
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
//s[i][j] 为像素值
n[ s[i][j] ]++;
}
}
for(i=0;i<L;i++){
//p[i]表示灰度级为i的像素在整图像中出现的概率,
p[i] = n[i] / (width*height);
}
//step 2
for(i=0;i<L;i++){
for(k=0;k<=i; k++){
//c[]存储的是累计的归一化直方图
c[i] += p[k];
}
}
//step 3
//set the new pixel
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
//max is the max value of s[i][j]
s[i][j] = c[ s[i][j] ] *255;//重新计算像素
}
}