【数字图像处理】 直方图的均衡与规定化

很多情况下,图像的灰度级集中在较窄的区间,引起图像细节模糊。通过直方图处理可以明晰图像细节,突出目标物体,改善亮度比例关系,增强图像对比度。直方图处理基于概率论。
直方图处理通常包括直方图均衡化和直方图规定化。直方图均衡化可实现图像的自动增强,但效果不易控制,得到的是全局增强的结果。直方图规定化可实现图像的有选择增强,只要给定规定的直方图,即可实现特定增强的效果。

直方图均衡化

直方图均衡化借助灰度统计直方图和灰度累积直方图来进行。

灰度统计直方图

灰度统计直方图反映了图像中不同灰度级出现的统计情况。灰度统计直方图是一个一维离散函数,可表示为(h(k) = n_k, k = 0,1,...L-1),其中k为某个灰度级,L为灰度级的数量,最大取256,(n_k)为具有第k级灰度值的像素的数目。

灰度直方图

归一化概率
灰度统计直方图的归一化概率表达形式给出了对(s_k)出现概率的一个估计,可表示为

[p_s(s_k) = n_k / N, k = 0, 1, 2.., L-1 ]

式中,k为某个灰度级;L为灰度级的数量,最大取256;(s_k)为第k级灰度值的归一化表达形式,(s_k = k / 255),故(s_k in [0,1])(n_k)为具有第k级灰度值的像素的数目;N为图像中像素的总数,故((n_k / N)in [0,1])

灰度累计直方图

灰度累积直方图反映了图像中灰度级小于或等于某值的像素的个数。灰度累积直方图是一个一维离散函数,可表示为

[H(k) = sum_{i = 0} ^k n_i, k = 0, 1, 2.., L-1 ]

式中,k为某个灰度级;L为灰度级的数量,最大取256;(n_i)为具有第i级灰度值的像素的数目。

累积分布函数可以表示为:

[t_k = sum ^k _{i=0}p_s(s_i) ]

相对的,灰度累积直方图的归一化表示如下图:

原理步骤

直方图均衡化主要用于增强动态范围偏小的图像的反差。其基本思想为把原图像的直方图转换为均匀分布的形式,增加像素灰度值的动态范围,增强图像整体对比度。
直方图均衡化的算法步骤为:

  1. 列出原始图像的灰度级k,k=0,1,2,…,L-1,L为灰度级的数量;

  2. 列出原始图像第k级灰度值的归一化表达形式(s_k)

  3. 统计各灰度级的像素数目(n_k,k=0,1,2,…,L-1)

  4. 得到灰度统计直方图的归一化概率表达形式:(p_s(s_k)=n_k/N)

  5. 画出基于累积分布函数计算灰度累积直方图(E(s_i) = sum ^k _{i=0}p_s(s_i))

  6. 进行取整扩展,计算映射后输出图像各灰度级对应灰度值的归一化表达形式(t_k)(t_k=INT((L-1)E(s_k)+0.5)/255),其中,INT为取整函数;

  7. 确定映射关系(s_k→t_k)

  8. 统计映射后各灰度级的像素数目(n_k)

  9. 得到新的灰度统计直方图的归一化概率表达形式:(p_t(t_k)=n_k/N),N为输出图像的像素数目,即原始图像的像素数目。

列表计算

现有一张64*64的8比特灰度图像,其灰度统计直方图如图所示,对其进行直方图均衡化:

其直方图均衡化计算列表如下图所示:

从结果可以看出,均衡化后的图像对比度增加,图像细节比较清晰,反映在其灰度统计直方图上就是像素占据灰度值允许的整个范围,分布比较均衡。

直方图均衡的缺点

综上所述,直方图均衡化的优点是能够增强整个图像的对比度。其缺点主要包括

  1. 增强效果不易控制,处理的结果总是得到全局均匀化的直方图。
  2. 均衡化图像的动态范围扩大,本质上是扩大了量化间隔,但量化级别(灰度级)反而减少了,导致某些图像细节消失。
  3. 对于直方图存在高峰的图像,经处理后对比度可能过分增强。
  4. 导致出现伪轮廓;原来灰度值不同的像素经过处理后可能变为相同,从而形成一片灰度值相同的区域,各区域之间有明显的边界,导致出现伪轮廓。

直方图规定化

直方图均衡化处理的结果总是得到全局均匀化的直方图,实际中有时需要变换直方图使之成为某种需要的形状,此时,可以采用比较灵活的直方图规定化方法。

原理步骤

直方图规定化是指通过灰度映射函数,将灰度直方图改造成所希望的直方图,从而有选择地增强某个灰度值范围内的对比度,使图像灰度值的分布满足特定的要求。
直方图规定化的算法步骤为:

  1. 列出原始图像的灰度级k,k=0,1,2,…,L-1,L为灰度级的数量;
  2. 出原始图像第k级灰度值的归一化表达形式sk;
  3. 统计各灰度级的像素数目(n_k),k=0,1,2,…,L-1;
  4. 得到灰度统计直方图的归一化概率表达形式:(p_s(s_k)=n_k/N),N为原始图像的像素数目;
  5. 基于累积分布函数计算灰度累积直方图:;
  6. 列出规定化图像的灰度级l,l=0,1,2,…,M-1,M为灰度级的数量;
  7. 列出规定化图像第l级灰度值的归一化表达形式(t_l)
  8. 规定直方图,即得到规定化图像的灰度统计直方图的归一化概率表达形式:(p_t(t_l)=n_l/N)
  9. 基于累积分布函数计算规定化图像的灰度累积直方图:(E(t_l) = sum ^l _{i=0}p_t(t_i));
  10. 采用灰度映射规则,计算映射后输出图像各灰度级对应灰度值的归一化表达形式(t_k)
  11. 确定映射关系(s_k→t_k)
  12. 统计映射后各灰度级的像素数目nl;
  13. 得到新的灰度统计直方图的归一化概率表达形式:(p_t(t_l)=n_l/N),N为输出图像的像素数目,即原始图像的像素数目。

灰度映射规则是直方图规定化的关键。由于存在取整误差的影响,灰度映射规则的好坏在离散空间尤其重要。常用的灰度映射规则包括单映射规则(SML)和组映射规则(GML)。

单映射规则(Single Mapping Law, SML)要求k从小到大变化,依次找到能使下式最小的l。对于每组k和l,分别将(p_s(s_k))映射到(p_t(t_l))。该方法简单直观,但有时会产生较大的取整误差。

直方图均衡化处理的结果总是得到全局均匀化的直方图,实际中有时需要变换直方图使之成为某种需要的形状,此时,可以采用比较灵活的直方图规定化方法。

原理步骤

直方图规定化是指通过灰度映射函数,将灰度直方图改造成所希望的直方图,从而有选择地增强某个灰度值范围内的对比度,使图像灰度值的分布满足特定的要求。
直方图规定化的算法步骤为:

  1. 列出原始图像的灰度级k,k=0,1,2,…,L-1,L为灰度级的数量;
  2. 出原始图像第k级灰度值的归一化表达形式sk;
  3. 统计各灰度级的像素数目(n_k),k=0,1,2,…,L-1;
  4. 得到灰度统计直方图的归一化概率表达形式:(p_s(s_k)=n_k/N),N为原始图像的像素数目;
  5. 基于累积分布函数计算灰度累积直方图:;
  6. 列出规定化图像的灰度级l,l=0,1,2,…,M-1,M为灰度级的数量;
  7. 列出规定化图像第l级灰度值的归一化表达形式(t_l)
  8. 规定直方图,即得到规定化图像的灰度统计直方图的归一化概率表达形式:(p_t(t_l)=n_l/N)
  9. 基于累积分布函数计算规定化图像的灰度累积直方图:(E(t_l) = sum ^l _{i=0}p_t(t_i));
  10. 采用灰度映射规则,计算映射后输出图像各灰度级对应灰度值的归一化表达形式(t_k)
  11. 确定映射关系(s_k→t_k)
  12. 统计映射后各灰度级的像素数目nl;
  13. 得到新的灰度统计直方图的归一化概率表达形式:(p_t(t_l)=n_l/N),N为输出图像的像素数目,即原始图像的像素数目。

灰度映射规则是直方图规定化的关键。由于存在取整误差的影响,灰度映射规则的好坏在离散空间尤其重要。常用的灰度映射规则包括单映射规则(SML)和组映射规则(GML)。

单映射规则(Single Mapping Law, SML)要求k从小到大变化,依次找到能使下式最小的l。对于每组k和l,分别将(p_s(s_k))映射到(p_t(t_l))。该方法简单直观,但有时会产生较大的取整误差。

式中,L和M分别为原始图像和规定化图像的灰度级的数量,且L≥M。

组映射规则(Group Mapping Law, GML)效果较好。设有一整数函数(I(l)),l=0,1,…,M-1,满足下式子:

确定使下面公式的最小的整数函数(I(l))。若(l=0),则将i从0到I(0)的(p_s(si))映射到(p_t(t_0));若(l≥1),则将i从(I(l-1)+1)(I(l))(p_s(s_i))映射到(p_t(t_l))

列表计算

有一张64×64的8比特灰度图像,其灰度统计直方图和规定图像的灰度统计直方图如下图所示,对其进行规定化:

直方图规定化的步骤和结果如下所示:

其中,SML和GML的计算列表如下:

绘图计算

直方图规定化的列表计算方式不是很直观,一种更加直观和简单的方式是绘图计算方式。
采用绘图计算方式进行计算,将直方图画成一长条,每一段对应直方图中的一项,整个长条表达了累积直方图。
SML映射规则绘图计算示例如下图所示,各点映射关系由图中实线刻画。SML映射规则取原始累积直方图的各项依次向规定累积直方图映射,每次都选择最接近的数值,即遵循最短或者说最直的连线。
(1)0.19与0.20的连线(实线)比0.19与其他点的连线都更短,故0.19映射到0.20;
(2)0.44与0.20的连线(实线)比0.44与0.80的连线(虚线)更短,故0.44映射到0.20;
(3)0.65与0.80的连线(实线)比0.65与其他点的连线都更短,故0.65映射到0.80;
(4)0.81与0.80的连线(实线)比0.81与其他点的连线都更短,故0.81映射到0.80;
(5)0.89与0.80的连线(实线)比0.89与1.00的连线(虚线)更短,故0.89映射到0.80;
(6)0.95与1.00的连线(实线)比0.95与其他点的连线都更短,故0.95映射到1.00;
(7)0.98与1.00的连线(实线)比0.98与其他点的连线都更短,故0.98映射到1.00;
(8)1.00与1.00的连线(实线)比1.00与其他点的连线都更短,故1.00映射到1.00。

GML映射规则绘图计算示例如下图所示,各点映射关系由图中实线刻画。
GML映射规则取规定化累积直方图的各项依次向原始累积直方图映射,每次都选择最接近的数值,即遵循最短或者说最直的连线。
(1)0.20与0.19的连线(实线)比0.20与0.44的连线(虚线)更短,故0.20映射到0.19,因此,原始累积直方图的第1项映射到规定化累积直方图的第1项;
(2)0.80与0.81的连线(实线)比0.80与0.65的连线(虚线)和0.80与0.89的连线(虚线)更短,故0.80映射到0.81,因此,原始累积直方图的第2、3、4项映射到规定化累积直方图的第2项;
(3)1.00与1.00的连线(实线)比1.00与其他点的连线都更短,故1.00映射到1.00,因此,原始累积直方图的第5、6、7、8项映射到规定化累积直方图的第3项。

下图为直方图规定化示例:

两种映射比较

  1. 映射效果:
    SML映射规则是有偏的映射规则,一些对应灰度级被有偏地映射到接近计算开始的灰度级。GML映射规则是统计无偏的映射规则。
  2. 映射误差
    映射误差用对应映射间数值的差值的绝对值的和来度量,和值越小,映射效果越好。理想情况下,和值为0。
    以SML映射规则为例,映射误差=|0.44-0.20|+|(0.89-0.44)-(0.80-0.20)|+|(1.00-0.89)-(1.00-0.80)|=0.48。
    以GML映射规则为例,映射误差=|0.20-0.19|+|(0.80-0.20)-(0.81-0.19)|+|(1.00-0.80)-(1.00-0.81)|=0.04。
    可见,GML映射规则产生的误差小于SML映射规则产生的误差
  3. 误差期望值
    SML映射规则的期望误差大于等于GML映射规则的期望误差,因此,GML映射规则总会得到比SML映射规则更接近规定直方图的结果。
原文地址:https://www.cnblogs.com/recoverableTi/p/13294497.html