数字图像处理:局部直方图处理(Local Histogram Processing)
Posted LaoYuanPython
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字图像处理:局部直方图处理(Local Histogram Processing)相关的知识,希望对你有一定的参考价值。
☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░
一、引言
在前面章节《《数字图像处理》直方图均衡学习总结+感悟》、《数字图像直方图匹配或规定化Histogram Matching (Specification)处理》介绍了直方图均衡处理和直方图,二者都是基于整幅图像的灰度分布(intensity distribution)直方图来进行的,因此说这两种直方图处理方式都是全局性的(global)。 尽管这种全局方法适用于整个图像的增强(overall enhancement),但有时候需要对图像小的局部区域进行细节增强处理。如果使用全局增强处理,这部分小区域的像素可能在全局变换的计算中所起作用几乎微乎其微(negligible influence)。解决这个问题的方法是设计基于每个像素邻域灰度分布的变换函数。
二、局部直方图处理
直方图均衡和直方图匹配方法很容易应用于图像的局部增强(local enhancement)处理。
具体处理过程是:
- 定义一个邻域(neighborhood,一个矩形核,请参考《《数字图像处理》学习总结及感悟:第二章数字图像基础(4)像素间的关系》的介绍),然后将邻域中心沿着图像从左到右、从上到下一个一个像素的移动
- 在每个像素位置,计算对应像素点邻域的直方图,并对该邻域进行直方图均衡或直方图匹配变换,变换的结果被应用于邻域中心点的灰度;
- 邻域的中心被移动到一邻接像素的位置(an adjacent pixel location),并重复上述处理过程。
由于在邻域像素到像素的平移(a pixel-to-pixel translation of the neighborhood)过程中,相对前一像素两者的邻域仅只有一行或一列发生了改变,可以使用在每个平移步骤中得到的新数据更新在前一位置获得的直方图。这种方式比区域每移动一个像素位置就计算并更新邻域中所有像素的直方图的方式有明显优点(结合后文可以理解为优点是减少了计算量)。有时用于减少计算量的另一种方式是使用非重叠区域(nonoverlapping regions),但这种方式通常会产生我们不希望的"棋盘"效应(“blocky” effect)。
老猿注:上面这段话理解起来比较困难,是因为有些语句没有详细说清楚细节。老猿结合原版、中文以及上下文等情况仔细进行理解如下:每移动一个像素,就针对该像素位置的邻域的灰度进行直方图变换,但最终只更新邻域中心点的灰度值。translation 在此翻译为平移而不是变换,是因为像素到像素是移动过程,不是二者的变换,而且结合上下文这种翻译才是准确的。平移到邻域的下一邻接点时,相对于当前点的行和列,邻接点要么是改变了行号而列不变,要么是列号改变而行不变,按此要求,邻域处理到图像的列边界时,应该是往下一行而列不变,这与《数字图像处理:理解什么是卷积(滤波)、卷积核以及相关参考资料》介绍的卷积过程不同,在此暂且存疑,希望以后有机会明白和解释。
三、局部直方图均衡例子
图3.26(a)显示了一幅大小为512x512的8 比特图像,初看之下,该图像在灰色背景上包含5个黑色方块。图像有轻微的噪声(noisy),但是噪声感觉不到(imperceptible)。
图3.26(b)显示了全局直方图均衡(global histogram equalization)的结果。当用直方图均衡平滑的噪声区域时,很容易导致图像的噪声明显地增强了(significant enhancement)。然而,除了噪声之外,图3.26(b)与原图像相比并未显示新的重要细节,只是不明显地给出了左上方和右下方方块中包含有一个物体。图3.26©是使用大小为3x3的邻域的局部直方图均衡得到的。这里,我们看到了包含在暗色方块中的物体(objects)。这些物体的灰度值太接近大方块的灰度,而且它们太小,全局直方图均衡化不足以影响这些细节的显示。
从这个例子可以看出,使用局部直方图处理在某些情况下得到的效果是全局直方图处理无法比拟的。
四、小结
本文介绍了局部直方图处理的原理和概念,局部直方图处理就是基于图像像素的邻域进行直方图处理,处理结果仅更新邻域中心像素的灰度值。由于仅以邻域进行直方图的计算,每个像素的计算量会小很多,同时这种基于邻域的直方图处理,对图像的细节能起到很好的改变。
更多直方图处理相关知识请参考《《数字图像处理》第三章学习总结感悟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 ░
以上是关于数字图像处理:局部直方图处理(Local Histogram Processing)的主要内容,如果未能解决你的问题,请参考以下文章
OpenCv,局部自适应图像增强(Local Adaptive Contrast Enhancement)