直方图均衡化是使用图像直方图进行对比度调整的图像处理的方法。

该方法通常会增加许多图像的整体对比度,尤其是当图像的可用数据由接近的对比度值表示时。 通过这种调整,强度可以更好地分布在直方图上。 这允许局部对比度较低的区域获得较高的对比度。 直方图均衡化通过有效地分散最频繁的强度值来实现这一点。

实现原理参考自直方图均衡(维基百科)

第一种是自己写的,消耗时间长。第二种参考自opencv-python的直方图均衡

import cv2
import numpy as np def equalizationByLoop(img):
a, b = img.shape
flatten = np.reshape(img, [-1, ])
img_list = flatten.tolist() # 获取出现的灰度值
img_set = np.unique(img)
img_set = np.sort(img_set) # 获取灰度值出现次数
cdf = []
for i in img_set:
cdf.append(img_list.count(i))
cdf = np.array(cdf) # 累积分布函数和计算均衡化
cdf = np.cumsum(cdf)
cdf_min = np.min(cdf)
cdf = (cdf-cdf_min)/(len(img_list)-cdf_min)*255 # 获取新图像
for x in range(a):
for y in range(b):
index = np.argwhere(img_set == img[x][y])
img[x][y] = cdf[index]
return img def equalizationByNumpy(img):
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
# hist是亮度值出现次数的统计
cdf = hist.cumsum()
# cdf是出现次数的累积分布函数
# 如果高灰度值没有次数,但累计分布函数会把它加入。但最后在索引生成新图像时舍去 # 均衡化处理
cdf_m = np.ma.masked_equal(cdf, 0)
cdf_m = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min())
cdf = np.ma.filled(cdf_m, 0).astype('uint8') # 生成新图像
img2 = cdf[img] return img2 def main():
img = cv2.imread('leno.jpg', cv2.IMREAD_GRAYSCALE)
new_img = np.copy(img)
# 处理时间长
# new_img = equalizationByLoop(new_img)
new_img = equalizationByNumpy(new_img)
cv2.imshow('img', img)
cv2.imshow('new img', new_img)
cv2.waitKey(0)
cv2.destroyAllWindows() if __name__ == '__main__':
main()

灰度直方图均衡化----python实现的更多相关文章

  1. 图解直方图均衡化及其Python实现

    在理解直方图均衡化的过程中,参考了一些书籍和博客,让人困惑的是,笔者对于直方图的理解还是停留在表面,并没有深入理解其内涵.因此,本文拟结合图片对直方图的概念进行阐述,并给出其Python实现,最后对她 ...

  2. S0.6 直方图均衡化

    S0.6 直方图均衡化 直方图均衡化能提高图像的质量 累积直方图 这是后面均衡化所要知道的先验知识. 如果说直方图统计的是等于像素值的数量,那么累积直方图统计的就是小于等于像素值的数量 均衡化步骤 我 ...

  3. opencv —— equalizeHist 直方图均衡化实现对比度增强

    直方图均匀化简介 从这张未经处理的灰度图可以看出,其灰度集中在非常小的一个范围内.这就导致了图片的强弱对比不强烈. 直方图均衡化的目的,就是把原始的直方图变换为在整个灰度范围(0~255)内均匀分布的 ...

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

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

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

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

  6. Python实现图像直方图均衡化算法

    title: "Python实现图像直方图均衡化算法" date: 2018-06-12T17:10:48+08:00 tags: [""] categorie ...

  7. python——直方图均衡化

    from PIL import Image from pylab import * from numpy import * def histeq(im,nbr_bins = 256): "& ...

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

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

  9. opencv——图像的灰度处理(线性变换/拉伸/直方图/均衡化)

    实验内容及实验原理: 1.灰度的线性变换 灰度的线性变换就是将图像中所有的点的灰度按照线性灰度变换函数进行变换.该线性灰度变换函数是一个一维线性函数:f(x)=a*x+b 其中参数a为线性函数的斜率, ...

随机推荐

  1. bzoj 3456: 城市规划【NTT+多项式求逆】

    参考:http://blog.miskcoo.com/2015/05/bzoj-3456 首先推出递推式(上面的blog讲的挺清楚的),大概过程是正难则反,设g为n个点的简单(无重边无自环)无向图数目 ...

  2. VI/VIM修改Tab为4个空格

    配置方法 在当前用户目录下创建或修改~/.vimrc Root用户下修改/etc/virc 和 /etc/vimrc set ts= set softtabstop= set expandtab se ...

  3. layui table 详细讲解

     layui.use('table', function () {             var table = layui.table;             /*第一种原始写法*/       ...

  4. mysql 安装命令

    mysqld install MySQL --defaults-file="D:\worksoft\mysql-5.7.17-winx64\my-default.ini" D:\w ...

  5. Ubuntu An error occurred,please run Package Manager..

    转自https://blog.csdn.net/idealcitier/article/details/78294137 An error occurred,please run Package Ma ...

  6. PostgreSQL 9.6.2版本在centOS下的安装和配置

    1.如果有用yum安装过旧版,卸载掉: yum remove postgresql* 2.更新一下yum: sudo yum update 3.去 官网 找到 适合你系统 的资源的下载地址,然后使用w ...

  7. Vasiliy's Multiset CodeForces -706D || 01字典树模板

    就是一个模板 注意这题有一个要求:有一个额外的0一直保持在集合中 #include<cstdio> #include<algorithm> using namespace st ...

  8. Latex排版工具的使用(二) 分类: Latex 2014-06-14 23:01 389人阅读 评论(0) 收藏

    Latex可以支持中文排版,如何实现中文支持可以到网上查找教程. 下面编写一段对中文排版的Latex源文档: 新建文件second.tex: \documentclass{article} \usep ...

  9. fastboot命令详解

    Android手机分区(每个分区都有相应的img文件对应):开机启动画面区(splash1),数据恢复区(recovery),内核区(boot), 系统区(system),数据缓存区(cache),用 ...

  10. Android 图片文件和Bitmap之间的转换

    String filePath="c:/01.jpg"; Bitmap bitmap=BitmapFactory.decodeFile(filePath); 如果图片过大,可能导致 ...