《数字图像处理(第三版)》 第三章 数字图像处理 笔记3 (直方图处理 - 直方图均衡)
第 3 章 灰度变换与空间滤波
3.3 直方图处理
直方图是多种空间域处理技术的基础。
灰度级范围为 [0, L-1] 的数字图像的直方图是离散函数
h(rk)=nkh(r_k) = n_k h(rk)=nk
这里 rk 是第 k 级灰度,nk 是图像中灰度级为 rk 的像素个数。经常以图像中像素的总数(用 n 表示)来除它的每一个值得到归一化的直方图。因此,一个归一化的直方图由
P(rk)=nknk=0,1,...,L−1P(r_k) = \frac{n_k}{n} \\ k = 0, 1, ... , L-1 P(rk)=nnkk=0,1,...,L−1
即 P(rk) 给出了灰度级为 rk 发生的概率估计值。
可以看到,在暗色图像中,直方图的组成成分集中在灰度级低(暗)的一侧。类似的,明亮图像的直方图则倾向于灰度级高的一侧。
在上图中可以看到,低对比度图像的直方图窄而集中于灰度级的中部。高对比度的图像中,直方图的成分覆盖了灰度级很宽的范围,而且,像素的分布没有太不均匀,只有少量垂线比其他的高许多。
可以得到如下结论:若一幅图像的像素倾向于占据整个可能的灰度级并且分布均匀,则该图像会有高对比度的外观并显示灰色调的较大变化。最终效果将是一幅灰度细节丰富且动态范围较大的图像。
3.3.1 直方图均衡
直方图均衡的目的:寻找 变换函数,该函数产生有均匀直方图的输出图像。也就是 得到一幅灰度级丰富且动态范围大的图像。
该函数仅仅依靠输入图像直方图中的信息就可自动达到这一效果。该函数产生有均匀直方图的输出图像。
直方图均衡的关键:寻找变换函数,该函数产生有均匀直方图的输出图像。
考虑连续灰度值,并用变量 r 表示待处理图像的灰度。假设 r 的取值范围为 [0, L-1],归一化之后得到 r 的取值范围为 [0, 1] 且 r=0 表示黑色,r=1 表示白色。对于任意一个满足上述条件的 r ,我们将注意力集中在变换形式上:
s=T(r)0≤r≤1s = T(r) \\ 0 \leq r \leq 1 s=T(r)0≤r≤1
对于输入图像中每个具有 r 值的像素产生一个输出灰度值 s。假设变换函数 T® 满足以下条件:
- T( r ) 在区间 0≤r≤10 \leq r \leq 10≤r≤1 上为单调递增函数。
- 当 0≤r≤10 \leq r \leq 10≤r≤1 时,0≤T(r)≤10 \leq T(r) \leq 10≤T(r)≤1
一幅图像的灰度级可被视为区间 [0, 1] 内的随机变量。随机变量的一个最重要的基本描述是其概率密度函数(PDF)。令 Pr( r ) 和 Ps( r ) 分别表示随机变量 r 和 s 的概率密度函数。
如上图所示,右下图是输入图像灰度级 r 的直方图或概率密度函数,现在的问题就是求函数 T,是结果图像的直方图为均匀分布,即得到左上和右上这种类型的输出图像灰度级。
输入图像的灰度级 r 通过映射函数 T 映射到输出图像的灰度级 s,可得到如下关系式:
s1=T(r1)s1+Δs=T(r1+Δr)s_1 = T(r_1) \\ s_1 + \Delta s = T(r_1 + \Delta r) s1=T(r1)s1+Δs=T(r1+Δr)
又因为图中的曲线是输入输出图像中灰度级的概率密度的函数曲线,曲线的面积表示概率,故
∫r1r1+ΔrPr(r)dr=∫s1s1+ΔsPs(s)ds\int_{r_1}^{r_1 + \Delta r} {P_r(r)} \,{\rm d}r = \int_{s_1}^{s_1 + \Delta s} {P_s(s)} \,{\rm d}s ∫r1r1+ΔrPr(r)dr=∫s1s1+ΔsPs(s)ds
如果 Δr\Delta rΔr 足够小,则:
Pr(r)Δr=Ps(s)Δsdsdr=Pr(r)Ps(s)P_r(r) \Delta r = P_s(s) \Delta s \\ \frac{ds}{dr} = \frac{P_r(r)}{P_s(s)} Pr(r)Δr=Ps(s)Δsdrds=Ps(s)Pr(r)
由此可以看到,输出灰度变量 s 的 PDF 就由输入灰度的 PDF 和所用变换函数决定。同时注意到:Ps(s)P_s(s)Ps(s) 是均匀概率密度函数,故 Ps(s)=1,0≤s≤1P_s(s) = 1, \, 0 \leq s \leq 1Ps(s)=1,0≤s≤1,故:
dT(r)dr=Pr(r)(s=T(r))s=T(r)=∫0rPr(r)dr\frac{dT(r)}{dr} = P_r(r) \qquad (s = T(r)) \\ s = T(r) = \int_0^r {P_r(r)} \, {\rm d}r drdT(r)=Pr(r)(s=T(r))s=T(r)=∫0rPr(r)dr
即通过上述式子得到的输出图像的灰度值 s 满足均匀分布,与输入图像灰度值 r 的概率密度函数 Pr(r)P_r(r)Pr(r) 无关。
结论
直方图均衡变换公式(未归一化):
s=T(r)=(L−1)∫0rPr(w)dws = T(r) = (L-1) \int_0^r {P_r(w)} \, {\rm d}w s=T(r)=(L−1)∫0rPr(w)dw
以上介绍均为连续值情况下的变换。对于 离散值,我们处理其 概率与和 而不是 概率密度函数与积分。一幅图像中灰度级 rk 出现的概率近似为:
Pr(rk)=nknk=0,1,2,⋯,L−1P_r(r_k) = \frac{n_k}{n} \qquad k = 0, 1, 2, \cdots, L-1 Pr(rk)=nnkk=0,1,2,⋯,L−1
n 是图像的总像素,nk 是灰度为 rk 的像素个数,与 rk 相对的 Pr(rk) 图形通常称为 直方图,则直方图均衡公式为:
sk=T(rk)=∑j=0kPr(rj)=∑j=0knjns_k = T(r_k) = \sum_{j=0}^k {P_r(r_j)} = \sum_{j=0}^k \frac{n_j}{n} sk=T(rk)=j=0∑kPr(rj)=j=0∑knnj
需要注意的是:
- 上式中的 rk 和 sk 都是归一化后的值。
- 实际应用中,输入和输出的数字图像的灰度级分辨率应该是一致的。例如,如果对于一幅 256 个灰度级的数字图像进行直方图均衡,结果图像应该也是 256 个灰度级的。
例题:
已知一幅 64 × 64、3 bit 的数字图像,各灰度级出现的频数如下所示。试进行直方图均衡。
r | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
n( r ) | 790 | 1023 | 850 | 656 | 329 | 245 | 122 | 81 |
因为直方图均衡公式为:
sk=T(rk)=∑j=0kPr(rj)=∑j=0knjn0≤rk≤1,k=0,1,2,⋯,L−1s_k = T(r_k) = \sum_{j=0}^k P_r(r_j) = \sum_{j=0}^k \frac{n_j}{n} \\ 0 \leq r_k \leq 1 \, , \, k = 0, 1, 2, \cdots, L-1 sk=T(rk)=j=0∑kPr(rj)=j=0∑knnj0≤rk≤1,k=0,1,2,⋯,L−1
因为像素的总数量是:
64×64=409664 × 64 = 4096 64×64=4096
个像素,则输入像素归一化并计算 Pr(rk) 得到如下表:
rk | nk | Pr(rk) | sk |
---|---|---|---|
rk = 0 | 790 | 0.19 | s0 = 0.19 |
rk = 1/7 | 1023 | 0.25 | s1 = 0.44 |
rk = 2/7 | 850 | 0.21 | s2 = 0.65 |
rk = 3/7 | 656 | 0.16 | s3 = 0.81 |
rk = 4/7 | 329 | 0.08 | s4 = 0.89 |
rk = 5/7 | 245 | 0.06 | s5 = 0.95 |
rk = 6/7 | 122 | 0.03 | s6 = 0.98 |
rk = 1 | 81 | 0.02 | s7 = 1.00 |
注意:原图像的灰度级为 8,即 [0, 7],则结果图像的灰度级也应该是 [0, 7]。所以需要把上表中的 sk 映射到 [0, 7] 的整数范围中去。可以采取四舍五入的方式取整,如下表所示:
r | s = T( r ) |
---|---|
0 | round(7 * 0.19) = 1 |
1 | round(7 * 0.44) = 3 |
2 | round(7 * 0.65) = 5 |
3 | round(7 * 0.81) = 6 |
4 | round(7 * 0.89) = 6 |
5 | round(7 * 0.95) = 7 |
6 | round(7 * 0.98) = 7 |
7 | round(7 * 1.00) = 7 |
r | n( r ) |
---|---|
0 | 0 |
1 | 790 |
2 | 0 |
3 | 1023 |
4 | 0 |
5 | 850 |
6 | 985 |
7 | 448 |
如上图,第一幅图为原始图像的直方图,中间图像为变换函数,最右边图像为直方图均衡后的图像直方图。可以看到,在均衡后,直方图没有达到完全的均匀分布,这是因为数字图像的灰度级是离散的,所以才造成了这种情况。
与连续形式不同,一般不能证明离散变换能产生均匀概率密度函数的离散值(均匀直方图)。
直方图均衡化具有完全 “自动化” 的特点,即直方图均衡化不需要同以往的灰度变化那样选择变换函数的类型并设置参数,只需要输入图像的直方图即可。计算的简单性是直方图均衡化的一个优点。
左图显示了四幅图像,以及对这些图像中的每一个执行直方图均衡化之后的结果。前三种结果显示了重要改进效果。直方图均衡化在第四幅图像中没有在视觉上产生重要的不同,这是因为这幅图像的直方图已经扩展到了全部灰度级范围。
上图是这四幅图像的灰度级变换曲线,横坐标为原图中的灰度级,纵坐标为通过直方图均衡化得到的归一化的灰度级。可以看到,前三幅图像的原图像灰度级都集中在一个小的范围内,通过直方图均衡化后,灰度级映射到了整个灰度级范围,所以变换前后的图像进行对比可以看到显著的提升,而第四幅图像原图中的灰度级就分布在全部的灰度级范围,所以直方图均衡化前后对于图像的效果没有显著性的提升。
《数字图像处理(第三版)》 第三章 数字图像处理 笔记3 (直方图处理 - 直方图均衡)相关推荐
- 《CSS权威指南第三版》第二章的读书笔记
第2章 选择器 CSS的主要优点,就是很容易向所有同类型的元素应用一组样式. 1. 基本规则 修改所有h2: h2{color:gray;} a. 规则结构 每个规则有两个基本部分:选择器 ...
- 算法导论第三版第十一章11.1-4
算法导论第三版第十一章11.1-4 我们希望在一个非常大的数组上,通过利用直接寻址的方式来实现一个字典.开始时,该数组中可能包含一些无用信息,但要堆整个数组进行初始化时不太实际的,因为该数组的规模太大 ...
- 王爽 汇编语言第三版 第10章 call 和 ret 指令 以及 子程序设计
第10章 call 和 ret 指令 10.1 ret 和 reft 指令 call 和 ret 指令都是转移指令,他们都修改 IP,或同事修改 CS 和 IP .他们经常被共同来实现子程序的设计. ...
- 王爽 汇编语言第三版 第7章 --- 更灵活的定位内存地址的方法(可以理解为 数组形式的内存定位)
汇编语言(第三版)王爽著 的十二个实验:https://blog.csdn.net/OrangeHap/article/details/89791064 大小端 字节对齐 对于 arm,intel 这 ...
- 构建之法 第三版 第3章 部分草稿 (剪牦牛毛、老程序员去金融公司的故事)...
/* * 这是 <构建之法> 第三版的草稿 */ 3.2 软件工程中的几种思维误区 正如我们在第一章讲的那样,软件有很多特性,软件开发有它自己独特的规律,如果不了解这些特性,软件工程师就会 ...
- 机器人学导论(第三版) 第三章 操作臂运动学 3.5操作臂运动学
机器人学导论(第三版) 学习记录 第三章 操作臂运动学 3.5操作臂运动学 中间坐标系{P},{Q}和{R}的位置 想把坐标系{i}中定义的矢量转化成坐标系{i-1}中的描述,这个变换矩阵可以写成 i ...
- 王爽《汇编语言》第三版 第三章 内存访问
3.1 内存中字的存储 在0地址处开始存放20000(4E20H): 注意:0号单元是低地址单元,1号单元是高地址单元. 任何两个地址连续的内存单元,N号单元和 N+1号单元,可以将它们看成两个内存单 ...
- 大学英语精读第三版(第二册)学习笔记(原文及全文翻译)——4B - Alfred Nobel — A Man of Contrasts(艾尔弗雷德·诺贝尔——一个反差鲜明的人)
Unit 4B - Alfred Nobel - A Man of Contrasts Alfred Nobel - A Man of Contrasts Alfred Nobel, the Swed ...
- C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)
C++Primer(第五版)第6章函数的阅读笔记及课后习题答案总结,课后习题答案是自己学习写出来的,如果有误,欢迎指正 还不完整,后续会更新添加 阅读笔记 C++ Primer 第五版 第6章 6.1 ...
- 数字信号处理实验matlab版答案刘舒帆,数字信号处理实验(MATLAB版) 刘舒帆,费诺,陆辉 西安电子科技大学出版社 9787560620060...
商品描述: 基本信息 书名:数字信号处理实验(MATLAB版) 原价:31.00元 作者:刘舒帆,费诺,陆辉 著 出版社:西安电子科技大学出版社 出版日期:2013-7-1 ISBN:97875606 ...
最新文章
- 【numpy】协方差计算
- 2、ShardingSphere 之 Sharding-JDBC实现水平分表
- 字符串多模式精确匹配(脏字/敏感词汇搜索算法)——TTMP算法 之理论(转)...
- Windows API的时间结构体、时间转换及时间获取
- Tomcat的安装和运行
- 关于各种JOIN连接的解释说明【原创】
- 遮掩java_css之图片下方定位遮掩层
- MySQL 之 explain
- fcpx插件:Cinematic Tracking Title for Mac电影字幕标题动画
- 基于MySQL和JavaFX的学生管理系统
- 如何在Python中创建常量?
- Flink 流批一体在阿里的落地
- 我的 fedora 14 安装备忘
- k touch for android,k touch for android
- STC学习:红外测试
- 通信系统设计中的凸优化问题
- 计数器代码php,php的计数器程序_php
- 计算机电源安装,手把手教你正确安装主机电源
- 微信小程序简单爱心点赞动画
- 苹果手机点击input标签页面放大的解决方法