直方图均衡化
下面是关于直方图均衡化的一些理解和公式推导;关于随机变量函数的概率密度与随机变量概率密度的关系公式部分暂时未找到具体的资料,先写下自己的理解,以后再做补充。
直方图
直方图就是对图像的亮度进行统计分布,可以反映图像灰度值的分布情况,分为unnormalized histogram 和 normalized histogram。 normalized histogram 其实就是归一化的直方图,用于描述一幅图像中某个亮度值出现的可能性,有时候也称为 histogram 或者 image histogram。我们大部分情况下用的都是 normalized histogram。
unnormalized histogram:
h ( r k ) = n k f o r k = 0 , 1 , . . . , L − 1 h(r_k)=n_k \ \ for \ k=0,1,...,L-1 h(rk)=nk for k=0,1,...,L−1
normalized histogram:
p ( r k ) = h ( r k ) M N = n k M N p(r_k)=\frac{h(r_k)}{MN}=\frac{n_k}{MN} p(rk)=MNh(rk)=MNnk
其中 r k r_k rk为亮度值, n k n_k nk为该亮度值在图像中出现的像素个数, M M M和 N N N分别为图像的行数和列数。这里用概率符号 p ( r k ) p(r_k) p(rk)来表示归一化直方图,也说明直方图是一种亮度值的概率统计。
histogram shape is related to image apperance.
(下图来自冈萨雷斯的 digital image processing 4th edition 第190页)
直方图均衡化(histogram equalization)
假设一个灰度变换函数:
s
=
T
(
r
)
0
≤
r
≤
L
−
1
s=T(r) \quad 0\leq r \leq L-1
s=T(r)0≤r≤L−1
T应当满足两个条件:
a.
T
T
T为单调递增函数(若要求存在
T
−
1
T^{-1}
T−1,则
T
T
T应满足严格单调递增);
b.
0
≤
s
≤
L
−
1
0 \leq s \leq L-1
0≤s≤L−1。
现在假设两幅不同的图像其亮度值具有不同的概率密度函数(PDF,probability density function)
p
s
(
s
)
p_s(s)
ps(s) 和
p
r
(
r
)
p_r(r)
pr(r)。且
s
=
T
(
r
)
s=T(r)
s=T(r)。根据概率密度函数为累积分布函数(CDF, cumulative distribution function)的导数,有
F
S
(
s
)
=
P
(
S
≤
s
)
=
P
(
T
(
R
)
≤
s
)
=
P
(
R
≤
T
−
1
(
s
)
)
=
P
(
R
≤
r
)
=
F
R
(
r
)
\begin{aligned} F_S(s) &= P(S \leq s) \\ &= P(T(R) \leq s) \\ &= P(R \leq T^{-1}(s)) \\ &= P(R \leq r) \\ &= F_R(r) \end{aligned}
FS(s)=P(S≤s)=P(T(R)≤s)=P(R≤T−1(s))=P(R≤r)=FR(r)
两边求导,
p
s
(
s
)
d
r
=
p
r
(
r
)
d
s
\begin{aligned} \frac{p_s(s)}{dr}=\frac{p_r(r)}{ds} \end{aligned}
drps(s)=dspr(r)
因此,其概率密度函数有这样的关系(这里加了绝对值,估计是因为上面求累积分布函数变量替换时所产生的)
p
s
(
s
)
=
p
r
(
r
)
∣
d
r
d
s
∣
p_s(s)=p_r(r)|\frac{dr}{ds}|
ps(s)=pr(r)∣dsdr∣
累积分布函数与直方图均衡化:
现在定义如下变换:
s
=
T
(
r
)
=
(
L
−
1
)
∫
0
r
p
r
(
w
)
d
w
s=T(r)=(L-1) \int_0^r p_r(w)dw
s=T(r)=(L−1)∫0rpr(w)dw
该变换的意义为,对于亮度值 r r r,先计算出其对应的累积分布函数值,然后再乘以 L − 1 L-1 L−1映射到 [ 0 , L − 1 ] [0,L-1] [0,L−1]区间 。
下面我们来计算对应的
p
s
(
s
)
p_s(s)
ps(s):
(1)
d
s
d
r
=
d
T
(
r
)
d
r
=
(
L
−
1
)
d
d
r
[
∫
0
r
p
r
(
w
)
d
w
]
=
(
L
−
1
)
p
r
(
r
)
\begin{aligned} \frac{ds}{dr} &= \frac{dT(r)}{dr} \\ &= (L-1)\frac{d}{dr} \left[ \int_0^r p_r(w)dw \right] \\ &= (L-1)p_r(r) \end{aligned}
drds=drdT(r)=(L−1)drd[∫0rpr(w)dw]=(L−1)pr(r)
(2)
p
s
(
s
)
=
p
r
(
r
)
∣
d
r
d
s
∣
=
p
r
(
r
)
∣
1
(
L
−
1
)
p
r
(
r
)
)
∣
=
1
L
−
1
0
≤
s
≤
L
−
1
\begin{aligned} p_s(s) &= p_r(r) \left| \frac{dr}{ds} \right| \\ &= p_r(r) \left| \frac{1}{(L-1)p_r(r))} \right| \\ &= \frac{1}{L-1} \qquad 0 \leq s \leq L-1 \end{aligned}
ps(s)=pr(r)∣∣∣∣dsdr∣∣∣∣=pr(r)∣∣∣∣(L−1)pr(r))1∣∣∣∣=L−110≤s≤L−1
我们发现
p
s
(
s
)
p_s(s)
ps(s)是一个均匀概率密度函数,即对于任意一幅分布为
p
r
(
r
)
p_r(r)
pr(r)的图像,通过变换
T
T
T,生成的新图像其灰度值的分布为均匀分布。如下图所示。
对于图像,
T
T
T的离散形式为:
s
k
=
T
(
r
k
)
=
(
L
−
1
)
∑
j
=
0
k
p
r
(
r
j
)
k
=
0
,
1
,
2
,
.
.
.
,
L
−
1
s_k=T(r_k)=(L-1) \sum_{j=0}^k p_r(r_j) \qquad k=0,1,2,...,L-1
sk=T(rk)=(L−1)j=0∑kpr(rj)k=0,1,2,...,L−1
通过该变换,我们可以将任意一幅图像变换为近似均匀分布,称之为直方图均衡化。图像均衡化主要用于对比度增强,呈现更多的细节。另外,该方法完全不需要设置参数,不需要额外的人为干预,是全自动化的。但需要注意的是,在均衡化过程中由于近似的存在(求得的亮度值通常为分数,我们需要将其近似为最接近的整数亮度级别),求得的分布不像连续函数那样呈现真正的均匀分布。
什么时候使用直方图均衡化?
当原图像亮度值的动态范围很小,需要增强图像的对比度时,可以采用直方图均衡化,将亮度值扩展到整个范围。
自适应直方图均衡化
经典的直方图均衡算法对整幅图像的像素使用相同的变换,对于像素值分布比较均衡的图像来说效果不错。但如果图像中包含明显亮的或者暗的区域,这些部分的对比度不能得到增强。
自适应直方图均衡化(Adaptive histogram equalization / AHE)通过计算图像多个局部区域的直方图,适用于提高图像的局部对比度和细节。