直方图均衡化

1、背景

由于图像的直方图统计信息结果其对比度比较窄,大部分的像素都集中在某一个区域内,因而造成图像过亮或者是过暗。而对于一部比较好的图像,其对比度是比较高的,也就是图像的像素的灰度会分布比较均匀。因此要想改善上述图像问题就必须想办法将这些像素进行重新均匀分布。这很容易让人想到数学上的分布函数。涉及概率论的知识。

2、均衡化过程

当然我们均衡化过程是不能改变其灰度值的范围。均衡化的过程图如下:

3、为什么均衡化可以解决问题

一副好的图片是表现出良好的细节信息,就希望每个灰度值出现的概率都均等(最大熵)。假设我们有四个灰度级a,b,c,d,做个类比的话可以将她们理解为四个描述情感的词喜、怒、哀、乐。一般情况下我们得到的直方图可认为是p(a)=0.5,p(b)=0.5,p(c)=0,p(d)=0,而均衡化后的直方图是p(a)=0.25,p(b)=0.25,p(c)=0.25,p(d)=0.25. 如果我们以均衡化前的词描述人的情感则只有喜、怒,而均衡化后的词则有喜、怒、哀、乐。试问,哪种情形能够描述人更细微的情感变化呢?这也是笔者认为直方图均衡化之后能够描述更多图像细节的原因。更进一步,如果一般情况下我们得到的直方图是p(a)=0.4,p(b)=0.4,p(c)=0.1,p(d)=0.1,那这按我们的理解意味什么呢?意味着大部分情况用喜、怒描述人的情感,而哀、乐几乎不用,当然了,如果能够自由运用喜、怒、哀、乐来描述人的情感是最好的哦。

4、运行效果图:

5、数学分析

可以设r原始图像灰度级,s均衡化后图像灰度级,不失一般性可以假设r的取值范围为[0,1]。那么什么是必须满足的约束条件呢?均衡化前后灰度级的意义不能变,也就是说变换前灰度级的含义是由黑到白,那么变换后也应该如此。此外,最好变换前后灰度级的取值范围一致。为使变换后的灰度仍保持从黑到白的单一变化顺序,且变换范围与原先一致,以避免整体变亮或变暗。必须规定:

(1)变换函数T(r)在r属于[0,1]范围内是单值、单调增函数;

(2)对于r属于[0,1],s=T(r)也属于[0,1]

实现的的原理是利用一个单值严格递增的函数作为变换函数,该函数就是使得数据更加分散,把过分散的又可以集合起来。让尖峰压平,让谷底紧凑上升!

对于图像离散型:可以做下面的定义

在灰度直方图均衡化处理中对图像的映射函数可定义为: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)

6、代码(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:height
    for j = 1: width
        NumPixel(I(i,j) + 1) = NumPixel(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
    end
end
%计算灰度分布密度
ProbPixel = zeros(1,256);
for i = 1:256
    ProbPixel(i) = NumPixel(i) / (height * width * 1.0);
end
%计算累计直方图分布
CumuPixel = zeros(1,256);
for i = 1:256
    if i == 1
        CumuPixel(i) = ProbPixel(i);
    else
        CumuPixel(i) = CumuPixel(i - 1) + ProbPixel(i);
    end
end
%累计分布取整
CumuPixel = uint8(255 .* CumuPixel + 0.5);
%对灰度值进行映射(均衡化)
for i = 1:height
    for j = 1: width
        I(i,j) = CumuPixel(I(i,j));
    end
end

subplot(223)
imshow(I)%显示原始图像
subplot(224)
imhist(I)%显示原始图像直方图

参考:

1、http://blog.csdn.net/u012230579/article/details/52824910

直方图均衡化背后的数学相关推荐

  1. 【图像处理】直方图均衡化(附带Matlab及OpenCV3自编程实现代码)

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 直方图均衡化是最基础的图像处理方法之一,也是本人接触图像处理时最先接触到的算法.算法很 ...

  2. 【opencv】20.直方图均衡化的数学原理

    本文只讲数字图像处理,即离散化后的公式,至于积分形式的分析,网上很多. 具体的数学推导可以参考这篇博客直方图均衡化. 如果想自己代码实现直方图均衡化,相关源代码可以参考(不使用api)使用C++实现彩 ...

  3. 图像直方图均衡化(Equalization)数学原理和纯C语言实现

    图像处理入门 C语言生成RGB24格式图像 图像缩放之最近邻内插法 图像直方图均衡化数学原理和程序实现 目录 图像处理入门 一.图像均衡化数学原理 1.转化为数学问题 2.需要用到的知识 3.数学推理 ...

  4. [图像处理] 直方图均衡化原理 - 数学推导

    直方图均衡化 效果 代码 import cv2 as cv import numpy as np import matplotlib.pyplot as pltsrc = cv.imread(&quo ...

  5. 数学之路-python计算实战(14)-机器视觉-图像增强(直方图均衡化)

    我们来看一个灰度图像,让表示灰度出现的次数,这样图像中灰度为 的像素的出现概率是  是图像中全部的灰度数, 是图像中全部的像素数,  实际上是图像的直方图,归一化到 . 把  作为相应于  的累计概率 ...

  6. c++ 绘制函数图像_【图像增强】CLAHE 限制对比度自适应直方图均衡化

    文章来自:微信公众号[机器学习炼丹术]. 文章目录: 1 基本概述 2 竞赛中的CLAHE实现 3 openCV绘制直方图 4 对比度Contrast 5 Contrast Stretching 6 ...

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

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

  8. python高通滤波器设计_python实现直方图均衡化,理想高通滤波与高斯低通滤波

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化, ...

  9. 学习笔记(二)——直方图均衡化和匹配

    本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者: 晨 ...

最新文章

  1. C++写#pragma warning(disable 4786)的作用
  2. 企业部署Windows 7指南
  3. wireshark相关协议详解和nc命令建立对话
  4. Codeforces 997D Cycles in Product (点分治、DP计数)
  5. 钉钉实现企业级微应用免登陆详解
  6. 简单的Flash网络游戏源代码
  7. 笔记本电脑频繁自动重启_电脑老是自动重启,电脑总是自动重启 - 电脑经常自动重启的解决办法 - 安全专题...
  8. 功能最强大的编辑器——vi
  9. Python中hashlib.sha1()和hashlib.MD5()哈希算法的区别
  10. CodeForces55A - Flea travel 解题报告
  11. firefox os : firefox os vs android
  12. 超好看的粒子效果文字动画特效HTML5源码
  13. oracle修改open_cursors,oracle的open_cursors问题探究
  14. 【研发管理】全面质量管理之石川馨
  15. 华为昇腾系列开发入门教程二:开局一张图,手把手教你鉴“XX”
  16. 惠普计算机配置与选购,惠普笔记本电脑选购常识_惠普笔记本电脑使用常识 -真快乐商城...
  17. Charles主要功能讲解
  18. 视频直播技术干货:一文读懂主流视频直播系统的推拉流架构、传输协议等
  19. 可能比扔物线写得还好的对RxJava的理解
  20. 基于scrapy的qq音乐爬虫

热门文章

  1. 软件测试“摆烂”已经成为常态化,我们应该怎样冲出重围?
  2. BOSS直聘直直4周岁生日会圆满举办
  3. 基于英飞凌TC397芯片Mcal配置之Can模块的配置
  4. bzoj 2069 [ POI 2004 ] ZAW —— 多起点最短路 + 二进制划分
  5. RCNN系列发展历程
  6. KeyboardHolder: macOS系统的输入法切换辅助工具
  7. 2017字节跳动秋招编程题-头条校招
  8. 操作系统春招面试复习之:操作系统概述
  9. 电商相关:SKU概念
  10. 微信公众号软件 php,写公众号文章的软件有哪些?