数字图像处理:使用直方图统计进行图像增强
Posted LaoYuanPython
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字图像处理:使用直方图统计进行图像增强相关的知识,希望对你有一定的参考价值。
一、引言
在《数字图像处理:局部直方图处理(Local Histogram Processing) https://blog.csdn.net/LaoYuanPython/article/details/120383974》介绍了基于像素的邻域进行直方图均衡或直方图匹配,这种局部直方图处理方式克服了在前面章节《《数字图像处理》直方图均衡学习总结+感悟》、《数字图像直方图匹配或规定化Histogram Matching (Specification)处理》介绍的全局直方图均衡处理和直方图匹配的一些问题,但局部直方图处理除了局部直方图均衡处理和局部直方图匹配外,还可以基于图像的统计信息进行。本文将介绍与此有关的方法。
二、基础知识
本文需要的数学知识都是来源于概率统计学:
- 本文阅读需要《https://blog.csdn.net/LaoYuanPython/article/details/108864527:人工智能数学基础4:离差、平均差、方差、标准差、协方差、皮尔森相关系数》介绍的平均差、方差、标准差、离差的相关概念;
- 期望(expectation)是试验中每次可能结果的概率乘以其结果的总和,它反映随机变量平均取值的大小,因此期望也就是均值(mean),某个随机变量X的期望记为E(X)或E[X]。对于有限数字集合,期望就是集合数字的平均值;
- 矩(moment)是各点对某一固定点A离差幂的平均值,即E=[(X-A))k],指数k即距的阶数。如果A=0,则是原点矩,如果A=均值,则是中心距。
- 数学期望是一阶原点矩(表示分布重心),方差是二阶中心距(表示离散程度)。
三、图像中有关的统计信息
3.1、灰度均值和方差定义
令r表示在区间[0,L-1]上代表灰度值(intensity values)的一个离散随机变量(discrete random variable),ri表示对于灰度值等于i的灰度值,p(ri)为ri值在图像灰度集合中出现的概率,令m为图像灰度的均值,则可以得到灰度r关于其均值的n阶矩(即图像灰度的n阶中心距)为:
其中m是r的均值(average intensity,平均灰度),其值等于:
灰度r关于其均值的2阶矩为:
由于2阶矩为方差,因此式(3.3-19)称为灰度方差(intensity variance),通常用σ²表示。
灰度的均值用于度量平均灰度,而方差(或标准差(standard deviation),即方差的平方根)是图像对比度的度量。
3.2、灰度均值和方差的另一种计算方式
上面的灰度均值和方差定义时,使用的计算公式其实是基于归一化直方图来定义的,实际上数字图像的灰度和方差还可以用另外一种方式计算,即直接从图像的采样值(sample values)来计算,而不需要计算直方图。这样计算的均值称为采样均值(sample mean ),方差称为采样方差( sample variance)。
采样均值计算公式如下:
采样方差计算公式如下:
其中M表示图像像素的行数,N表示图像像素的列数,f(x,y)为对应位置为(x,y)的像素的灰度值。
很容易理解,对于数字图像,式(3.3-20)和式(3.3-18)等价,式(3.3-21)和式(3.3-19)等价,因为直方图的数据就是由各像素取值的集合生成的。
四、灰度均值和方差在图像增强中的应用
4.1、全局增强和局部增强
图像的全局均值和方差(global mean and variance)是在整幅图像上计算的,用于衡量整幅图的全面灰度和对比度,并可用于图像的整体灰度和对比度的调整(gross adjustments)。
在局部增强(local enhancement)中,局部均值和方差是根据图像中每一像素的邻域内的图像特征进行改变的基础,通常情况下这是比全局增强更好的一种方式。
如果将二者的处理的一些数据结合起来使用,则就是基于直方图统计进行图像增强。
4.2、局部灰度均值和方差
令(x,y)表示给定图像中任意像素的坐标,Sxy表示规定大小的以(x,y)为中心的邻域(子图像,subimage)。该邻域中像素的均值由下式给出:
其中,PSxy是区域Sxy中像素的直方图。该直方图有L个分量,对应于输入图像中L个可能的灰度值。然而,许多分量是0,具体取决于Sxy的大小。例如,如果邻域大小为3x3且L=256,那么该邻域的直方图的256个分量中仅1和9之间的分量非零。这些非零值将对应S 中的不同灰度数(在3x3区域中可能的不同灰度的最大数是9,最小数是1)。
类似地,邻域中像素的方差由下式给出:
和全局均值以及方差类似,局部均值(local mean)是邻域Sxy中平均灰度的度量,局部方差(local variance,或标准差standard deviation)是邻域中灰度对比度的度量。
4.3、一个说明问题的案例
下图图3.27(a)显示了一根绕在支架上的钨丝(filament)的 SEM(scanning electron microscope,扫描电子显微镜)图像。图像中央的钨丝及其支架很清楚并很容易分析。
但在图像a的右部暗侧(dark side),有另一根几乎不能察觉(imperceptible)到钨丝的结构,其大小和特征几乎难以辨认(discernable)。
使用全局直方图均衡增强后得到图像b,可以隐约看到那根隐藏的钨丝,可见效果还是差强人意,同时原图像中亮区域也变化了,这不是期待的理想结果。
在上图a这种特殊情况中,需要增强暗色区域、但同时尽可能保留明亮区域不变,因为明亮区域并不需要增强。
通过对比度操作(contrast manipulation)进行局部增强是解决这种图像中包含部分隐含特征(hidden features)问题的理想方法。
图中c是通过直方图统计进行图像增强后的结果,可以看到另一个钨丝的比较明显的结构。
4.4、直方图统计进行图像增强处理过程
4.4.1、直方图统计图像增强区域候选条件
下面介绍的这种方法能分辨暗区域(dark areas)与亮区域(light area)的不同,只增强暗区域而亮区域保持不变。要达到此目标,需要使得挑选的暗区域满足如下三个条件:
- 判断一个区域在点(x,y)是暗还是亮的方法是把局部平均灰度mSxy (Sxy是m的下标,xy是S的下标,下面其他引用类似)与表示全局平均灰度的mG(G是m的下标,下面其他引用类似)进行比较:如果mSxy≤k0*mG,其中k0是一个值小于 1.0的正常数,那么把点(x,y)处的像素为相对全图像属于相对暗区域的像素,将其考虑为处理的候选点;
- 由于局部灰度比全局灰度低并不表示该局部细节就一定无法呈现,另外一个关键因素是对比度是否足够,因此要选择对比度低的局部区域进行增强,所以还需要一种度量方法来确定一个区域的对比度是否可作为增强的候选点。此时可以使用:如果σSxy≤k2*σG (其中σG是全局灰度标准差,σSxy是像素邻域灰度的局部方差,k2为正常数),则认为在点(x,y)处的像素是要增强的候选点(a candidate for enhancement)。如果我们的兴趣是增强亮区域,则k2大于1.0,对于暗区增强,则k2小于1.0;
- 需要限制能够接受的最低的对比度值(lowest values of contrast),否则该过程会试图增强标准差为零(老猿注:表明灰度值都等于均值)的恒定区域。因此要求使用某个小于等于k2的常数k1,使得k1*σG≤σSxy(老猿注:即像素邻域的局部对比度要大于全局对比度的某个比例,该比例由k1指定),这样就对局部标准差设置了一个较低的限制值。
满足以上局部增强所有3个条件的一个位于点(x,y)处的像素,可简单地通过将像素值乘以一个指定常数E来处理,以便相对于图像的其他部分增大(或减小)其灰度值。不满足增强条件的像素则保持不变。
4.4.2、直方图统计图像增强变换公式
直方图统计图像增强方法的变换公式如下:
令f(x,y)表示在图像任意坐标(x,y)处的像素值,而令g(x,y)表示这些坐标处相应的增强的像素值,则对于x=0,1,2,…,M-1,y=0,1,2,…,N-1,有:
其中,如前所述,E,k1,k1和k2是规定的参数,mG是输人图像的全局均值,σG是输入图像的标准差。参数mSxy和σSxy分别是局部均值和标准差。按惯例,M和N是图像行和列的维数。
4.4.3、直方图统计图像增强变换公式参数设置的考量
通常,式(3.3-24)中选择参数需要做一些试验,以熟悉一幅给定的图像或一类图像。在这种情况下,常常选择下列数值:E=4.0,k0=0.4,k1=0.02和k2=0.4。
- 之所以对E选择相对较低的值4.0,原因在于当E与将被增强区域(暗色区域)中的灰度相乘后,结果仍会趋于灰度级的暗端,从而保持图像的视觉平衡
- 选择的k0值比全局均值的一半略小,因为观察一幅图像时,一般情况下需要增强的区域确实比全局平均值的一半还要暗。类似的分析可指导k1和k2值的选择
- 这些常数的选择通常并不困难,但这些明确的选择必须以对具体增强问题的逻辑分析为指导
- 最后,为保留细节和尽量减少计算负担,局部区域Sxy的大小应尽可能小。因此,我们选择大小为3x3的小区域
图3.27(c)显示了使用上面描述的局部统计方法处理的结果。该图像与图3.27(a)中的原图像或图3.27(b)中经直方图均衡后的结果相比,图3.27(c)的右边显示出了明显的细节。观察该例子,暗灯丝中的脊线现在非常清楚。值得注意的是,左侧的亮灰度区域被完整地保留了,这是我们的初始目的之一。
五、小结
本文介绍了使用直方图相关的统计信息进行图像增强的背景和处理方法,使用直方图统计进行图像增强通过挑选局部的对比对度相对全局图像低的暗区域,对这些满足条件的局部区域将其灰度值直接扩大E倍,从而使得整幅图像整体效果没有大的变化的前提下,增强图像暗区域的细节。
更多直方图处理相关知识请参考《《数字图像处理》第三章学习总结感悟2:直方图处理》。
更多图像处理请参考专栏《OpenCV-Python图形图像处理》及《图像处理基础知识》的介绍。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《 专栏:Python基础教程目录》从零开始学习Python。
如对文章内容存在疑问或需要相关资料,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询,可通过扫描博客左边的二维码加微信公众号。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
关于老猿的付费专栏
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
- 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。
老猿Python,跟老猿学Python!
☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░
以上是关于数字图像处理:使用直方图统计进行图像增强的主要内容,如果未能解决你的问题,请参考以下文章