转载请注明出处。

Histogram Equalization 也就是直方图均衡化, 是一种常用的通过直方图处理来增强图像的方法。

对于一副灰度图像,其像素范围一般在0~255之间,我们记nk(0<=k<=255)为灰度级为k的像素出现的频率,M,N分别为图像的行与列,则P(rk)=nk/MN我们得到归一化的灰度直方图。对于归一化的概率直方图ΣP(rk) =1

下面左边几幅图像分别为暗图像,亮图像,低对比图像已经高度比图像 右边为其所对应的归一化灰度分布直方图

可以看出对于强对比的图像,其灰度直方图分布比较均匀,因此我们想通过一种传递函数实现其他三种情况下直方图的均匀分布。

所以给出一个任意分布的直方图如下左,我们怎样才能得到它的均衡分布如下右图呢

这里我们就需要找到一种从左到右的transform表达式把一副图像中的每个像素通过表达式得到其均衡化的值

为了实现这种映射,我们这里规定T(r) 必须为增函数,所以说映射后的像素值一定不小于原值。采用增函数映射的原因是为了防止灰度反变换是出现人为缺陷。如下为单调递增函数,左图为非严格增函数,所以会出现多个值映射到一个值的现象,右图为严格单增函数,其映射为一一对应关系。

下面推导如何通过单增函数映射实现均衡分布

一副灰度图像的灰度级可以看成是0~255区间内的随机变量,用Pr(r)和Ps(s)分别表示其映射前后的概率密度函数,T(r)为映射函数,那么在P(r),T(r)已知的条件下,且T(r)连续可微,那么其对应关系可以用下式表示:

所以输出灰度的PDF就又输入灰度的PDF以及传递函数决定,我们又有

其中T(r) 我们用下式表示也就是输入灰度的CDF(累积分布函数)

根据CDF性质我们知道其一定为单增函数并且积分上限为L-1时积分为1,所以符合变换函数的要求。对其求导得到如下

据此dr/ds我们也可以轻易得到,然后带人前式我们有

到此我们可以证明输出灰度的PDF是均匀分布!

下面是MATLAB实现

function [I2,H] = histeq(I,bin)
I2 = zeros(size(I));
[row,col] = size(I);
cdf = zeros(bin,1);
h = zeros(bin,1);
hist = imhist(I,bin);
% calculate cdf
for g = 1:bin
cdf(g) = 0;
for i=1:1:g
cdf(g) = cdf(g) + hist(i);
end
end
%nomorlize
for k = 1:bin
h(k) = (cdf(k)-1)/((row*col)-1) * 255;
end
for k = 1:bin
h(k) = round(h(k)) + 1;
end
% remap to the new image
for r = 1:row
for c = 1:col
idx = (I(r,c)/(256/bin)) + 1;
I2(r,c) = h(idx);
end
end I2 = uint8(I2);
H = imhist(I2);

效果如下图

Histogram Equalization的更多相关文章

  1. 灰度图像--图像增强 直方图均衡化(Histogram equalization)

    灰度图像--图像增强 直方图均衡化(Histogram equalization) 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些 ...

  2. Paper | Contrast Limited Adaptive Histogram Equalization

    目录 1. 背景 1.1. 对比度和直方图均衡HE 1.2. HE的问题 1.3. AHE 1.4. 底噪问题 2. CLAHE 2.1. 效果展示 2.2. 算法格式和细节 论文:Contrast ...

  3. 灰度图的直方图均衡化(Histogram Equalization)原理与 Python 实现

    原理 直方图均衡化是一种通过使用图像直方图,调整对比度的图像处理方法:通过对图像的强度(intensity)进行某种非线性变换,使得变换后的图像直方图为近似均匀分布,从而,达到提高图像对比度和增强图片 ...

  4. 彩色图像直方图均衡(Histogram Equalization)

    直方图均衡(Histogram Equalization) 一般步骤: 1.统计直方图每个灰度级出现的次数(概率) 2.累计归一化的直方图 3.计算新的像素值 重要:彩色直方图均衡不能对RGB分别做再 ...

  5. 限制对比度自适应直方图均衡(Contrast Limited Adaptive histgram equalization/CLAHE)

    转自:http://www.cnblogs.com/Imageshop/archive/2013/04/07/3006334.html 一.自适应直方图均衡化(Adaptive histgram eq ...

  6. [OpenCV] Image Processing - Grayscale Transform & Histogram

    颜色直方图 首先,先介绍一些Hist的基本使用. Ref:[OpenCV]数字图像灰度直方图 官方文档:https://docs.opencv.org/trunk/d8/dbc/tutorial_hi ...

  7. 数字图像处理实验(16):PROJECT 06-03,Color Image Enhancement by Histogram Processing 标签: 图像处理MATLAB 2017

    实验要求: Objective: To know how to implement image enhancement for color images by histogram processing ...

  8. 直方图均衡算法(Histogram Equalized)

    Lab1: Histogram Equalization 1. 实验环境(C++) 操作系统版本 MacOS Catalina 10.15 OpenCV4.0 (imgcodecs | core | ...

  9. Histogram Processing

    目录 HISTOGRAM EQUALIZATION 代码示例 HISTOGRAM MATCHING (SPECIFICATION) 其它 Gonzalez R. C. and Woods R. E. ...

随机推荐

  1. Attach file to database

    D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA databaseName.mdf databaseName.l ...

  2. C51系列RAM寄存器表

    特殊功能寄存器地址表 SFR 符号 字节 地址 位地址和位名称 D7 D6 D5 D4 D3 D2 D1 D0 P0口 P0 80H P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0. ...

  3. Delphi:窗体自适应屏幕分辨率(根据预设值的比例改变)

    delphi 程序适应屏幕分辨率,先在表单单元的Interface部分定义两个常量, 表示设计时的屏幕的宽度和高度(以像素为单位). 在表单的Create事件中先判断 当前分辨率是否与设计分辨率相同, ...

  4. JS Map 简单实现

    /* * MAP对象,实现MAP功能 * * 接口: * size() 获取MAP元素个数 * isEmpty() 判断MAP是否为空 * clear() 删除MAP所有元素 * put(key, v ...

  5. HDOJ 1164 Eddy's research I(拆分成素数因子)

    Problem Description Eddy's interest is very extensive, recently he is interested in prime number. Ed ...

  6. Android AlertDialog全屏显示去除白色边框

    使用styles.xml风格: Style.xml代码 <style name="FullScreenDialog" parent="android:style/T ...

  7. HTML5 简单实现刮刮乐效果

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 修改Android中strings.xml文件, 动态改变数据

    有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...

  9. VC用OLE方式读写Excel

    前几天要做一个项目,需要读取Excel中的数据.从网上查资料发现,主要是有两种方式.一是把Excel表当成数据库使用ODBC读写,这样操作起来就跟操作Access数据库似的.但这种方式效率比较低.另一 ...

  10. Qt之加密算法

          在写这篇文章之前,我曾反复思量关于加密的叫法是否准确,更为严格来说,应该是密码散列-将数据(如中英文字母.特殊字符)通过复杂的算法转换为另一种固定长度的值.   QCryptographi ...