【数字图像处理】直方图均衡化
【数字图像处理】直方图均衡化
直方图
像这样形状的数据统计图就叫做直方图。
不严谨的来说,簇状柱状图也可以看成直方图,我们之后不进行区别。
灰度直方图
横轴为灰度值,纵轴为灰度值在图中的频数。
e.g. 如下图
设灰度级为2,最大灰度值为1
n(0)=13
n(1)=7
归一化
即令纵轴为频率,横轴上将最大灰度值映射到1.
均衡化
目的:让各个灰度值的频率大致相同(除了0),也就是所谓的分布均匀。
这个过程,我们需要求出变换后各个灰度值所对应的新频数。
方法:把灰度相近的值放到一起,让矮的“长条”变高。
虽然有一些灰度值被我们丢弃了,但是留下的灰度值看起来更平坦了。需要注意的是,我们的转移不应该改变灰度的顺序,原来的灰度值为0的“长条”不可以越过灰度值为1的长条到灰度值为2的上面去。
理想情况:我们能把直方图完全平坦化,也就是变换后的各灰度值频率完全一致。
归一化后,根据\(\int^1_0p(r)=1\)可得\(p(r)=1\)。
设变换前的灰度r转移到灰度为s的“长条”上了。
我们设这个变换为\(s=T(r)\),显然,只要找到这个变换的具体表达式,我们就能实现均衡化了。
\(0≤r,s≤1\)
分布函数:\(F_s(s)=∫_{-∞}^sp_s(s)ds\)
我们认为理想情况下,分布函数在改变前后不变:\(F_r(r) =∫_{-∞}^rp_r (r)dr=∫_{-∞}^sp_s(s)ds\)
两边对s求导得:\(p_s(s)=\frac{d[\int^r_{-\infty}p_r(r)dr]}{dr}\cdot\frac{dr}{ds}=p_r\frac{dr}{ds}\)
假设:\(r=T^{-1}(s) p_s(s)=p_r\frac{d}{ds}\big(T^{-1}(s)\big)\)
将\(p_s(s)=1\)代入得:\(ds=p_rdr\)
两边积分:\(s=\int_0^rp_rdr=T(r)=\sum_0^rp_i\)
这样我们就求出了\(T(r)\)。
例子
64*64的图片,灰度级为8。
r0 | r1 | r2 | r3 | r4 | r5 | r6 | r7 | |
---|---|---|---|---|---|---|---|---|
n | 790 | 1023 | 850 | 656 | 329 | 245 | 122 | 81 |
p | 0.19 | 0.25 | 0.21 | 0.16 | 0.08 | 0.06 | 0.03 | 0.02 |
求出ri变换后对应的归一化灰度值(用上面求出的\(s=\int_0^rp_rdr=T(r)=\sum_0^rp_i\))。
s | 0.19 | 0.44 | 0.65 | 0.81 | 0.89 | 0.95 | 0.98 | 1.00 |
归一化的逆过程,求出实际的灰度值。
Ts | 1.33 | 3.08 | 4.55 | 5.67 | 6.23 | 6.65 | 6.86 | 7.00 |
四舍五入求整⌊7s+0.5⌋。
si | 1 | 3 | 5 | 6 | 6 | 7 | 7 | 7 |
把灰度值相同的频数与频率各自相加。
790 | 1023 | 850 | 985 | 448 | ||||
0.19 | 0.25 | 0.21 | 0.24 | 0.11 | ||||
si | s0 | s1 | s2 | s3 | s4 | s5 | s6 | s7 |
n | 0 | 790 | 0 | 1023 | 0 | 850 | 985 | 448 |
p | 0 | 0.19 | 0 | 0.25 | 0 | 0.21 | 0.24 | 0.11 |
可以看出来,虽然不是完全理想,但是比变换前,直方图更平坦了。