OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化

如果需要处理的原图及代码,请移步小编的GitHub地址

  传送门:请点击我

  如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice

1,如何提高图像像素

  对曝光过度或者逆光拍摄的图片可以通过直方图均衡化的方法用来增强局部或者整体的对比度。

  对于相机采集的原始图像经常会出现一种现象,即图像所有像素的灰度值分布不均匀,而是集中在某一特定的小区域,导致图像中的所有信息的灰度值都很接近,即对比度差,很难从图像中分辨出某一特征的信息。而质量较高的图像中,像素的强度应该均衡的分布。

  为了提高图像处理的效果,经常会在图像处理之前进行直方图均衡化,即将图像的直方图灰度级别由集中在某一小部分灰度级分散成在所有灰度级别都有一定的覆盖,所以通过直方图均衡化的方法用来增强局部或整体的对比度。

  具体的思路就是通过找出图像中最亮和最暗的像素值将之映射到纯黑和纯白之后再将其他的像素值按照某种算法映射到纯黑和纯白之间的值。另外一种方法就是寻找图像中像素的平均值作为中间灰度值,然后扩展范围以达到尽量充满可显示的值。

OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化

  一个好的图像会有来自图像的所有区域的像素。所以你需要把这个直方图拉伸到两端(如上图所给出的),这就是直方图均衡的作用(用简单的话说)。这通常会改善图像的对比度。

2,直方图均衡化的原理 2.1  直方图的介绍

  具体直方图实现的原理是什么呢?请看下图:

OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化

   左图是一个图像的像素组合,我们拿到的是一个12*20 大小的图像像素;右图就是他的直方图展示,横轴表示在0~255之间的区间块,我们将其分为16个bin,统计图像中每个像素的个数,右图反映的时图像中每个像素出现的频率,横轴是像素区间,纵坐标是像素出现的频率。

  看到上面两个图,大概直方图的解释应该很明显了。

2.2  用实验数据展示什么是直方图?

  我们可以把直方图看做一个图,它给我们一个关于图像的强度分布的总体思路。它是一个带有像素值的图(从0到255, 不总是)在X轴上,在y轴上的图像对应的像素个数。

  这只是理解图像的另一种方式,通过观察图像的直方图,我们可以直观的了解图像的对比度,亮度,亮度分布等。(下图来至于Cambridge in Color website的图片,建议去访问这个网站,了解更多细节。)

OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化

  你可以看到图像和它的直方图。(这个直方图是用灰度图像绘制的,而不是彩色图像)。在直方图中,横坐标表示图像中各个像素点的灰度级,纵坐标表示具有该灰度级的像素个数。直方图的左边部分显示了图像中较暗像素的数量,右边区域显示了更明亮的像素。从直方图中可以看到,深色区域的像素数量比亮色区域更多,而中间色调的数量(中值大约在127左右)则少得多。

2.3 直方图均衡化的原理

  有时图像的视觉上的缺陷并不在强度值集中在很窄的范围内。而是某些强度值的使用频率很大。在完美均衡的直方图中,每个柱的值都应该相等。即50%的像素值应该小于128,25%的像素值应该小于64.总结出的经验可定义为:在标准的直方图中 p% 的像素拥有的强度值一定小于或等于 255*p%,将该规律用于均衡直方图中:强度 i 的灰度值应该在对应的像素强度低于 i 的百分比的强度中。因此,所需要的查询表可由下面的式子建立:

lut[i] = int(255.0 *p[i]) #p[i]是是强度值小于或等于i的像素的数目。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzdpf.html