python 灰度直方图_数字图像处理灰度变换之灰度直方图及python实现
图像灰度直方图
灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。直方图显示图像数据时会以左暗右亮的分布曲线形式呈现出来。横坐标是灰度级,纵坐标是该灰度级出现的频率。图像的对比度是通过灰度级范围来度量的,而灰度级范围可通过观察灰度直方图得到,灰度级范围越大代表对比度越高;反之对比度越低,低对比度的图像在视觉上给人的感觉是看起来不够清晰,所以通过算法调整图像的灰度值,从而调整图像的对比度是有必要的。
获得图像的灰度直方图def calGrayHist(img):
h,w = img.shape[:2]
gray_hist = np.zeros([256], np.uint64)
for i in range(h):
for j in range(w):
gray_hist[img[i][j]] += 1
return gray_hist
不过通常会将纵坐标归一化到[0,1][0,1]区间内,也就是将灰度级出现的频率(像素个数)除以图像中像素的总数,得到归一化灰度直方图,计算公式如下:
其中,
是像素的灰度级,
是具有灰度
的像素的个数,MN是图像中总的像素个数。
直方图均衡化 Histogram Equalization
假如图像的灰度分布不均匀,其灰度分布集中在较窄的范围内,使图像的细节不够清晰,对比度较低。通常采用直方图均衡化及直方图规定化两种变换,使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的。
直方图均衡化,对图像进行非线性拉伸,重新分配图像的灰度值,使一定范围内图像的灰度值大致相等。这样,原来直方图中间的峰值部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较为平坦的直方图。
直方图的均衡化实际也是一种灰度的变换过程,通常均衡化选择的变换函数是灰度的累积概率
全局直方图均衡化def equalizeHist_map(img_gray):#输入必须是灰度图像
h, w = img_gray.shape
#计算灰度直方图
gray_hist = calGrayHist(img_gray)
#计算累加灰度直方图
cumulative_hist = np.zeros([256], np.uint64)
for p in range(256):
if p == 0:
cumulative_hist[p] = gray_hist[p]
else:
cumulative_hist[p] = cumulative_hist[p-1] + gray_hist[p]
#根据累加灰度直方图得到输入灰度级和输出灰度级之间的映射关系
relative_map = np.zeros([256], np.uint8)
coff = 256.0/(h*w)
for p in range(256):
q = coff * float(cumulative_hist[p]) -1
if q < 0:
relative_map[p] = 0
else:
relative_map[p] = math.floor(q)
return relative_map
img = cv2.imread('test.png')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
relative_map = equalizeHist_map(img_gray)
img_result = np.zeros(img.shape, np.uint8)
h,w = img.shape[:2]
for i in range(h):
for j in range(w):
img_result[i][j] = relative_map[img[i][j]]
虽然全局直方图均衡化方法对提高对比度很有效,但是均衡化处理以后暗区域的噪声可能会被放大,变得清晰可见,而亮区域可能会损失信息。为了解决该问题,提出了自适应直方图均衡化(Aptive Histogram Equalization)方法,自适应直方图均衡化首先将图像划分为不重叠的区域块,然后对每一个块分别进行直方图均衡化。
线性变换图像增强的缺点:需要根据不同的应用及图像自身的信息进行合理的选择,可能需要进行多次测试,所以选择合适的参数是相当麻烦的。有时候,需要图像具有某一特定的直方图形状(也就是灰度分布),而不是均匀分布的直方图。直方图正规化也叫做直方图匹配,用于将图像变换为某一特定的灰度分布,也就是其目的的灰度直方图是已知的。这其实和均衡化很类似,均衡化后的灰度直方图也是已知的,是一个均匀分布的直方图;而规定化后的直方图可以随意的指定,直方图正规化就是基于当前图像情况自动选取a和b的值的方法。
————————————————
部分参考自:https://blog.csdn.net/victory_tc/article/details/97361911和https://www.cnblogs.com/wangguchangqing/p/7098213.html
python 灰度直方图_数字图像处理灰度变换之灰度直方图及python实现相关推荐
- python离散余弦变换_数字图像处理(三)—— 离散余弦变换
离散余弦变换(Discrete Cosine Transform)本质上也是离散傅里叶变换(Discrete Fourier Transform),但是只有实数部分.有这样一个性质:如果信号 在给定区 ...
- Win8Metro(C#)数字图像处理--2.31灰度拉伸算法
Win8Metro(C#)数字图像处理--2.31灰度拉伸算法 原文:Win8Metro(C#)数字图像处理--2.31灰度拉伸算法 [函数名称] 灰度拉伸函数GrayStretchProces ...
- 数字图像处理 -灰度变换 之 对数变换(Log Transformation)
本文参考了 以下这篇文章 [数字图像处理]灰度变换--反转,对数变换,伽马变换,灰度拉伸,灰度切割,位图切割 https://blog.csdn.net/zhoufan900428/article/d ...
- Win8 Metro(C#)数字图像处理--3.3图像直方图计算
原文:Win8 Metro(C#)数字图像处理--3.3图像直方图计算 /// <summary>/// Get the array of histrgram./// </summa ...
- 数字图像处理与python实现_数字图像处理学习(2)—— 图像直方图均衡与图像匹配(python实现)...
数字图像处理学习(2)-- 直方图均衡与图像匹配 1. 直方图均衡(Histogram Equalization) 1.1 直方图均衡化概念 1.2 直方图均衡实现简单思路 1.3 直方图均衡实现代码 ...
- python 图像分析自然纹理方向与粗细代码_数字图像处理与Python实现笔记之基础知识...
数字图像处理与Python实现笔记之基础知识 摘要 绪论 1 数字图像处理基础知识 1.1 数字图像简介 1.1.1 数字图像处理的目的 1.1.2 数字图像处理的应用 1.1.3 数字图像处理的特点 ...
- 8bit黑白图像的灰度值范围是_数字图像处理基本知识
1.数字图像: 数字图像,又称为数码图像或数位图像,是二维图像用有限数字数值像素的表示.数字图像是由模拟图像数字化得到的.以像素为基本元素的.可以用数字计算机或数字电路存储和处理的图像. 2.数字图像 ...
- 数字图像处理与python实现 岳亚伟_数字图像处理与Python实现
01 数字图像处理基础知识 1.1 数字图像简介 1.1.1 数字图像处理的目的 1.1.2 数字图像处理的应用 1.1.3 数字图像处理特点 1.1.4 常见的数字图像处理方法 1.2 图像采样和量 ...
- [数字图像处理]灰度变换——反转,对数变换,伽马变换,灰度拉伸,灰度切割,位图切割
灰度变换,属于一个非常重要的概念.这里主要参考<Digital Image Processing> Rafael C. Gonzalez / Richard E. Woods 的第三章.书 ...
最新文章
- python day1
- 吴恩达 coursera ML 第十一课总结+作业答案
- Android中取消系统标题栏的几种方式
- PollardRho大整数分解
- Silverlight OOB Setup
- sql注入攻击和PreparedStatement有效防止sql注入攻击
- Linux学习:第四章-vi编辑器
- 计算机网络——编码和调制
- python转义引号的作用_python传到前端的数据,双引号被转义的问题
- linux mint 自动更新设置,如何升级到Linux Mint 19.1
- centos7+jexus5.8.3部署ASP.NET的MVC项目
- iptables conntrack有什么用
- 公司所有账号和密码,都要记录成文档
- sqlplus连mysql库_sqlplus连接数据库
- matlab10b有32位吗,win10系统有32位吗?win1032位和win1064位区别是什么
- 干货 | 携程数据血缘构建及应用
- 三人表决器逻辑表达式与非_正则表达式 - 驰念
- Matplotlib学习之subplots函数
- 图表背后的秘密 | 技术指标讲解:ATR指标
- TTTTTTTTTTT 400D Dima and Bacteria 细菌 最短路