在《数字图像处理:局部直方图处理(Local Histogram Processing) https://blog.csdn.net/LaoYuanPython/article/details/120383974》介绍了基于像素的邻域进行直方图均衡或直方图匹配,这种局部直方图处理方式克服了在前面章节《《数字图像处理》直方图均衡学习总结+感悟》、《数字图像直方图匹配或规定化Histogram Matching (Specification)处理》介绍的全局直方图均衡处理和直方图匹配的一些问题,但局部直方图处理除了局部直方图均衡处理和局部直方图匹配外,还可以基于图像的统计信息进行。本文将介绍与此有关的方法。
本文需要的数学知识都是来源于概率统计学:
令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),即方差的平方根)是图像对比度的度量。
上面的灰度均值和方差定义时,使用的计算公式其实是基于归一化直方图来定义的,实际上数字图像的灰度和方差还可以用另外一种方式计算,即直接从图像的采样值(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)等价,因为直方图的数据就是由各像素取值的集合生成的。
图像的全局均值和方差(global mean and variance)是在整幅图像上计算的,用于衡量整幅图的全面灰度和对比度,并可用于图像的整体灰度和对比度的调整(gross adjustments)。
在局部增强(local enhancement)中,局部均值和方差是根据图像中每一像素的邻域内的图像特征进行改变的基础,通常情况下这是比全局增强更好的一种方式。
如果将二者的处理的一些数据结合起来使用,则就是基于直方图统计进行图像增强。
令(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)是邻域中灰度对比度的度量。
下图图3.27(a)显示了一根绕在支架上的钨丝(filament)的 SEM(scanning electron microscope,扫描电子显微镜)图像。图像中央的钨丝及其支架很清楚并很容易分析。
但在图像a的右部暗侧(dark side),有另一根几乎不能察觉(imperceptible)到钨丝的结构,其大小和特征几乎难以辨认(discernable)。
使用全局直方图均衡增强后得到图像b,可以隐约看到那根隐藏的钨丝,可见效果还是差强人意,同时原图像中亮区域也变化了,这不是期待的理想结果。
在上图a这种特殊情况中,需要增强暗色区域、但同时尽可能保留明亮区域不变,因为明亮区域并不需要增强。
通过对比度操作(contrast manipulation)进行局部增强是解决这种图像中包含部分隐含特征(hidden features)问题的理想方法。
图中c是通过直方图统计进行图像增强后的结果,可以看到另一个钨丝的比较明显的结构。
下面介绍的这种方法能分辨暗区域(dark areas)与亮区域(light area)的不同,只增强暗区域而亮区域保持不变。要达到此目标,需要使得挑选的暗区域满足如下三个条件:
满足以上局部增强所有3个条件的一个位于点(x,y)处的像素,可简单地通过将像素值乘以一个指定常数E来处理,以便相对于图像的其他部分增大(或减小)其灰度值。不满足增强条件的像素则保持不变。
直方图统计图像增强方法的变换公式如下:
令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是图像行和列的维数。
通常,式(3.3-24)中选择参数需要做一些试验,以熟悉一幅给定的图像或一类图像。在这种情况下,常常选择下列数值:E=4.0,k0=0.4,k1=0.02和k2=0.4。
图3.27(c)显示了使用上面描述的局部统计方法处理的结果。该图像与图3.27(a)中的原图像或图3.27(b)中经直方图均衡后的结果相比,图3.27(c)的右边显示出了明显的细节。观察该例子,暗灯丝中的脊线现在非常清楚。值得注意的是,左侧的亮灰度区域被完整地保留了,这是我们的初始目的之一。
本文介绍了使用直方图相关的统计信息进行图像增强的背景和处理方法,使用直方图统计进行图像增强通过挑选局部的对比对度相对全局图像低的暗区域,对这些满足条件的局部区域将其灰度值直接扩大E倍,从而使得整幅图像整体效果没有大的变化的前提下,增强图像暗区域的细节。
更多直方图处理相关知识请参考《《数字图像处理》第三章学习总结感悟2:直方图处理》。
更多图像处理请参考专栏《OpenCV-Python图形图像处理》及《图像处理基础知识》的介绍。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《 专栏:Python基础教程目录》从零开始学习Python。
如对文章内容存在疑问或需要相关资料,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询,可通过扫二维码加微信公众号。
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。