返回顶部
首页 > 资讯 > 后端开发 > Python >Python学习之直方图均衡化原理详解
  • 525
分享到

Python学习之直方图均衡化原理详解

2024-04-02 19:04:59 525人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.点算子2.线性灰度变换3.直方图均衡化4.代码实战1.点算子 点算子是两个像素灰度值间的映射关系,属于像素的逐点运算,相邻像素不参与运算。点算子是最简单的图像处理手段,如:亮

1.点算子

点算子是两个像素灰度值间的映射关系,属于像素的逐点运算,相邻像素不参与运算。点算子是最简单的图像处理手段,如:亮度调整、对比度调整、颜色变换、直方图均衡化等等。

2.线性灰度变换

线性灰度变换表达为:

其中rk、sk分别为输入、输出点像素灰度值。

▲图2.1 线性灰度变换

当a>1时,输出图像像素灰度范围扩大,图像对比度增强,当a<1时反之。这是因为人眼不易区分相近的灰度值,因此若图像灰度值范围较小,观感上细节不够清晰。当a=1、b≠0时,点算子使图像灰度整体上移或下移,即整体变亮或变暗。

▲图2.2 图像对比度(左为弱对比度,右为强对比度)

3.直方图均衡化

下图再次给出了关于图像对比度的例子。

▲图3.1 图像对比度示例

直方图均衡化是以累计分布函数为核心,将原始图像灰度直方图从比较集中的某个灰度区间,非线性地映射为在全部灰度范围内的较均匀分布,从而增强对比度。

下面阐述直方图均衡化的数学原理。首先作原始图像灰度的概率直方图如图。

▲图3.2 直方图均衡化原理

设输入像素灰度值为rk,累计分布函数为

其中ni为图像中灰度值为ri的像素频数,n为图像像素总数。设输出像素灰度值为sk,像素范围为smin-smax。期望输出灰度直方图是均匀分布,即

令C(sk)=C(rk),即得

所以最终直方图均衡化的点算子为

所以最终直方图均衡化的点算子为

4.代码实战

按照前文的原理编写累积分布函数计算公式,以及均衡化算子

# 计算累计分布函数
def C(rk):
  # 读取图片灰度直方图
  # bins为直方图直方柱的取值向量
  # hist为bins各取值区间上的频数取值
  hist, bins = np.histogram(rk, 256, [0, 256])
  # 计算累计分布函数
  return hist.cumsum()
# 计算灰度均衡化映射
def T(rk):
  cdf = C(rk)
  # 均衡化
  cdf = (cdf - cdf.min()) * (255 - 0) / (cdf.max() - cdf.min()) + 0
  return cdf.astype('uint8')

均衡化时直接调用函数即可,下面给出完整代码

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

# 计算累计分布函数
def C(rk):
  # 读取图片灰度直方图
  # bins为直方图直方柱的取值向量
  # hist为bins各取值区间上的频数取值
  hist, bins = np.histogram(rk, 256, [0, 256])
  # 计算累计分布函数
  return hist.cumsum()

# 计算灰度均衡化映射
def T(rk):
  cdf = C(rk)
  # 均衡化
  cdf = (cdf - cdf.min()) * (255 - 0) / (cdf.max() - cdf.min()) + 0
  return cdf.astype('uint8')


# 读取图片
img = cv.imread('1.png', 0)
# 将二维数字图像矩阵转变为一维向量
rk = img.flatten()

# 原始图像灰度直方图
plt.hist(rk, 256, [0, 255], color = 'r')
cv.imshow("原图像",img)

# 直方图均衡化
imgDst = T(rk)[img]
cv.imshow("直方图均衡化后的图像",imgDst)
plt.hist(imgDst.flatten(), 256, [0, 255], color = 'b')

plt.show()

看看效果:

▲图4.1 直方图均衡化效果(灰度直方图)

▲图4.2 均衡化前

▲图4.3 均衡化后

以上就是python学习之直方图均衡化原理详解的详细内容,更多关于Python直方图均衡化的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python学习之直方图均衡化原理详解

本文链接: https://lsjlt.com/news/141027.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python学习之直方图均衡化原理详解
    目录1.点算子2.线性灰度变换3.直方图均衡化4.代码实战1.点算子 点算子是两个像素灰度值间的映射关系,属于像素的逐点运算,相邻像素不参与运算。点算子是最简单的图像处理手段,如:亮...
    99+
    2024-04-02
  • Python+OpenCV之直方图均衡化详解
    目录直方图均衡化自适应直方图均衡化直方图均衡化 直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将...
    99+
    2024-04-02
  • PythonOpenCV直方图均衡化详解
    目录前言灰度直方图均衡化颜色直方图均衡化前言 图像处理技术是计算机视觉项目的核心,通常是计算机视觉项目中的关键工具,可以使用它们来完成各种计算机视觉任务。在本文中,将介绍如何使用 O...
    99+
    2024-04-02
  • OpenCV 直方图均衡化的实现原理解析
    目录直方图均衡化介绍图像的直方图是什么更形象解释什么是直方图均衡化?直方图均衡化是如何实现的?直方图均衡化的作用直方图均衡化步骤相关APIequalizeHist代码示例灰度图均值化...
    99+
    2024-04-02
  • C语言数字图像处理之直方图均衡化
    本文实例为大家分享了C语言直方图均衡化的具体代码,供大家参考,具体内容如下 原理 直方图均衡化(Histogram Equalization) 又称直方图平坦化,实质上是对图像进行非...
    99+
    2024-04-02
  • 详解OpenCV自适应直方图均衡化的应用
    目录介绍主要代码比较 CLAHE 和直方图均衡化介绍 在《直方图均衡化详解》中,我们已经了解的直方图均衡化的基本概念,并且可以使用 cv2.equalizeHist() 函数执行直方...
    99+
    2024-04-02
  • OpenCV-Python直方图均衡化实现图像去雾
    直方图均衡化 直方图均衡化的目的是将原始图像的灰度级均匀地映射到整个灰度级范围内,得到一个灰度级分布均衡的图像。这种均衡化,即实现了灰度值统计上的概率均衡,也实现了人类视觉系统上(H...
    99+
    2024-04-02
  • Pulsar负载均衡原理及优化方案详解
    目录前言Pulsar 负载均衡原理ThresholdShedder 原理问题原因优化方案总结前言 前段时间我们在升级 Pulsar 版本的时候发现升级后最后一个节点始终没有流量。 ...
    99+
    2023-02-07
    Pulsar负载均衡 Pulsar负载均衡优化
  • OpenCV-Python直方图均衡化如何实现图像去雾
    小编给大家分享一下OpenCV-Python直方图均衡化如何实现图像去雾,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!直方图均衡化直方图均衡化的目的是将原始图像的灰度级均匀地映射到整个灰度级范围内,得到一个灰度级分布均衡的...
    99+
    2023-06-15
  • C语言实现BMP图像处理(直方图均衡化)
    本文实例为大家分享了C语言实现BMP图像直方图均衡化处理的具体代码,供大家参考,具体内容如下 计算步骤: 1)统计各灰度值的概率; 2)计算了累积概率直方图(CDF); 3)取整扩展...
    99+
    2024-04-02
  • Python如何实现直方图、均衡化、高斯滤波
    这篇文章将为大家详细讲解有关Python如何实现直方图、均衡化、高斯滤波,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python直方图、均衡化、高斯滤波测试原图直方图基本原理matplotlib库绘制直...
    99+
    2023-06-08
  • Python深度强化学习之DQN算法原理详解
    目录1 DQN算法简介2 DQN算法原理2.1 经验回放2.2 目标网络3 DQN算法伪代码DQN算法是DeepMind团队提出的一种深度强化学习算法,在许多电动游戏中达到人类玩家甚...
    99+
    2024-04-02
  • Python学习之虚拟环境原理详解
    目录认识虚拟环境Python中的虚拟环境工具VirtualenvTreminal 终端演示该章节我们学习虚拟环境的相关知识,虚拟环境对于刚刚使用Python的初学者来说使用的概率可能...
    99+
    2024-04-02
  • Python可视化学习之seaborn绘制矩阵图详解
    目录本文内容速览1、绘图数据准备2、seaborn.pairplot加上分类变量修改调色盘x,y轴方向选取相同子集 x,y轴方向选取不同子集非对角线散点图加趋势线 ...
    99+
    2024-04-02
  • Python学习之异常处理详解
    目录什么是异常与异常处理异常的语法捕获通用异常捕获具体异常如何捕获多个异常捕获多个异常 - 方法1捕获多个异常 - 方法2本章节主要学习 python 中的异常处理,来看一下该章节的...
    99+
    2024-04-02
  • Python学习之循环方法详解
    目录for循环while循环拓展:列表推导式常见的推导式方法循环的继续与退出(continue与break)continue的使用break的使用循环实现九九乘法表什么是循环? &m...
    99+
    2024-04-02
  • Python图像运算之图像掩膜直方图和HS直方图详解
    目录一.图像掩膜直方图二.图像HS直方图三.直方图判断白天黑夜四.总结一.图像掩膜直方图 如果要统计图像的某一部分直方图,就需要使用掩码(蒙板)来进行计算。假设将要统计的部分设置为白...
    99+
    2024-04-02
  • Java学习之缓冲流的原理详解
    目录前言字节缓冲流原理字符缓冲流前言 前面我们已经学习了四种对文件数据操作的基本流,字节输入流,字节输出流,字符输入流,字符输出流。为了提高其数据的读写效率,Java中又定义了四种缓...
    99+
    2023-01-28
    Java缓冲流原理 Java缓冲流
  • OpenCV图像处理之直方图比较方法详解
    目录一、直方图比较二、图像直方图比较方法三、代码实现四、图像处理效果一、直方图比较 直方图比较是对输入的两张图像进行计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算...
    99+
    2024-04-02
  • Java基础学习之反射机制原理详解
    目录一、什么是反射二、反射的原理三、反射的优缺点四、反射的用途五、反射机制常用的类六、反射的基本使用一、什么是反射 (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作