opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》

目录
图像增强的定义:
图像增强的分类:
空域法:
频域法:
关于空域法分类:
点运算算法定义和分类:
邻域增强算法分类:图像平滑和锐化两种。
1.详谈空域法-->点运算-->灰度变换
(1) 线性变换
(2)分段线性变换
(3) 非线性灰度变换
2.详谈空域法-->点运算-->直方图修整法
(0)直方图的相关术语:
(1) 直方图均衡化
【opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》】(2)直方图规定化
图像增强的定义: 是通过一定手段对原图像附加一些信息或变换数据,有选择地突出图像中感兴趣的特征或者抑制(掩盖)图像中某些不需要的特征,使图像与视觉响应特性相匹配。
图像增强的分类: 在图像增强过程中,不分析图像降质的原因,处理后的图像不一定逼近原始图像。图像增强技术根据增强处理过程所在的空间不同,可分为基于空域的算法和基于频域的算法两大类。
空域法:
空域法对图像中的像素点进行操作,对图像灰度级做运算,用公式描述如下:
g(x,y)=f(x,y)*h(x,y)
其中是f(x,y)是原图像;h(x,y)为空间转换函数;g(x,y)表示进行处理后的图像。
频域法:
基于频域的算法是在图像的某种变换域内对图像的变换系数值进行某种修正,是一种间接增强的算法。
把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。采用低通滤波(即只让低频信号通过)法,可去掉图中的噪声;采用高通滤波法,则可增强边缘等高频信号,使模糊的图片变得清晰。一般做法是对图像傅里叶变换后的频谱进行处理,再逆傅里叶得到新的图像。
关于空域法分类:基于空域的算法分为点运算算法和邻域去噪算法。

  • 点运算算法定义和分类:
定义:目的或使图像成像均匀,或扩大图像动态范围,扩展对比度。
分类:包括灰度级校正、灰度变换和直方图修正等
  • 邻域增强算法分类:图像平滑和锐化两种。
平滑:均值滤波、中值滤波
锐化:常用算法有梯度法、算子、高通滤波、掩模匹配法、统计差值法等
1.详谈空域法-->点运算-->灰度变换 灰度变换可调整图像的动态范围或图像对比度,是图像增强的重要手段之一。
(1) 线性变换
令图像f(i,j)的灰度范围为[a,b],线性变换后图像g(i,j)的范围为[a′,b′],如下图
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

g(i,j)与f(i,j)之间的关系式为:
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

在曝光不足或过度的情况下,图像灰度可能会局限在一个很小的范围内。这时在显示器上看到的将是一个模糊不清、似乎没有灰度层次的图像。采用线性变换对图像每一个像素灰度作线性拉伸,可有效地改善图像视觉效果。
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

(2)分段线性变换
为了突出感兴趣目标所在的灰度区间,相对抑制那些不感兴趣的灰度区间,可采用分段线性变换。如下图所示。
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

设原图像在[0,Mf],感兴趣目标所在灰度范围在[a,b],欲使其灰度范围拉伸到[c,d],则对应的分段线性变换表达式为
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

通过调整折线拐点的位置及控制分段直线的斜率,可对任一灰度区间进行拉伸或压缩。
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

(3) 非线性灰度变换
当用某些非线性函数如对数函数、指数函数等,作为映射函数时,可实现图像灰度的非线性变换。
①对数变换
对数变换的一般表达式为
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

这里a,b,c是为了调整曲线的位置和形状而引入的参数。当希望对图像的低灰度区较大的拉伸而对高灰度区压缩时,可采用这种变换,它能使图像灰度分布与人的视觉特性相匹配。
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

②指数(伽玛)变换
指数变换又称为 伽玛变换 或 幂次变换,指数变换的一般表达式为
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

这里参数a,b,c用来调整曲线的位置和形状。这种变换能对图像的高灰度区给予较大的拉伸。
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

2.详谈空域法-->点运算-->直方图修整法灰度直方图反映了数字图像中每一灰度级与其出现频率间的关系,它能描述该图像的概貌,它是另一种对图像理解的方式。通过观察图像的直方图,我们可以得到关于图像的相反,亮度,强度分布等直观信息,如下图所示:
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

(左边为原图右边为对应的灰色直方图)
上图中我们可以看到原图像及其直方图。(注,这里的直方图是在灰度图像基础上绘制的,而不是彩色图像)。
(0)直方图的相关术语:
  1. BINS: 像素区间组数(上图右侧直方图x轴),假如我们要把0-255不是按照像素分而是按照像素区间分组,0到15,16到31,..... 240到255的像素的数量。那么我们只需要16个值就可以代表这个直方图了。所以我们接下去要做的仅仅是把整个直方图分为16个部分(sub-part)并保证每个部分的值相加起来就是所有像素加起来的总和。这里的每个部分我们称之称为“BIN”。在一开始的例子中,BIN 数量为256(每一个数字代表一个像素),而在我们稍后分隔后的例子里,BIN 的数量就是16 了。BIN 用来代表OpenCV 文档中的术语histSize 。
  2. DIMS:这是我们收集的数据有关参数的个数。在上面这个例子中,我们收集数据只关心一个参数,强度值,这里是1。
  3. RANGE:这是我们想要测量的强度值的范围。通常情况下,范围是 [0,256],即所有的强度值。
通过修改直方图的方法增强图像是一种实用而有效的处理技术。直方图修整法包括直方图均衡化及直方图规定化两类:
(1) 直方图均衡化
直方图均衡化是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

优点:这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
缺点:是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。
使用场景:这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。
下面先讨论连续变化图像的均衡化问题,然后推广到离散的数字图像上。为讨论方便起见,设r和s分别表示归一化了的原图像灰度和经直方图修正后的图像灰度。即opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片
在[0,1]区间内的任一个r值,都可产生一个s值,且opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片
.
T(r)作为变换函数,满足下列条件:
①在0≤r≤1内为单调递增函数,保证灰度级从黑到白的次序不变;
②在0≤r≤1内,有0≤T(r)≤1,确保映射后的像素灰度在允许的范围内。
反变换关系为opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片
,T-1(s)对s同样满足上述两个条件。由概率论理论可知,如果已知随机变量r的概率密度为pr(r),而随机变量s是r的函数,则s的概率密度ps(s)可以由pr(r)求出。假定随机变量s的分布函数用Fs(s) 表示,根据分布函数定义
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

利用密度函数是分布函数的导数的关系,等式两边对s求导,有:
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

可见,输出图像的概率密度函数可以通过变换函数T(r)可以控制图像灰度级的概率密度函数,从而改善图像的灰度层次,这就是直方图修改技术的基础。
从人眼视觉特性来考虑,一幅图像的直方图如果是均匀分布的,即Ps(s)=k(归一化时k=1)时,该图像色调给人的感觉上该图像比较协调。因此要求将原直方图通过T(r)调整为均匀分布的.然后反过来按均衡化的直方图去调整原图像,以满足人眼视觉要求的目的。因为归一化假定Ps(s)=1
,由密度函数则有
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

两边积分得
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

上式表明,当变换函数为r的累积分布函数时,能达到直方图均衡化的目的。对于离散的数字图像,用频率来代替概率,则变换函数T(rk)的离散形式可表示为:
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

上式表明,均衡后各像素的灰度值sk可直接由原图像的直方图算出。一幅图像sk同rk之间的关系称为该图像的累积灰度直方图。
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

下面举例说明直方图均衡过程。例:假定有一幅总像素为n=64×64的图像,灰度级数为8,各灰度级分布列于表中。对其均衡化计算过程如下:
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片


(2)直方图规定化
在某些情况下,并不一定需要具有均匀直方图的图像,有时需要具有特定的直方图的图像,以便能够增强图像中某些灰度级。直方图规定化方法就是针对上述思想提出来的。直方图规定化是使原图像灰度直方图变成规定形状的直方图而对图像作修正的增强方法。可见,它是对直方图均衡化处理的一种有效的扩展。直方图均衡化处理是直方图规定化的一个特例。对于直方图规定化,下面仍从灰度连续变化的概率密度函数出发进行推导,然后推广出灰度离散的图像直方图规定化算法。假设pr(r)和pz(z)分别表示已归一化的原始图像灰度分布的概率密度函数和希望得到的图像的概率密度函数。首先对原始图像进行直方图均衡化,即求变换函数:
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

假定已得到了所希望的图像,对它也进行均衡化处理,即
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

它的逆变换是
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

这表明可由均衡化后的灰度得到希望图像的灰度。
若对原始图像和希望图像都作了均衡化处理,则二者均衡化的ps(s)和pv(v)相同,即都为均匀分布的密度函数。由s代替v 得 z=G-1(s),这就是所求得的变换表达式。根据上述思想,可总结出直方图规定化增强处 理的步骤如下:
①对原始图像作直方图均衡化处理;
②按照希望得到的图像的灰度概率密度函数pz(z),求得变换函数G(z);
③用步骤①得到的灰度级s作逆变换z= G-1(s)。
经过以上处理得到的图像的灰度级将具有规定的概率密度函数pz(z)。采用与直方图均衡相同的原始图像数据(64×64像素且具有8级灰度),其灰度级分布列于表中。给定的直方图的灰度分布列于表中。对应的直方图如下:
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

利用直方图规定化方法进行图像增强的主要困难在于要构成有意义的直方图。图像经直方图规定化,其增强效果要有利于人的视觉判读或便于机器识别。下面是一个直方图规定化应用实例。
opencv-python|opencv-python 详解直方图均衡(一)《图像增强、灰度变换和直方图均衡化关系》
文章图片

图(C)、(c)是将图像(A)按图(b)的直方图进行规定化得到的结果及其直方图。通过对比可以看出图(C)的对比度同图(B)接近一致,对应的直方图形状差异也不大。这样有利于影像融合处理,保证融合影像光谱特性变化小。

    推荐阅读