其他分享
首页 > 其他分享> > 从理论推导到可视化解释直方图均衡原理

从理论推导到可视化解释直方图均衡原理

作者:互联网

什么是直方图均衡化

直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。

直方图均衡化的作用

这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。


那么为什么通过概率密度函数和累积分布函数可以实现直方图均衡化,在映射过程中图像发生了什么变化?


先看看直方图均衡化后的效果,采用matlab的函数接口histeq,它是用于图像处理的。histeq的作用是把“图像”的直方图均衡化。
在这里插入图片描述
从视觉上看原本对比度比较低的图像变得更亮了。

实际上,直方图均衡化就是在做这样的事情:

利用图像直方图对对比度进行调整。

这种方法通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。

这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。


如何实现直方图均衡化

直方图均衡化过程

  1. 计算原始图片的灰度直方图(用hist函数matlab,python)
  2. 计算各个灰度级对应的概率密度函数
  3. 通过概率密度函数得到累积分布函数
  4. 将旧灰度映射得到新的灰度

我们是希望一幅图像的像素占有全部可能的灰度级且分布均匀,能够具有高对比度。那么通过直方图来处理是显然的。

我们用hist来观察原图像的直方图分布:
在这里插入图片描述
可以观察到对比度很低。

目的是得到如下直方图分布:
在这里插入图片描述
那么在变换前后发生了什么,很明显就是要找到一个变换函数作映射。
在这里插入图片描述
综上所述,我们要找到一个函数来实现中间原本集中的点,被分散到了其他灰度。


下面介绍重要知识点:概率密度函数和累积分布函数
这部分是概率论的知识。

首先分辨我们处理的数据是离散型随机变量还是连续性随机变量?
图像存储的数据是离散的,在计算机眼里图像存储的是一个二维的矩阵,里面装了灰度值。

在理解概率密度函数之前,我们先来看看概率函数是什么。
概率函数,就是用函数的形式来表达概率。

累积分布函数:是一个概率,是随机变量X存在于区间负无穷至x上的概率。
在这里插入图片描述


灰度级变换(输入灰度值r经过T函数的变换输出s) :
在这里插入图片描述
需满足的条件:

在这里插入图片描述
条件1为什么要单调递增是因为保证原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列次序。
后面用到反函数:
在这里插入图片描述
这里会要求严格的递增,反映射从一个值映射回一个范围的值是不行的,根据函数的定义,对每一个自变量x的值y只有唯一的值与它对应。否则出现二义性。
在这里插入图片描述
灰度变换不影响像素的位置分布,而且也不会增减像素数目,所以有如下的推导公式:
在这里插入图片描述
得到r的累积分布函数。
继续变换s对r求导:
在这里插入图片描述
说一下为什么要s对r来求导,s是概率密度函数,对概率密度函数求导就是累积分布函数,最终可以看到s的概率密度始终是均匀的。

一个任意的PDF最后变换出来的都是一个均匀分布的结果。

累积分布函数的特点:
当概率密度最大时,累积分布函数的斜率是最大的,变化幅度最大;
这个性质非常重要,它可以把分布最多的灰度值映射到一个较大的区域,解决了对比度低的问题
在这里插入图片描述


我们找到了我们需要的函数,最后要完成映射:
我们可以看到下面这个变换函数斜率很大,是因为他对比度小,大量的灰度级堆积在很小的范围内。
在这里插入图片描述
最终会实现这样的映射过程:
在这里插入图片描述
可以看到经过变换后的直方图均匀了很多。


具体的直方图变换过程看这个:
点这里


标签:概率密度函数,函数,推导,均衡化,直方图,可视化,图像,对比度
来源: https://blog.csdn.net/weixin_45454137/article/details/120800381