直方图匹配(规定化)

直方图匹配

直方图均衡技术,可以自动地确定变换函数,而产生具有均匀直方图的输出图像。但是不同图像出现的问题不尽相同,有时根据图像的某种缺陷,我们需要得到处理后具有特殊直方图的图像。均衡化这样单一的方法显然不能成为万能钥匙。

直方图匹配,又称直方图规定化。与直方图均衡化不同,直方图均衡试图使输出图像具有一个平坦的直方图,而直方图匹配是为了得到一个特定的直方图。


基本原理

直方图规定化的基本思路是:对原图像直方图和目标直方图都做均衡化,变成相同的归一化的均匀直方图。然后以此均匀直方图为媒介,再对原图像做均衡化的逆运算。

设原图像和输出图像的灰度变量分别为rz,并令pr(r)pz(z)表示他们所对应的概率密度函数,分别对rz作如下变换:

T(r)=(L1)r0pr(w)dwG(z)=(L1)z0pz(w)dw

由于两个式子都为均匀化变换,可得T(r)=G(z),因此z满如下条件:
z=G1[T(r)]

在实践中,一个困难是寻找T(r)G1的有意义的表达式。在处理离散变量时,问题可以大大简化。下面的方法仅为了得到一个近似的直方图。为方便起见,我们重写公式如下:
sk=T(rk)=(L1)j=0kpr(rj)=L1MNj=0knj,k=0,1,...,L1

其中MN是图像的像素总数,nj是具有灰度值rj的像素数,L是图像中可能的灰度级数。类似地,对目标直方图随机变量的计算变换函数
G(zq)=(L1)i=0qpz(zi)

对一个q值,有
zq=G1(sk)

实际操作过程中,我们不需要计算G的反变换。因为我们处理的图像灰度级是整数(如8比特图像的灰度级是0到255)。我们可以将G变换存储在一个表中,然后根据给定的sk值,查找存储在表中最匹配的zq值。

实现过程

  1. 计算原图像的直方图pr(r),并寻找直方图均衡变换,得到sk并四舍五入为范围[0,L-1]内的整数。
  2. q=0,1,...,L1计算变换G的所有值,其中pz(zi)是规定直方图的值。把G的值四舍五入为范围[0,L-1]内的整数,并存储在一个表中。
  3. 对每个值s0,s1,...,sL1,使用步骤2中存储的G值寻找相应的zq值,以使G(zq)最接近sk,并存储这些skzq的映射。
  4. 对输入图像进行均衡化,然后使用步骤3找到的映射把该图像中的每个均衡后的像素值sk映射为直方图规定化后的图像中的相应值zq,形成直方图规定化后的图像。

计算例子

设输入为大小为64x64像素的3比特数字图像,其灰度分布、直方图值、均衡化后的值(四舍五入)为:

rk nk pr(rk) sk=7kj=0pr(rj)
r0=0 790 0.19 1
r1=1 1023 0.25 3
r2=2 850 0.21 5
r3=3 656 0.16 6
r4=4 329 0.08 6
r5=5 245 0.06 7
r6=6 122 0.03 7
r7=7 81 0.02 7

设规定直方图为:

zq pz(zq) G(zq)=7qj=0pz(zj)
r0=0 0.00 0
r1=1 0.00 0
r2=2 0.00 0
r3=3 0.15 1
r4=4 0.20 2
r5=5 0.30 5
r6=6 0.20 6
r7=7 0.15 7

将所有的sk值映射到相应的zq值:

sk zq
1 3
3 4
5 5
6 6
7 7

如图显示了变换过程:
直方图匹配(规定化)
虽然图(d)的最终结果并不完全与规定的直方图匹配,但达到了将灰度明确移向灰度级高端的目的。