图像灰度直方图

灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。直方图显示图像数据时会以左暗右亮的分布曲线形式呈现出来。横坐标是灰度级,纵坐标是该灰度级出现的频率。图像的对比度是通过灰度级范围来度量的,而灰度级范围可通过观察灰度直方图得到,灰度级范围越大代表对比度越高;反之对比度越低,低对比度的图像在视觉上给人的感觉是看起来不够清晰,所以通过算法调整图像的灰度值,从而调整图像的对比度是有必要的。

获得图像的灰度直方图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实现相关推荐

  1. python离散余弦变换_数字图像处理(三)—— 离散余弦变换

    离散余弦变换(Discrete Cosine Transform)本质上也是离散傅里叶变换(Discrete Fourier Transform),但是只有实数部分.有这样一个性质:如果信号 在给定区 ...

  2. Win8Metro(C#)数字图像处理--2.31灰度拉伸算法

    Win8Metro(C#)数字图像处理--2.31灰度拉伸算法 原文:Win8Metro(C#)数字图像处理--2.31灰度拉伸算法  [函数名称] 灰度拉伸函数GrayStretchProces ...

  3. 数字图像处理 -灰度变换 之 对数变换(Log Transformation)

    本文参考了 以下这篇文章 [数字图像处理]灰度变换--反转,对数变换,伽马变换,灰度拉伸,灰度切割,位图切割 https://blog.csdn.net/zhoufan900428/article/d ...

  4. Win8 Metro(C#)数字图像处理--3.3图像直方图计算

    原文:Win8 Metro(C#)数字图像处理--3.3图像直方图计算 /// <summary>/// Get the array of histrgram./// </summa ...

  5. 数字图像处理与python实现_数字图像处理学习(2)—— 图像直方图均衡与图像匹配(python实现)...

    数字图像处理学习(2)-- 直方图均衡与图像匹配 1. 直方图均衡(Histogram Equalization) 1.1 直方图均衡化概念 1.2 直方图均衡实现简单思路 1.3 直方图均衡实现代码 ...

  6. python 图像分析自然纹理方向与粗细代码_数字图像处理与Python实现笔记之基础知识...

    数字图像处理与Python实现笔记之基础知识 摘要 绪论 1 数字图像处理基础知识 1.1 数字图像简介 1.1.1 数字图像处理的目的 1.1.2 数字图像处理的应用 1.1.3 数字图像处理的特点 ...

  7. 8bit黑白图像的灰度值范围是_数字图像处理基本知识

    1.数字图像: 数字图像,又称为数码图像或数位图像,是二维图像用有限数字数值像素的表示.数字图像是由模拟图像数字化得到的.以像素为基本元素的.可以用数字计算机或数字电路存储和处理的图像. 2.数字图像 ...

  8. 数字图像处理与python实现 岳亚伟_数字图像处理与Python实现

    01 数字图像处理基础知识 1.1 数字图像简介 1.1.1 数字图像处理的目的 1.1.2 数字图像处理的应用 1.1.3 数字图像处理特点 1.1.4 常见的数字图像处理方法 1.2 图像采样和量 ...

  9. [数字图像处理]灰度变换——反转,对数变换,伽马变换,灰度拉伸,灰度切割,位图切割

    灰度变换,属于一个非常重要的概念.这里主要参考<Digital Image Processing> Rafael C. Gonzalez / Richard E. Woods 的第三章.书 ...

最新文章

  1. python day1
  2. 吴恩达 coursera ML 第十一课总结+作业答案
  3. Android中取消系统标题栏的几种方式
  4. PollardRho大整数分解
  5. Silverlight OOB Setup
  6. sql注入攻击和PreparedStatement有效防止sql注入攻击
  7. Linux学习:第四章-vi编辑器
  8. 计算机网络——编码和调制
  9. python转义引号的作用_python传到前端的数据,双引号被转义的问题
  10. linux mint 自动更新设置,如何升级到Linux Mint 19.1
  11. centos7+jexus5.8.3部署ASP.NET的MVC项目
  12. iptables conntrack有什么用
  13. 公司所有账号和密码,都要记录成文档
  14. sqlplus连mysql库_sqlplus连接数据库
  15. matlab10b有32位吗,win10系统有32位吗?win1032位和win1064位区别是什么
  16. 干货 | 携程数据血缘构建及应用
  17. 三人表决器逻辑表达式与非_正则表达式 - 驰念
  18. Matplotlib学习之subplots函数
  19. 图表背后的秘密 | 技术指标讲解:ATR指标
  20. TTTTTTTTTTT 400D Dima and Bacteria 细菌 最短路

热门文章

  1. 菜鸟学编程总结集——帮你找到初学编程的回忆
  2. 用什么方法一键查询名下所有快递的物流详情
  3. WEB安全的总结学习与心得(十)——SQL注入漏洞
  4. 材料硕士转行计算机经验分享(Java开发)
  5. 全球顶级汽车品牌邮件营销设计精选
  6. Sqlplus显示数据不整齐
  7. 【opencv-c++】cv::calcHist计算直方图
  8. 猪与蟒(pig and python)
  9. 勒索软件:进化、分类和防御解决方案综述
  10. reactjs初级学习