数字图像处理:直方图均衡(Histogram Equalization)的原理及处理介绍 您所在的位置:网站首页 画出直方图均衡化的图像和直方图的关系 数字图像处理:直方图均衡(Histogram Equalization)的原理及处理介绍

数字图像处理:直方图均衡(Histogram Equalization)的原理及处理介绍

2023-12-25 19:50| 来源: 网络整理| 查看: 265

一、引言

本系列文章记录老猿自学冈萨雷斯《数字图像处理》的感悟和总结,不过估计更新会比较慢,白天要工作,都是晚上抽空学习,学习完一章再回头总结,想学的朋友可以自己下载英文原版(目前到第四版)和中文译本(目前应该到第三版)的电子版观看,如果想对照观看建议英文原版也找第三版。

这本《数字图像处理》不愧为数字图像处理的经典教程,知识范围广、内容详尽、案例贴近实践,至少很合老猿的口味。但中译本存在两个问题:

有些翻译得不够精准或流利,对于这样的内容如果在老猿总结知识中出现,会以斜体字标记,有些关键术语老猿会附上英文原词;中译本的图像案例很多都比原版差很多,甚至差到影响对讲述内容的理解,因此就算不看原版文字,图像案例最好还是对照原版的。

本文是《数字图像处理》第三章直方图处理中的直方图均衡相关章节的内容,但本节的部分内容老猿认为对缺乏基础的人有点难,老猿将试图在涉及直方图处理相关的系列文章中将相关疑问解释清楚。

二、知识概要:直方图均衡化(Histogram Equalization) 2.1、直方图处理涉及灰度映射函数的要求

如果用变量r表示待处理图像的灰度,r的取值区间为[0,L-1],且r=0表示黑色,r=L-1表示白色。在连续灰度值情况下,假设有变换形式为式(3.3-1)上的灰度映射:

式(3.3-1): s = T(r),0≤r≤L-1

式(3.3-1)表示对于输入图像中每个具有r值的像素灰度值产生一个输出灰度值s。我们假设:

T(r)在区间[0,L-1]上为单调递增函数当0≤r≤L-1时,0≤T(r)≤L-1。

这样保证相关变换前后的灰度值范围保持不变,且变换不会导致灰度错乱。

在某些情况下,需要用到变换函数T的反函数,假设反函数为:

式(3.3-2):r=T-1(s),0≤S1。正如所期望的那样,结果是一个均匀的PDF。

2.4、数字图像的通用直方图均衡公式 2.4.1、数字图像的直方图

对于数字图像,由于其灰度值不连续,是离散值(discrete values),可以用概率(直方图值)与求和来替代概率密度函数与积分进行处理。正如前面提到的那样,一幅数字图像中灰度级rk出现的概率近似为: 在这里插入图片描述

其中,MN是图像中像素的总数,nk是灰度为rk的像素个数,L是图像中可能的灰度级的数量(如8比特图像是256)。正像本节开始说明的那样,与rk相对的pr(rk)图形通常称为直方图。

2.4.2、数字图像的直方图均衡公式

式(3.3-4)中变换的离散形式为: 在这里插入图片描述 其中MN是图像像素的行数M与列数N的乘积,L为该表示图像灰度所在数字区间的上限,如8bit图像为256,nj表示灰度值=j的像素个数。

通过式(3.3-8)对应的变换,可以将输入图像中灰度级为rk的各像素映射到输出图像中灰度级为sk的对应像素,从而得到输出图像的各像素灰度值。在这个公式中,变换(映射)T(r)称为直方图均衡或直方图线性变换。

不难证明该变换函数满足式(3.3-1)所述的两个假设条件,即对所有输入灰度值其值域属于[0,L-1],函数为单调递增函数。

2.4.3、数字图像的直方图均衡案例

例3.5 直方图均衡的简单说明。 在继续之前,通过一个简单的例子来说明直方图均衡的工作原理是有帮助的。假设一幅大小为64x64像素(MN=4096)的3比特图像(L=8)的灰度分布如表3.1所示,其中灰度级是范围[0,L-1]=[0,7]中的整数。 在这里插入图片描述 图像的直方图如下图3.19-a所示:

在这里插入图片描述 针对该图的直方图均衡变换函数的形状为形如图3.19-b所示的阶梯形状,直方图均衡变换函数的值使用式(3.3-8)得到,例如: 在这里插入图片描述 类似地可以得到:s2=4.55、s3=5.67、s4=6.23、s5=6.65、s6=6.86、s7=7.00。由于图像为数字图像,其灰度值必须为整数,这样算出来的小数必须调整为整数,可以采用四舍五入的方式取整,可以得到: 在这里插入图片描述 这些是均衡后的直方图的值,由于对应映射不是严格单调递增的映射,因此映射后灰度级个数由原来的8个降为5个,对应的均衡化后的直方图如上图3.19-c所示。

2.4.4、数字图像处理直方图均衡影响分析

因为离散数据的直方图是PDF的近似,而且在处理中不允许生成新的灰度级,所以在实际的直方图均衡应用中,很少见到完美平坦的直方图。因此,不像连续数据的情况,离散直方图均衡通常不会导致均匀的直方图。

由于式(3.3-8)具有扩展输入图像直方图(spread the histogram of the input image)的趋势(老猿注:因为新的灰度值的计算方法导致直方图的数据由集中化向分散化变化),均衡后的图像的灰度级(intensity levels)跨越更宽灰度级(intensity scale)范围。最终结果(The net result)是增强了对比度(contrast enhancement)。

具有覆盖整个灰度范围的灰度值的图像有许多优点,刚才推导的方法除了产生有这样趋势的灰度之外,还有一个额外的优点,即它是完全“自动的”。换句话说,给定一幅图像,直方图均衡化的处理仅涉及执行式(3.3-8),该式计算时可直接从输入图像提取信息,而不需要其他更多的参数数据,且实现该式的计算简单,只需要加减法和乘除法。

如果输入图像的所有灰度级都存在,即直方图没有y轴为0的数据,所有分量都大于0,则针对式(3.3-8)的变换函数是严格单调递增的,因此一定存在反变换。

2.4.5、直方图均衡的图像处理应用案例:

针对前面介绍的花粉图像案例,我们来看下图3.20: 在这里插入图片描述

图3.20左边一列显示了来自《《数字图像处理》第三章学习总结感悟2:直方图处理》图3.16的4 幅图像,中间一列显示了对每一幅图像执行直方图均衡后的结果。从上到下的前三种结果显示了重要的改进效果。正如所预期的那样,直方图均衡对第四幅图像未产生太大的效果,这是因为这幅图像的灰度已经扩展到了全部灰度级范围。

图3.20 中的第三列显示了均衡后的图像的直方图。有趣的是,尽管这些直方图不同,但直方图均衡后的图像本身在视觉上却是非常相似的。但这并非是不希望的,因为左边一列图像之间的差异仅仅是对比度上的,而不是内容上的。换句话说,因为图像有相同的内容,直方图均衡导致的对比度增强足以补偿图像在视觉上难以区分灰度级的差别。在给出原始图像间的重要对比度差别后,该例说明了直方图均衡作为自适应对比度增强工具的强大作用。

在这里插入图片描述

上图 3.21 显示了用于产生图 3.20 中均衡后的图像的变换函数的曲线。这些函数是使用式(3.3-8)产生的。很明显,变换(4)的形状近似为线性形状,这指出输入被映射为近似相等的输出。

三、小结

本文介绍了《数字图像处理》第三章直方图均衡的主要知识点,直方图均衡法针对非数字图像以及数字图像都存在通用的公式,只需要数字图像和非数字图像自身的信息,二者虽然由于灰度值连续和离散的不同公式有所不同,但本质是一致的。本文的介绍是完全基于《数字图像处理》的介绍,其中有些内容对于不熟悉数字图像处理的人员理解可能存在困难,请等待老猿后续的系列博文答疑解惑。

补充说明:本文中还存在一些疑难问题,这些问题的解答请参考付费专栏文章《数字图像处理》直方图均衡学习总结+感悟》。

更多直方图处理相关知识请参考《《数字图像处理》第三章学习总结感悟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 ░


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有