《数字图像处理(第三版)》 第三章 数字图像处理 笔记4 (直方图处理 - 直方图匹配)

第 3 章 灰度变换与空间滤波

3.3 直方图处理

3.3.2 直方图匹配(规定化)

直方图均衡能自动地确定变换函数,该函数寻求产生有均匀直方图的输出图像,需要自动增强时,这是一个好方法。

但是在某些情况下,采用均匀直方图的基本增强并不是最好的方法。有时我们希望处理后的图像具有规定的直方图形状可能更有用,这种用于产生处理后有特殊直方图的方法称为 直方图匹配直方图规定化

设连续灰度 rrzz (视为连续随机变量),并令 pr(r)p_r(r)pz(z)p_z(z) 表示它们所对应的连续概率密度函数。在这种表示法中,rrzz 分别表示输入图像和输出(已处理)图像的灰度级。我们可以由给定的输入图像估计 pr(r)p_r(r),而 pz(z)p_z(z) 是我们希望输出图像所具有的指定概率密度函数。

ss 是一个具有如下特性的随机变量:

s=T(r)=(L1)0rpr(ω)dω(1) s = T(r) = (L-1) \int_0^r {p_r(\omega)} \, {\rm d} \omega \qquad (1)

ss 是通过直方图均衡算法映射出的输出图像中的灰度级。式中,ω\omega 为积分假变量。

接着定义一个具有如下特性的随机变量 zz

G(z)=(L1)0zpz(t)dt=s(2) G(z) = (L-1) \int_0^z {p_z(t)} \, {\rm d} t = s \qquad (2)

zz 是通过直方图匹配算法映射出的输出图像中的灰度级。式中,tt 为积分假变量。由这两个等式可得 G(z)=T(r)G(z) = T(r) ,因此 zz 必须满足下列条件:

z=G1[T(r)]=G1(s)(3) z = G^{-1}[T(r)] = G^{-1}(s) \qquad (3)

总结一下,可通过下列步骤,由一幅给定图像得到一幅其灰度级具有指定概率密度函数的图像:

  1. 由输入图像得到 pr(r)p_r(r) ,并由式 (1) 求得 ss 的值。
  2. 使用式 (2) 中指定的 PDF 求得变换函数 G(z)G(z)
  3. 求得反变换函数 z=G1(s)z = G^{-1}(s);因为 zz 是由 ss 得到的,所以该图像是 sszz 的映射,而后者正是我们期望的值。
  4. 首先用式 (1) 对输入图像进行均衡得到输出图像;该图像的像素值是 ss 值。对均衡后的图像中具有 ss 值得每个图像执行反映射 z=G1(s)z = G^{-1}(s),得到输出图像中的相应像素。当所有像素都处理完后,输出图像 PDF 将等于指定的 PDF。

在实践中,常见的困难是寻找 T(r)T(r)G1G^{-1} 的有意义表达式。所幸的是,在处理离散量时,问题可大大简化。


离散形式

式 (1) 的离散形式是直方图均衡变换,即:

sk=T(rk)=(L1)j=0kpr(rj)=L1MNj=0knj,k=0,1,2,,L1(4) s_k = T(r_k) = (L-1)\sum_{j=0}^k{p_r(r_j)} = \frac{L-1}{MN}{\sum_{j=0}^k{n_j}}, \, k=0, 1, 2, \cdots, L-1 \qquad (4)

式中 MNMN 是图像的像素总数,njn_j 是具有灰度值 rjr_j 的像素值,LL 是图像中可能的灰度级数。类似地,给出一个规定的 sks_k 值,式 (2) 的离散形式涉及计算变换函数

G(zq)=(L1)j=0qpzzi(5) G(z_q) = (L-1)\sum_{j=0}^q{p_z{z_i}} \qquad (5)

对一个 qq 值,有

G(zq)=sk(6) G(z_q) = s_k \qquad (6)

式中,pz(zi)p_z(z_i) 是规定直方图的第 ii 个值。与前面一样,用反变换找到期望的值 zqz_q

zq=G1(sk)(7) z_q = G^{-1}(s_k) \qquad (7)

可以总结 直方图规定化 过程如下:

  1. 计算给定图像的直方图 pr(r)p_r(r) ,并用它寻找式 (4) 的直方图均衡变换。把 sks_k 四舍五入为范围 [0,L1][0, L-1] 内的整数。
  2. 用式 (5) 对 q=0,1,2,,L1q = 0, 1, 2, \cdots, L-1 计算变换函数 GG 的所有值,其中 pz(zi)p_z(z_i) 是规定直方图的值。把 GG 的值四舍五入为范围 [0,L1][0, L-1] 内的整数。将 GG 的值存储在一个表中。
  3. 对每个值 sks_kk=0,1,2,,L1k = 0, 1, 2, \cdots, L-1 ,使用步骤 2 存储的 GG 值寻找相应的 zqz_q 值,以使 G(zq)G(z_q) 最接近 sks_k ,并存储这些从 sszz 的映射。当满足给定 sks_kzqz_q 值多于一个时(即映射不唯一时),按惯例选择最小的值
  4. 先对输入图像进行均衡,然后使用步骤 3 找到的映射把该图像中每个均衡后的像素值 sks_k 映射为直方图规定化后的图像中的相应 zqz_q 值,形成直方图规定化后的图像。如连续情况那样,均衡输入图像的中间步骤是概念上的。合并两个变换函数 TTG1G^{-1} 可跳过这一步。

对照图像进行步骤说明

《数字图像处理(第三版)》 第三章 数字图像处理 笔记4 (直方图处理 - 直方图匹配)

如上图所示为直方图规定化的示意图。(A) 图为原图像的灰度值的概率密度函数曲线图,通过积分得到其累计分布函数为 (B) 图中的红色曲线;© 图为期望得到的图像的灰度值的概率密度函数曲线图,通过积分得到其累积分布函数为 (B) 图中的黑色曲线;令 s=T(r)s = T(r)v=G(z)v = G(z),通过令 vk=sjv_k = s_j 得到 ssvv 的映射关系,从而就能得到原图像中的灰度值 rjr_j 与直方图规定化后得到的图像灰度值 zkz_k 之间的映射关系。

即:设 G1G^{-1} 存在,用下列步骤可由输入图像得到一个由规定概率密度函数的图像:

  1. 求得变换函数 T(r)T(r)
  2. 求得变换函数 G(z)G(z)
  3. 求得反变换函数 G1G^{-1}
  4. 对输入图像所有像素应用式 z=G1(s)=G1[T(r)]z = G^{-1}(s) = G^{-1}[T(r)] 得到输出图像;

以上步骤得到的新图像灰度级具有事先规定的概率密度函数 pz(z)p_z(z)

数字图像直方图规定化的实现

  1. 对于数字图像,灰度级 rj{r_j}sj{s_j}zj(j=0,1,2,,L1){z_j} \, (j=0, 1, 2, \cdots, L-1) 的每一个集合为 L×1L \times 1 维的一维阵列;
  2. 所有从 rrzz 的映射都是给定像素值和这些阵列间的简单查表过程;
  3. 计算每个 rjr_j 对应的 sj=T(r)s_j=T(r) ;计算每个 zjz_j 对应的 vj=G(z)v_j = G(z)
  4. 对每一个 sjs_j ,寻找最接近的 vkv_k 。该 vkv_k 对应的 zkz_k 就是 rjr_j 应映射为的灰度值。

实例

《数字图像处理(第三版)》 第三章 数字图像处理 笔记4 (直方图处理 - 直方图匹配)

如图所示是一幅火星表面的探测图,右图为该图像对应的灰度直方图。通过直方图均衡算法得到下图:

《数字图像处理(第三版)》 第三章 数字图像处理 笔记4 (直方图处理 - 直方图匹配)

因为直方图均衡算法是自动的,它根据像素值在原图像中的频率将像素值变换到新图像中对应的像素值,所以在这幅原图像中,暗区域对应的低像素值数量较大,对应的占比也较大,所以在直方图均衡转化后像素值到了较高的水平,如图中所示是大于在 170 左右,而直方图均衡算法中,灰度值是递增的,所以变换后的整幅图像的像素值都较高,从而使得变换后的图像偏亮,这样就损失了很多图像信息。

所以,可以看到某些应用用均匀直方图的基本增强并不是最好的方法。

《数字图像处理(第三版)》 第三章 数字图像处理 笔记4 (直方图处理 - 直方图匹配)

上图是我们所期望的图像的灰度直方图,可以看到这个折线图与原图像的灰度直方图轮廓相近。

《数字图像处理(第三版)》 第三章 数字图像处理 笔记4 (直方图处理 - 直方图匹配)

通过直方图规定化,得到上图所示图像,其直方图如下图所示:

《数字图像处理(第三版)》 第三章 数字图像处理 笔记4 (直方图处理 - 直方图匹配)

要强调直方图规定化在大多数时候都是试凑过程,对于任何一个给定的增强任务都必须借助于实际分析。