心血来潮,想写一写直方图均衡化。我先说说为什么要写直方图均衡化,因为之前接触到理论上的面试,看起来很简单的知识点,其实暗藏着很多的玄机(-_-)。本文尽量尝试着去推导。推导之前写一下基本的原理。

关注公众号,获取更多信息

1、为什么要做直方图均衡化与直方图规定化

在现实的拍摄过程中,比如说视频监控领域,由于其图像的灰度分布集中在较窄的范围内,这就导致了图像的细节不够清晰。为什么不清晰呢,因为灰度分布较窄时,那么,在计算对比度的时候,对比度就很小,所以就不清晰。为了使得图像变得清晰,那么就需要使得灰度值的差别变大,为了使得灰度值的差别变大,就意味着灰度分布就变的较宽,使得灰度值分布变得均匀,在某个灰度级区间内,像素的个数分布大致相同,这样才能使得图像的对比度增强,细节变得清晰可见。

2、直方图均衡化的原理

直方图均衡化就是对图像进行非线性拉伸,使得变换后的图像直方图分布均匀。那么怎样才能使得新图像的直方图分布均匀呢?

在介绍直方图均衡化的原理之前,先介绍随机变量的函数分布的数学知识。

2.1、随机变量的函数分布

2.2.1、连续随机变量的函数分布

假设连续随机变量的X的概率密度为 ,求X的函数 的概率密度函数
通用的做法是:
(1)先求分布函数
(2)对上面公式两端求导就可以求得概率密度函数
另外,如果 是单调函数,则可以用公式法来求解。
这里有一个定理:假设随机变量X的概率密度为 ,设函数g(x)处处可导,且有 (或者 ),则有 是连续型随机变量,其概率密度函数为
式中, ,h(y)是g(x)的反函数
证明(只证明 的情形):
时,则g(X)在 上是严格单调增加的,而且其反函数h(y)也是存在的,且反函数也是单调增加可导的。
因为, 的取值范围为
则当 时,
则当 时,
时,
对y求导,则
为什么 成立呢,因为相当于把Y=g(X)转换为X=h(Y).
同理,当 时,

2.2.2、离散随机变量的函数分布

设X是离散型随机变量,X的分布律为
则Y=g(X)的分布律为
上面表中,当某两个g(xi)相等时,就把概率合并,就是概率相加,然后重新绘制表格。

2.2 直方图均衡化的推导

直方图均衡化的目的是使得变换后的图像的直方图是均匀分布的,又因为概率密度是指变量落在某个区间的概率,而累积分布函数的导数就是概率密度函数。所以,当分布均匀时,就是使得概率密度能够保持为一个常数。有了这些分析,我们的目的就是想找到这样的一种变换函数,使得变换后图像直方图分布均匀(这里的直方图都用灰度级的个数除以总像素个数,进行归一化。)

假设r和s分别是变换之前和变换之后的图像灰度级,r和s都进行了归一化的处理。假设变换函数为

s=T(r),此变换公式满足0≤r≤1,0≤s≤1;当0≤r≤1时,T(r)是单调递增的。

,假设r的概率密度为P(r),则s的概率密度可以表示为(根据上面我们介绍的概率密度函数的求解方法):

(1)

假设从r到s的变换函数为

  (2)

式中,明显是r的累积分布函数(也就是

公式(2)两边对r求导得到

带入到公式(1)中,得到

哇,太神奇了,当我们用r的累积分布函数作为变换函数时,得到s的概率密度函数是1(也就是均匀的意思)。

好了,这里就用连续函数的方式证明了采用原始图像直方图的累积分布来实现直方图均衡化是可行的。

由于我们的图像是离散的,所以,这样怎么求变换后的图像呢,只是把连续的函数离散化就行了。

(1)先求原始图像的直方图,就是每个灰度级的像素个数除以总像素个数,就是概率密度,

(2)原始图像灰度级概率密度的累积就是新图像灰度级的概率密度

k是新图像的灰度级,最大是255,也可以任意设置。

(3)由于上面求得的s是0到1之间的,然后乘以255或者设置的最大灰度级,就得到新图像的灰度值。

好了,这里就基本上说明了为什么要采用累积分布做直方图均衡化,以及如何做直方图均衡化。

3、直方图规定化

前面介绍了直方图均衡化,但是这是一种通用的对比度提升方法,如果我们想把图像变换到制定的直方图就显得力不从心。所以就有了直方图规定化,就是对原始图像做变换,使得变换后的图像的直方图跟我们规定的一样。

假设原始图像的像素值为r,概率密度为P(r);做直方图均衡化之后的灰度值为s,均衡化之后的概率密度为P(s);希望要的图像的概率密度为P(z),再次情况下,求得其像素值z。

实际上,规定化也是均衡化的一种,那么,就可以把均衡化的结果作为一种中间结果,建立起原始图像与固定化图像的一种桥梁。

具体步骤如下:

(1)首先对原始图像做直方图均衡化,得到每个像素s和累积分布T(s);

(2)根据需要的规定化直方图,求累积分布G(Z);

(3)显然,如果累积直方图中有0值,那么是不会分配像素值的,因为0乘以255还是零。

(4)对于每一个T(s)(假设其像素值为ss),找到在G(Z)中与其差值最小的那个G(z)值(假设对应的像素值为zz),那么规定化后就把ss变换为zz。

下面用两个典型的例子来说明,(数据来源于互联网,如有侵权,请告知)

直方图均衡化(Histogram equalization)与直方图规定化相关推荐

  1. Python+OpenCV:直方图均衡化(Histogram Equalization)

    Python+OpenCV:直方图均衡化(Histogram Equalization) ####################################################### ...

  2. OpenCv:直方图均衡化(HE),自适应直方图均衡化(AHE),限制对比度自适应直方图均衡化(CLAHE)

    总结了使用Python OpenCv处理图像直方图均衡化(HE),自适应直方图均衡化(AHE),限制对比度自适应直方图均衡化(CLAHE)的方法. 目录 直方图均衡化(HE) 自适应直方图均衡化(AH ...

  3. 线性变换,分段线性变换,伽马变换,直方图正规化,直方图均衡化,局部自适应直方图均衡化的原理以及python代码

    1.基础概念 1.1 图像灰度直方图 灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率.图像的对比度是通过灰度级范围来度量的,而灰度级范围可通过观察灰度直方图得到,灰度 ...

  4. MATLAB:虹膜识别的图像灰度化处理,直方图均衡化

    (1)图像灰度化处理: 读取一张图片之后,进行灰度化处理,然后对其进行直方图均值化. clear;close all %读取原图地址 RGB= imread('D:\img\1.jpg'); %图像灰 ...

  5. java 灰度直方图_【数字图像处理】灰度直方图、直方图均衡化、直方图规定化...

    灰度直方图 一幅图像由不同灰度值的像素组成,图像中灰度的分布情况是该图像的一个重要特征.图像的灰度直方图就描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少. 图像的灰度直方图是灰 ...

  6. python图像直方图与直方图均衡化

    图像直方图以及灰度与彩色图像的直方图均衡化 图像直方图: 图像的直方图用来表征该图像像素值的分布情况.用一定数目的小区间(bin)来指定表征像素值的范围,每个小区间会得到落入该小区间表示范围的像素数目 ...

  7. clahe(限制对比度自适应直方图均衡化)

    限制对比度自适应直方图均衡化 直方图均衡化(HE) 数学原理: AHE(自适应直方图均衡) 实现原理: CLAHE( 限制对比度自适应直方图均衡化) 原理: 补充 ) 在讨论clahe(限制对比度自适 ...

  8. 基于python的对比度增强(线性变换、直方图正规化、直方图均衡化、CLAHE)

    线性变换 假设输入图像为I,宽为W,高为H,输出图像为O,图像的线性变换可以用以下公式定义: O(r,c)=a×I(r,c)+b,0≤r<H,0≤c<WO(r, c) = a × I(r, ...

  9. 图像处理直方图均衡化

    直方图均衡化 简介 直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强 ...

  10. 直方图均衡化原理与实现

    直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度.直方图 ...

最新文章

  1. 便利vector_C++面试题之list和vector的区别
  2. 《Android App开发入门:使用Android Studio 2.X开发环境》——导读
  3. dubbo协议_一文详细解读 Dubbo 中的 http 协议
  4. 【Flink】Flink写入es报错failed to get node info for request_id time out out after
  5. 碰撞回避算法(一) Velocity Obstacle
  6. bzoj 2560: 串珠子【状压dp】
  7. 获取wlan0eth0联网状态
  8. 重新认识Java包的命名规则
  9. Hibernate实体类注解中如何忽略某些字段的映射
  10. 张一鸣:我的大学四年收获及工作感悟
  11. python中文名是什么怎么读-python中文读音
  12. 360快传号,会成为下一个自媒体风口吗?
  13. 小白自学Java后端学习计划(附带学习视频)
  14. 英魂之刃服务器维护在几点,2016英魂之刃8.19有没有维护
  15. s4i9500 android6.0,三星Galaxy S4(i9500)各版本的区别:教你区别三星S4的5个版本(图文)...
  16. 1命名规则 sentinel_哨兵-1A数据命名规则
  17. eft and spin
  18. 中国石油大学《计算机文化基础》在线考试题
  19. Java-List集合元素筛选
  20. 婚纱影楼,网络营销策划经典案例《缩减版》

热门文章

  1. 信号完整性100条经验法则
  2. 机器学习隐私保护-MPC通用编译器
  3. 编程一年,我学会了什么?
  4. 网站ftp服务器密码修改,ftp服务器忘记密码修改
  5. c语言中字符串的子式咋样输出,C语言常用代码
  6. 大数据发展必备三个条件
  7. 关于运筹学三方库的编译和使用 ortools
  8. Java解决上台阶问题
  9. tar命令打包和压缩与解压
  10. 数据清洗的一般方法和步骤