灰度直方图均衡化----python实现
直方图均衡化是使用图像直方图进行对比度调整的图像处理的方法。
该方法通常会增加许多图像的整体对比度,尤其是当图像的可用数据由接近的对比度值表示时。 通过这种调整,强度可以更好地分布在直方图上。 这允许局部对比度较低的区域获得较高的对比度。 直方图均衡化通过有效地分散最频繁的强度值来实现这一点。
实现原理参考自直方图均衡(维基百科)
第一种是自己写的,消耗时间长。第二种参考自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实现的更多相关文章
- 图解直方图均衡化及其Python实现
在理解直方图均衡化的过程中,参考了一些书籍和博客,让人困惑的是,笔者对于直方图的理解还是停留在表面,并没有深入理解其内涵.因此,本文拟结合图片对直方图的概念进行阐述,并给出其Python实现,最后对她 ...
- S0.6 直方图均衡化
S0.6 直方图均衡化 直方图均衡化能提高图像的质量 累积直方图 这是后面均衡化所要知道的先验知识. 如果说直方图统计的是等于像素值的数量,那么累积直方图统计的就是小于等于像素值的数量 均衡化步骤 我 ...
- opencv —— equalizeHist 直方图均衡化实现对比度增强
直方图均匀化简介 从这张未经处理的灰度图可以看出,其灰度集中在非常小的一个范围内.这就导致了图片的强弱对比不强烈. 直方图均衡化的目的,就是把原始的直方图变换为在整个灰度范围(0~255)内均匀分布的 ...
- 灰度图的直方图均衡化(Histogram Equalization)原理与 Python 实现
原理 直方图均衡化是一种通过使用图像直方图,调整对比度的图像处理方法:通过对图像的强度(intensity)进行某种非线性变换,使得变换后的图像直方图为近似均匀分布,从而,达到提高图像对比度和增强图片 ...
- 数学之路-python计算实战(14)-机器视觉-图像增强(直方图均衡化)
我们来看一个灰度图像,让表示灰度出现的次数,这样图像中灰度为 的像素的出现概率是 是图像中全部的灰度数, 是图像中全部的像素数, 实际上是图像的直方图,归一化到 . 把 作为相应于 的累计概率 ...
- Python实现图像直方图均衡化算法
title: "Python实现图像直方图均衡化算法" date: 2018-06-12T17:10:48+08:00 tags: [""] categorie ...
- python——直方图均衡化
from PIL import Image from pylab import * from numpy import * def histeq(im,nbr_bins = 256): "& ...
- python实现直方图均衡化,理想高通滤波与高斯低通滤波
写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验二,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验二. 由于时间紧张,代码没有进行任何优化, ...
- opencv——图像的灰度处理(线性变换/拉伸/直方图/均衡化)
实验内容及实验原理: 1.灰度的线性变换 灰度的线性变换就是将图像中所有的点的灰度按照线性灰度变换函数进行变换.该线性灰度变换函数是一个一维线性函数:f(x)=a*x+b 其中参数a为线性函数的斜率, ...
随机推荐
- window 下拉取github项目失败 (Permission denied (publickey))
原因是github 帐号ssh 失效或者没有配置 1.找到gitcmd 并进入 2.在gitcmd 下切换到 安装git路劲\Git\usr\bin 3.提示在C:\Users\Administrat ...
- vim下撤销操作.选中复制等操作
vim撤销操作:u vim恢复操作:ctrl+r 使用normal模式下的 v命令,进入visual模式,v+ j/k/h/l 进行文本选中 对于选中的文本进行如下按键: (1.1)d -- ...
- poj 1664 放苹果 递归
题目链接: http://poj.org/problem?id=1664 题目描述: 有n个苹果,m个盒子,盒子和苹果都没有顺序,盒子可以为空,问:有多少种放置方式? 解题思路: 当前有n个苹果,m个 ...
- New Year Tree CodeForces -620E
这个题有一个技巧:把颜色压到一个long long 上. #include<cstdio> #include<algorithm> #include<cstring> ...
- treap板子(洛谷 P3369 【模板】普通平衡树(Treap/SBT))
由于有相同的数,每个节点加一个权值表示此数出现的次数 #include<cstdio> #include<cstdlib> #include<ctime> #inc ...
- 修改SolrCloud在ZooKeeper中的配置文件操作记录
修改SolrCloud在ZooKeeper中的配置文件操作记录. 命令执行目录: /opt/solr-/server/scripts/cloud-scripts/ 1.下载配置文件 ./zkcli., ...
- Latex排版工具的使用(二) 分类: Latex 2014-06-14 23:01 389人阅读 评论(0) 收藏
Latex可以支持中文排版,如何实现中文支持可以到网上查找教程. 下面编写一段对中文排版的Latex源文档: 新建文件second.tex: \documentclass{article} \usep ...
- java使用正则表达式对注册页面进行验证
package regex; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Patt ...
- 转 PHP in_array() 函数
实例 在数组中搜索值 "Glenn" ,并输出一些文本: <?php $people = array("Bill", "Steve", ...
- JUnit单元测试&注解
①测试方法上必须使用@Test进行修饰 ②测试方法必须使用public void 进行修饰,不能带任何的参数 ③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开 ④测试类所在的包 ...