直方图均衡化的英文名称是Histogram Equalization.
  图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。
  直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
  缺点:
  1)变换后图像的灰度级减少,某些细节消失;
  2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
  直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
  这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
  这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景杂讯的对比度并且降低有用信号的对比度。
  直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):
  (1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。
  (2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致

性。
  累积分布函数(cumulative distribution function,CDF)即可以满足上述两个条件,并且通过该函数可以完成将原图像f的分布转换成g的均匀分布。此时的直方图均衡化映射函数为:
  gk = EQ(fk) = (ni/n) = pf(fi) ,
  (k=0,1,2,……,L-1)
  上述求和区间为0到k,根据该方程可以由源图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算出的累计直方图分布求出fk到gk的灰度映射关系。在重复上述步骤得到源图像所有灰度级到目标图像灰度级的映射关系后,按照这个映射关系对源图像各点像素进行灰度转换,即可完成对源图的直方图均衡化。

关于编程实现,同样是不调用matlab库函数,自己编程实现。这样可以更深刻地理解直方图均衡化技术,提高编程能力。

实现代码(matlab):

%直方图均衡化
I = imread('rice.png');
[height,width] = size(I);
figure
subplot(221)
imshow(I)%显示原始图像
subplot(222)
imhist(I)%显示原始图像直方图%进行像素灰度统计;
NumPixel = zeros(1,256);%统计各灰度数目,共256个灰度级
for i = 1:heightfor j = 1: widthNumPixel(I(i,j) + 1) = NumPixel(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一end
end
%计算灰度分布密度
ProbPixel = zeros(1,256);
for i = 1:256ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
end
%计算累计直方图分布
CumuPixel = zeros(1,256);
for i = 1:256if i == 1CumuPixel(i) = ProbPixel(i);elseCumuPixel(i) = CumuPixel(i - 1) + ProbPixel(i);end
end
%累计分布取整
CumuPixel = uint8(255 .* CumuPixel + 0.5);
%对灰度值进行映射(均衡化)
for i = 1:heightfor j = 1: widthI(i,j) = CumuPixel(I(i,j));end
endsubplot(223)
imshow(I)%显示原始图像
subplot(224)
imhist(I)%显示原始图像直方图

运行结果:

【数字图像处理】直方图均衡化详解及编程实现相关推荐

  1. 图像直方图均衡化c语言程序,数字图像处理——直方图均衡化

    1.相关了解 直方图均衡化又称为直方图平坦化.直方图均衡化的基本思想是将原始图像的不均衡的直方图变换为均匀分布的形式.即将输入图像转化为在每一灰度级上都有相同的像素点数(即输出的直方图是平坦的,其分布 ...

  2. 数字图像处理 直方图均衡化 MATLAB实验

    一.原理 直方图均衡化是通过对原图像进行某种变换使原图像的灰度直方图修正为均匀的直方图的一种方法. 二.步骤 ①读入原图像huafen.jpg,并显示图像及其直方图: ②对图像进行直方图均衡化处理,并 ...

  3. 数字图像处理——直方图均衡化

    直方图均衡化 直方图均衡化(Histogram equalization)是一种常用的灰度变换方法. 基本原理 直方图均衡化的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行 ...

  4. 【MATLAB图像处理实用案例详解】目录

    未来一个月的任务主要是GAN生成对抗网络理论部分+代码实战和MATLAB图像处理实用案例详解. 做生成对抗网络主要是因为我的研究方向涉及到这个部分,因此将其作为主要研究内容,但由于研究方向的私密性问题 ...

  5. python画直方图成绩分析-python plotly绘制直方图实例详解

    计算数值出现的次数 import cufflinks as cf cf.go_offline() import numpy as np import pandas as pd set_slippage ...

  6. [转]Hadoop集群_WordCount运行详解--MapReduce编程模型

    Hadoop集群_WordCount运行详解--MapReduce编程模型 下面这篇文章写得非常好,有利于初学mapreduce的入门 http://www.nosqldb.cn/1369099810 ...

  7. python画直方图-python plotly绘制直方图实例详解

    计算数值出现的次数 import cufflinks as cf cf.go_offline() import numpy as np import pandas as pd set_slippage ...

  8. 基于多相滤波器的数字信道化算法详解(Python, Verilog代码已开源)

    基于多相滤波器的数字信道化算法详解 推导过程 总结 仿真 本文详细介绍了基于多相滤波器的数字信道化算法的推导过程, 如果您在阅读的过程中发现算法推导过程中有任何错误, 请不吝指出. 此外, 进入我的G ...

  9. 【卷积神经网络CNN 实战案例 GoogleNet 实现手写数字识别 源码详解 深度学习 Pytorch笔记 B站刘二大人 (9.5/10)】

    卷积神经网络CNN 实战案例 GoogleNet 实现手写数字识别 源码详解 深度学习 Pytorch笔记 B站刘二大人 (9.5/10) 在上一章已经完成了卷积神经网络的结构分析,并通过各个模块理解 ...

最新文章

  1. Linux内存、Swap、Cache、Buffer详细解析
  2. [C++]Call virtual member function in constructor or destructor
  3. 服务器中毒后老板差点把我开除了。。。
  4. linux的vim显示E172,Linux命令:vim
  5. 一篇文章学懂Shell脚本,最简明的教程在这里
  6. [VSTO系列]三、简单的UI设计/QQ联系人导出(下)
  7. 程序员必须要掌握的十大经典算法
  8. 资源 | Deeplearning.ai课程与笔记汇总
  9. iOS ReactiveCocoa 最全常用API整理(可做为手册查询)
  10. eclipse打开当前文件夹
  11. QQ 小程序来了,怎么做?
  12. vue添加滚动事件,解决简书Carol_笑一笑方案中vue移除滚动事件失效的问题
  13. 查找整数的位置c语言,1-1 编程总结:查找整数
  14. STM32串口通讯——中断方式
  15. C语言求解鸡兔同笼问题
  16. socket服务器主动下发消息,socket服务器主动发送消息给客户端
  17. sql之分组TOPN
  18. RK3399平台开发系列讲解(电源管理篇)11.10、PMIC(生产者)驱动数据结构体
  19. 设计模式---003代理模式(转载自我的老师 Alley-巷子)
  20. html实现学生成绩等级划分,【小学生成绩等级】_小学生成绩等级评价制度

热门文章

  1. 学习OpenVINO笔记之Inference Engine
  2. scala中class与object区别.
  3. [SAP2000] 简单桁架受力求解过程
  4. python 目录 文件名_python目录与文件名操作
  5. ie浏览器在线使用_微软加速反IE战略,超过1000个网站将拒绝渲染
  6. JavaScript读写.txt文档 - 方法篇
  7. js对象(Object)和字符串(String)互转 - 代码篇
  8. java集合转js数值_前端js调用接口转换Map数组数据
  9. python 倒数_【IT专家】python实现文件倒数N行读取
  10. Bandicam_v4.6.5便携特别版 高清视频录制工具