灰度图的直方图均衡化(Histogram Equalization)原理与 Python 实现
原理
直方图均衡化是一种通过使用图像直方图,调整对比度的图像处理方法;通过对图像的强度(intensity)进行某种非线性变换,使得变换后的图像直方图为近似均匀分布,从而,达到提高图像对比度和增强图片的目的。普通的直方图均衡化采用如下形式的非线性变换:
设 f 为原始灰度图像,g 为直方图均衡化的灰度图像,则 g 和 f 的每个像素的映射关系如下:

其中,L 为灰度级,通常为 256,表明了图像像素的强度的范围为 0 ~ L-1;
pn 等于图像 f 中强度为 n 的像素数占总像素数的比例,即原始灰度图直方图的概率密度函数;
fi,j 表示在图像 f 中,第 i 行,第 j 列的像素强度;gi,j 表示在图像 g 中,第 i 行,第 j 列的像素强度.
Python 实现
#!/usr/bin/env python
# -*- coding: utf8 -*-
"""
# Author: klchang
# Date: 2018.10
# Description:
histogram equalization of a gray image.
"""
from __future__ import print_function
import numpy as np
import matplotlib.pyplot as plt def histequ(gray, nlevels=256):
# Compute histogram
histogram = np.bincount(gray.flatten(), minlength=nlevels)
print ("histogram: ", histogram) # Mapping function
uniform_hist = (nlevels - 1) * (np.cumsum(histogram)/(gray.size * 1.0))
uniform_hist = uniform_hist.astype('uint8')
print ("uniform hist: ", uniform_hist) # Set the intensity of the pixel in the raw gray to its corresponding new intensity
height, width = gray.shape
uniform_gray = np.zeros(gray.shape, dtype='uint8') # Note the type of elements
for i in range(height):
for j in range(width):
uniform_gray[i,j] = uniform_hist[gray[i,j]] return uniform_gray if __name__ == '__main__':
fname = "320px-Unequalized_Hawkes_Bay_NZ.png" # Gray image
# Note, matplotlib natively only read png images.
gray = plt.imread(fname, format=np.uint8)
if gray is None:
print ("Image {} does not exist!".format(fname))
exit(-1) # Histogram equalization
uniform_gray = histequ(gray) # Display the result
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.set_title("Raw Image")
ax1.imshow(gray, 'gray')
ax1.set_xticks([]), ax1.set_yticks([]) ax2.set_title("Histogram Equalized Image")
ax2.imshow(uniform_gray, 'gray')
ax2.set_xticks([]), ax2.set_yticks([]) fig.tight_layout()
plt.show()
原始图片 320px-Unequalized_Hawkes_Bay_NZ.png

结果显示

参考资料
[1]. Histogram_equalization - Wikipedia. https://en.wikipedia.org/wiki/Histogram_equalization
[2]. Histogram Equalization. https://www.math.uci.edu/icamp/courses/math77c/demos/hist_eq.pdf
灰度图的直方图均衡化(Histogram Equalization)原理与 Python 实现的更多相关文章
- 图像处理之直方图均衡化及C源码实现
1 直方图均衡化(Histogram Equalization)简介 图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法.直方图拉伸和直方图均衡化是两种最常见的间接 ...
- 直方图均衡化与Matlab代码实现
昨天说了,今天要好好的来解释说明一下直方图均衡化.并且通过不调用histeq函数来实现直方图的均衡化. 一.直方图均衡化概述 直方图均衡化(Histogram Equalization) 又称直方图平 ...
- opencv图像直方图均衡化及其原理
直方图均衡化是什么有什么用 先说什么是直方图均衡化,通俗的说,以灰度图为例,原图的某一个像素为x,经过某个函数变为y.形成新的图.新的图的灰度值的分布是均匀的,这个过程就叫直方图均衡化. 图像直方图均 ...
- 图解直方图均衡化及其Python实现
在理解直方图均衡化的过程中,参考了一些书籍和博客,让人困惑的是,笔者对于直方图的理解还是停留在表面,并没有深入理解其内涵.因此,本文拟结合图片对直方图的概念进行阐述,并给出其Python实现,最后对她 ...
- OpenCV计算机视觉学习(9)——图像直方图 & 直方图均衡化
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 1, ...
- python——直方图均衡化
from PIL import Image from pylab import * from numpy import * def histeq(im,nbr_bins = 256): "& ...
- 直方图均衡化CImg实现
这篇博客是关于试用CImg库来实现灰度图和彩色图的直方图均衡化操作.感觉效果还不错,除了彩色图在均衡化时会有一定的色彩失真. C++代码实现: // // hEqualization.hpp // 直 ...
- 直方图均衡化的 C++ 实现(基于 openCV)
这是数字图像处理课的大作业,完成于 2013/06/17,需要调用 openCV 库,完整源码和报告如下: #include <cv.h> #include <highgui.h&g ...
- python实现直方图均衡化,理想高通滤波与高斯低通滤波
写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化, ...
随机推荐
- Css权重解析
Css权重解析 关于CSS权重,我们需要一套计算公式来去计算,这个就是 CSS Specificity,我们称为CSS 特性或称非凡性,它是一个衡量CSS值优先级的一个标准 具体规范入如下: spec ...
- MongoDB运行状态、性能监控,分析
转载自这位仁兄:地址 mongostat详解 mongostat是mongdb自带的状态检测工具,在命令行下使用.它会间隔固定时间获取mongodb的当前运行状态,并输出.如果你发现数据库突然变慢或者 ...
- win10下用Linux搭建python&nodejs开发环境
Win10下用自带Linux系统搭建开发环境 Win10下用自带Linux系统搭建开发环境启用Linux老版本(win10 1709之前):新版本(win10 1709之后)卸载linux老版本新版本 ...
- bootstrap table 修改table内容时设置表头与表格对齐
第一:取消表头初始化解决表头和内容不对齐问题,取消后表头将不固定. 在你对应的js(bootstrap-table.min.js或bootstrap-table.js,我用的bootstrap-tab ...
- VMware Workstation 11 中 Ubuntu 14.04 的 VMware Tools 问题 :没有显示共享文件夹
症状:主要表现在Win7中用VM11安装的Ubuntu14.04中,安装完自带的VMware Tools之后,/mnt/hgfs 中没有前面已经设置好的共享文件夹. 仔细查看了安装过程,发现在 ...
- SpringMvc注解开发
1.四大注解的定义 (1)Controller注解:该注解使用在一个类上面,参数为value,值为访问该controller的名称,默认为空,如果为空 则值为该controller类名的首字母小写的值 ...
- C++ STL使用说明
标准模板库(Standard Template Library,STL)是一系列通用化组件的集合,包括容器(container).算法(algorithm)和迭代器(iterator). 迭代器ite ...
- Sql-Server触发器,根据条件匹配另一个表中的字段
USE [CDM] GO /****** Object: Trigger [dbo].[UpdateAkisFlight] Script Date: 2018/6/14 16:43:29 ****** ...
- Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
sudo chown -R username /usr/local/lib/node_modules 注:username要具有/usr/local/lib/node_modules的读写权限
- HDFS要点剖析
谈到大数据,不得不提的一个名词是"HDFS".它是一种分布式文件存储系统,其系统架构图如下图所示: 从图中可以了解到的几个关键概念 元数据(MetaData) 机架(Rock) 块 ...