直方图均衡化

引言

图像的空域处理是一种重要的图像处理技术,这类方法直接以图像的像素操作为基础,主要分为灰度变换空域滤波两大类,直方图均衡化(Histogram equalization)就是一种常用的灰度变换方法。

直方图

对于灰度级(intensity levels)范围为 [ 0 , L − 1 ] [0, L-1] [0,L1]的数字图像,其直方图可以表示为一个离散函数 h ( r k ) = n k h(r_k)=n_k h(rk)=nk, 其中 r k r_k rk是第k级灰度值(intensity value), n k n_k nk是图像中灰度值为 r k r_k rk的像素个数,也就是说,图像的灰度直方图表征的是该图像的灰度分布。在实际应用中,通常对直方图进行归一化再进行后续处理,假设灰度图像的维数是M×N,MN表示图像的像素总数,则归一化直方图可以表示为
p ( r k ) = n k / M N , k = 0 , 1 , … , L − 1 p(r_k)=n_k/MN,k=0,1,…,L-1 p(rk)=nk/MNk=0,1,,L1也就是说, p ( r k ) p(r_k) p(rk)表示灰度级 r k r_k rk在图像中出现概率的估计,归一化直方图所有分量之和等于1

直方图均衡化

1. 问题描述

通常,暗图像直方图的分量集中在灰度较低的一端,而亮图像直方图分量偏向于灰度较高的一端,如下图
图1 4种基本的图像类型:暗图像、亮图像、低对比度图像、高对比度图像及其对应的直方图
从图中可以得到这样的结论:如果一幅图像的灰度直方图几乎覆盖了整个灰度的取值范围,并且除了个别灰度值的个数较为突出,整个灰度值分布近似于均匀分布,那么这幅图像就具有较大的灰度动态范围和较高的对比度,同时图像的细节更为丰富。已经证明,仅仅依靠输入图像的直方图信息,就可以得到一个变换函数,利用该变换函数可以将输入图像达到上述效果,该过程就是直方图均衡化

下面从数学的角度理解直方图均衡化。假设待处理图像为灰度图像, r r r表示待处理图像的灰度,取值范围为 [ 0 , L − 1 ] [0,L-1] [0,L1],则 r = 0 r=0 r=0表示黑色, r = L − 1 r=L-1 r=L1表示白色,直方图均衡化的过程对应于一个变换 T T T (1) s = T ( r ) , 0 ≤ r ≤ L − 1 i s=T(r), 0 \leq r \leq L-1 i\tag{1} s=T(r),0rL1i(1)也就是说,对于输入图像的某个灰度值 r r r,可以通过变换 T T T得到均衡化后的图像对应位置的灰度值 s s s。其中变换 T T T满足以下条件:
(a) T ( r ) T(r) T(r) [ 0 , L − 1 ] [0,L-1] [0,L1]上严格单调递增;
(b) 当 0 ≤ r ≤ L − 1 0 \leq r \leq L-1 0rL1时, 0 ≤ T ( r ) ≤ L − 1 0 \leq T(r) \leq L-1 0T(r)L1

条件(a)中要求 T ( r ) T(r) T(r)严格单调递增是为了保证输出灰度值与输入灰度值一一对应,同时像素灰度值之间的相对大小关系不变,这样可以避免反变换时出现问题;条件(b)保证了输出图像的灰度范围与输入图像相同。实际中处理的图像通常是整数灰度值,必须把所有结果四舍五入为最接近的整数值。因此,当严格单调条件不满足时,使用寻找最接近整数匹配的方法解决反变换不唯一的问题。

2. 均衡化推导

首先考虑连续形式,一幅灰度图像的灰度级可以看作区间 [ 0 , L − 1 ] [0,L-1] [0,L1] 内的随机变量,因此可用其概率密度函数(PDF)描述。假设 p r ( r ) p_r(r) pr(r) p s ( s ) p_s(s) ps(s) 分别表示随机变量 r r r s s s 的PDF, p r ( r ) p_r(r) pr(r) 和变换 T T T 已知,且 T ( r ) T(r) T(r) 在定义域内连续可微,则变换后 s s s 的PDF可由下式得到: (2) p s ( s ) = p r ( r ) ∣ d r d s ∣ p_s(s)=p_r(r)|\frac{dr}{ds}|\tag{2} ps(s)=pr(r)dsdr(2)

此处用到了概率论中有关随机变量函数分布的相关定理:设 ξ \xi ξ 是连续型随机变量,其概率密度函数为 p ( x ) p(x) p(x),又函数 y = f ( x ) y=f(x) y=f(x)
严格单调,其反函数 h ( y ) h(y) h(y) 有连续导数,则 η = f ( ξ ) \eta =f(\xi) η=f(ξ) 也是一个连续型随机变量,其概率密度函数为
ψ ( y ) = { p [ h ( y ) ] ⋅ ∣ h ′ ( y ) ∣ , α &lt; y &lt; β 0 , 其 他 \psi(y)= \begin{cases} p[h(y)]\cdot|h&#x27;(y)|&amp;,\alpha&lt;y&lt;\beta\\ 0&amp;,其他 \end{cases} ψ(y)={p[h(y)]h(y)0,α<y<β, 其中 α = m i n { f ( − ∞ ) , f ( + ∞ ) } β = m a x { f ( − ∞ ) , f ( + ∞ ) } \begin{aligned} \alpha=min\{f(-\infty),f(+\infty)\}\\ \beta =max\{f(-\infty),f(+\infty)\} \end{aligned} α=min{f(),f(+)}β=max{f(),f(+)}

由此看到,输出图像灰度 s s s 的PDF就由输入图像灰度 r r r 的PDF和变换 T T T 得到。

图像处理中一个重要的变换函数构造如下 (3) s = T ( r ) = ( L − 1 ) ∫ 0 r p r ( w ) d x s=T(r)=(L-1)\int^r_0p_r(w){\rm d}x\tag{3} s=T(r)=(L1)0rpr(w)dx(3)
其中, w w w是形式积分变量,公式右边是随机变量 r r r的累积分布函数(CDF),可以看到,(3)式完全满足前述的条件(a)和(b)。

为寻找变换后随机变量 s s s 的概率密度函数 p s ( s ) p_s(s) ps(s),由(2)式得,
(4) 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{{\rm d}s}{{\rm d}r}&amp;=\frac{{\rm d}T(r)}{{\rm d}r}\\ &amp;=(L-1)\frac{\rm d}{{\rm d}r}\int^r_0p_r(w){\rm d}w=(L-1)p_r(r)\tag{4} \end{aligned} drds=drdT(r)=(L1)drd0rpr(w)dw=(L1)pr(r)(4)将(4)式代入(2)式得
(5) 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)&amp;=p_r(r)|\frac{{\rm d}r}{{\rm d}s}|\\ &amp;=p_r(r)\frac{1}{(L-1)p_r(r)}=\frac{1}{L-1}, 0\le s\le L-1 \tag{5} \end{aligned} ps(s)=pr(r)dsdr=pr(r)(L1)pr(r)1=L11,0sL1(5)由(5)式可知, p s ( s ) p_s(s) ps(s) 为均匀分布,也就是说,输入图像的PDF经过(3)式中的变换 T T T 后得到的随机变量 s s s 服从均匀分布。
结论:图像均衡化变换 T ( r ) T(r) T(r) 取决于 p r ( r ) p_r(r) pr(r), 但得到的 p s ( s ) p_s(s) ps(s) 始终是均匀的,与 p r ( r ) p_r(r) pr(r) 的形式无关。
对于离散形式,其推导过程与连续形式相似,用概率直方图和求和运算分别代替概率密度函数和积分运算,可得(3)式的离散形式
(6) s k = T ( r k ) = ( L − 1 ) ∑ j = 0 k p r ( r j ) = L − 1 M N ∑ j = 0 k n j , k = 0 , 1 , 2 , ⋯ &ThinSpace; , L − 1 \begin{aligned} s_k&amp;=T(r_k)\\ &amp;=(L-1)\sum ^k _{j=0}p_r(r_j)=\frac{L-1}{MN}\sum ^k_{j=0}n_j,k=0,1,2,\cdots,L-1\tag{6} \end{aligned} sk=T(rk)=(L1)j=0kpr(rj)=MNL1j=0knj,k=0,1,2,,L1(6)其中, M N MN MN为图像像素总数, n k n_k nk 是灰度为 r k r_k rk 的像素个数, L L L 是图像可能的灰度级数量(例如对于8比特图像 L = 256 L=256 L=256)。通过(6)式,输出图像中像素的灰度值可由输入图像中像素灰度 r k r_k rk 映射为 s k s_k sk 后得到。(6) 式中的变换(映射) T ( r k ) T(r_k) T(rk) 称为直方图均衡或直方图线性变换。

3. 例子

假设一幅大小为 64 × 64 64\times64 64×64 像素的3比特图像 ( L = 8 ) (L=8) (L=8) 的灰度分布如表1所示,其中灰度级是范围 [ 0 , L − 1 ] = [ 0 , 7 ] [0,L-1]=[0,7] [0,L1]=[0,7] 中的整数。

r k r_k rk n k n_k nk p k ( r k ) = n k / M N p_k(r_k)=n_k/MN pk(rk)=nk/MN
r 0 = 0 r_0=0 r0=07900.19
r 1 = 1 r_1=1 r1=110230.25
r 2 = 2 r_2=2 r2=28500.21
r 3 = 3 r_3=3 r3=36560.16
r 4 = 4 r_4=4 r4=43290.08
r 5 = 5 r_5=5 r5=52450.06
r 6 = 6 r_6=6 r6=61220.03
r 7 = 7 r_7=7 r7=7810.02

则直方图均衡化的值可由 (6) 式计算得到,例如
s 0 = T ( r 0 ) = 7 ∑ j = 0 0 p r ( r j ) = 7 p r ( r 0 ) = 7 × 0.19 = 1.33 \begin{aligned} s_0&amp;=T(r_0)=7\sum^0_{j=0}p_r(r_j)\\ &amp;=7p_r(r_0)=7\times 0.19=1.33 \end{aligned} s0=T(r0)=7j=00pr(rj)=7pr(r0)=7×0.19=1.33同理, s 1 = T ( r 1 ) = 7 ∑ j = 0 1 p r ( r j ) = 7 p r ( r 0 ) + 7 p r ( r 1 ) = 7 × 0.19 + 7 × 0.25 = 3.08 \begin{aligned} s_1&amp;=T(r_1)=7\sum^1_{j=0}p_r(r_j)\\ &amp;=7p_r(r_0)+7p_r(r_1)=7\times 0.19+7\times 0.25=3.08 \end{aligned} s1=T(r1)=7j=01pr(rj)=7pr(r0)+7pr(r1)=7×0.19+7×0.25=3.08以此类推计算求得所有 s k s_k sk 值并将其近似为最接近的整数,结果如下:
s 0 = 1.33 → 1 , s 4 = 6.23 → 6 s 1 = 3.08 → 3 , s 5 = 6.65 → 7 s 2 = 4.55 → 5 , s 6 = 6.86 → 7 s 3 = 5.67 → 6 , s 7 = 7.00 → 7 \begin{aligned} &amp;s_0=1.33\rightarrow 1,&amp;&amp;s_4=6.23\rightarrow 6\\ &amp;s_1=3.08\rightarrow 3, &amp;&amp;s_5=6.65\rightarrow 7\\ &amp;s_2=4.55\rightarrow 5, &amp;&amp;s_6=6.86\rightarrow 7\\ &amp;s_3=5.67\rightarrow 6, &amp;&amp;s_7=7.00\rightarrow 7 \end{aligned} s0=1.331,s1=3.083,s2=4.555,s3=5.676,s4=6.236s5=6.657s6=6.867s7=7.007可以看到,均衡化后的图像只有5个灰度级, r 0 = 0 r_0=0 r0=0 被映射为 s 0 = 1 s_0=1 s0=1,在均衡化后的图像中有790个像素取该值(见表1),有1023个像素取 s 1 = 3 s_1=3 s1=3,有850个像素取 s 2 = 5 s_2=5 s2=5,有656+329=985个像素取6,因为 r 3 r_3 r3 r 4 r_4 r4 都被映射为6这个值,同理,有245+122+81=448个像素取7。
因为直方图是PDF的近似,并且处理后不产生新的灰度级,所以在实际的直方图均衡化很少能够得到完全平坦的直方图。在离散情况下,通常不能证明离散的直方图均衡化能得到均匀的直方图。尽管如此,均衡化有助于图像直方图的延展,均衡化后图像的灰度级范围更宽,有效地增强了图像的对比度。同时,上述方法完全是“自动”的,仅利用输入图像的直方图信息,无需更多的参数。

Reference

Gonzalez, Rafael C., and Richard E. Woods. “Digital image processing.”

  • 141
    点赞
  • 427
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值