详解直方图均衡化
直方图均衡化(Histogram Equalization) 是图像处理中一种常用的对比度增强技术,通过调整图像的灰度分布,使得图像的直方图尽可能均匀分布,从而提高图像的对比度和细节表现。以下是直方图均衡化的原理详解:
1. 直方图的概念
- 直方图 是图像中像素灰度值的统计分布图,横轴表示灰度值(通常为 0~255),纵轴表示该灰度值在图像中出现的频率(像素数量)。
- 直方图反映了图像的对比度、亮度和细节信息:
- 如果直方图集中在某一灰度范围,图像可能对比度较低。
- 如果直方图分布均匀,图像通常对比度较高,细节丰富。
2. 直方图均衡化的目标
直方图均衡化的目标是将图像的灰度直方图从集中分布调整为均匀分布,从而增强图像的对比度。具体来说:
- 将原始图像的灰度值映射到一个新的灰度值范围。
- 使得映射后的直方图尽可能平坦(即每个灰度值的像素数量大致相同)。
3. 直方图均衡化的原理
直方图均衡化的核心思想是通过 累积分布函数(CDF) 将原始图像的灰度值映射到新的灰度值范围。具体步骤如下:
步骤 1:计算原始图像的灰度直方图
- 统计图像中每个灰度值 r k r_k rk 出现的频率 n k n_k nk。
- 直方图 h ( r k ) h(r_k) h(rk) = n k n_k nk,其中 k = 0 , 1 , 2 , … , L − 1 k = 0, 1, 2, \dots, L-1 k=0,1,2,…,L−1( L L L) 是灰度级数,通常为 256。
步骤 2:计算累积分布函数(CDF)
- 累积分布函数 H ( r k ) H(r_k) H(rk) 表示灰度值小于等于 r k r_k rk 的像素数量占总像素数量的比例:

其中 N N N是图像的总像素数。
步骤 3:计算映射函数
- 将累积分布函数 H ( r k ) H(r_k) H(rk) 映射到新的灰度值范围 [ 0 , L − 1 ] [0, L-1] [0,L−1]:

其中 s k s_k sk 是映射后的灰度值。
步骤 4:应用映射函数
- 将原始图像中的每个像素灰度值 r k r_k rk 替换为映射后的灰度值 s k s_k sk。
4. 直方图均衡化的效果
- 对比度增强:直方图均衡化后,图像的灰度分布更加均匀,对比度显著提高。
- 细节增强:原本较暗或较亮的区域中的细节变得更加清晰。
- 适用性:适用于低对比度图像(如雾天图像、背光图像等)。
5. 直方图均衡化的数学推导
假设原始图像的灰度值为 r r r,映射后的灰度值为 s s s,直方图均衡化的映射函数可以表示为:

6. 直方图均衡化的示例
示例 1:低对比度图像
- 原始图像的直方图集中在某一灰度范围,图像显得较暗或较亮。
- 直方图均衡化后,直方图分布均匀,图像对比度提高,细节更加清晰。
示例 2:高对比度图像
- 原始图像的直方图已经分布较均匀,直方图均衡化的效果不明显。
7. 直方图均衡化的局限性
- 噪声放大:
- 直方图均衡化可能会放大图像中的噪声,尤其是在低对比度区域。
- 过度增强:
- 对于某些图像,直方图均衡化可能导致过度增强,使得图像看起来不自然。
- 局部对比度丢失:
- 直方图均衡化是全局操作,可能会忽略局部对比度信息。
8. 改进方法
为了克服直方图均衡化的局限性,研究者提出了多种改进方法:
- 自适应直方图均衡化(AHE):
- 将图像分为多个小区域,分别对每个区域进行直方图均衡化。
- 限制对比度自适应直方图均衡化(CLAHE):
- 在 AHE 的基础上,限制每个区域的对比度增强幅度,避免噪声放大。
- 局部直方图均衡化:
- 仅对图像的局部区域进行直方图均衡化,保留全局对比度。
9. 总结
- 直方图均衡化 是一种通过调整灰度分布来增强图像对比度的技术。
- 其核心原理是通过累积分布函数将原始灰度值映射到新的灰度值范围,使得直方图分布更加均匀。
- 直方图均衡化适用于低对比度图像,但可能存在噪声放大和过度增强的问题。
- 改进方法(如 CLAHE)可以更好地平衡对比度增强和噪声控制。
通过理解直方图均衡化的原理和应用,可以更好地处理低对比度图像,提升图像的视觉效果和信息提取能力。
相关文章:
详解直方图均衡化
直方图均衡化(Histogram Equalization) 是图像处理中一种常用的对比度增强技术,通过调整图像的灰度分布,使得图像的直方图尽可能均匀分布,从而提高图像的对比度和细节表现。以下是直方图均衡化的原理详解: …...
MyBatis-Plus 自动填充功能
MyBatis-Plus(MP) 提供了一个非常强大的功能——自动填充功能。该功能可以在执行插入或更新操作时,自动为某些字段赋值,免去手动设置这些字段的麻烦。常见的应用场景包括 创建时间 和 更新时间 字段的自动填充,帮助开发…...
认知动力学视角下的生命优化系统:多模态机器学习框架的哲学重构
认知动力学视角下的生命优化系统:多模态机器学习框架的哲学重构 一、信息熵与生命系统的耗散结构 在热力学第二定律框架下,生命系统可视为负熵流的耗散结构: d S d i S d e S dS d_iS d_eS dSdiSdeS 其中 d i S d_iS diS为内部熵…...
Kibana:Spotify Wrapped 第二部分:深入挖掘数据
作者:来自 Elastic Philipp Kahr 我们将比以往更深入地探究你的 Spotify 数据并探索你甚至不知道存在的联系。 在由 Iulia Feroli 撰写的本系列的第一部分中,我们讨论了如何获取 Spotify Wrapped 数据并在 Kibana 中对其进行可视化。在第 2 部分中&#…...
C++—类与对象(中)
目录 1、类的6个默认成员函数 2、构造函数 构造函数的特性 3、初始化列表 4、析构函数 概念 5、拷贝构造函数 6、运算符重载 7、赋值运算符重载 赋值运算符重载格式 8、前置和后置重载 9、const修饰的成员 10、取地址及const取地址重载 1、类的6个默认成员函数 一…...
MySQL 事务笔记
MySQL 事务笔记 目录 事务简介事务操作事务四大特性并发事务问题事务隔离级别总结 事务简介 事务(Transaction)是数据库操作的逻辑单元,由一组不可分割的SQL操作组成。主要用于保证: 多个操作的原子性(要么全部成功…...
红黑树和 STL —— set和map 【复习笔记】
1. 二叉搜索树 1.1 二叉搜索树的概念 相比较前文的堆,二叉搜索树并不需要必须是一棵完全二叉树 二叉搜索树(二叉排序树或二叉查找树,简称BST)是具有以下特性的二叉树: 1. 若它的左子树非空,则左子树上所…...
网络空间安全(7)攻防环境搭建
一、搭建前的准备 硬件资源:至少需要两台计算机,一台作为攻击机,用于执行攻击操作;另一台作为靶机,作为被攻击的目标。 软件资源: 操作系统:如Windows、Linux等,用于安装在攻击机和…...
HarmonyOS学习第11天:布局秘籍RelativeLayout进阶之路
布局基础:RelativeLayout 初印象 在 HarmonyOS 的界面开发中,布局是构建用户界面的关键环节,它决定了各个组件在屏幕上的位置和排列方式。而 RelativeLayout(相对布局)则是其中一种功能强大且灵活的布局方式࿰…...
【2025年2月28日稳定版】小米路由器4C刷机Immortalwrt 23.05.4系统搭载mentohust 0.3.1插件全记录
小米路由器4C刷机Immortalwrt系统搭载mentohust插件全记录 首先将路由器按住后面的reset,用一个针插进去然后等待5s左右,松开,即可重置路由器。 然后要用物理网线物理连接路由器Lan口和电脑,并将路由器WAN口连接至网口。确保电脑…...
【SpringBoot+Vue】博客项目开发二:用户登录注册模块
后端用户模块开发 制定参数交互约束 当前,我们使用MybatisX工具快速生成的代码中,包含了一个实体类,这个类中包含我们数据表中的所有字段。 但因为有些字段,是不应该返回到前端的,比如用户密码,或者前端传…...
idea + Docker + 阿里镜像服务打包部署
一、下载docker desktop软件 官网下载docker desktop,需要结合wsl使用 启动成功的画面(如果不是这个画面例如一直处理start或者是stop需要重新启动,不行就重启电脑) 打包成功的镜像在这里,如果频繁打包会导致磁盘空间被占满,需…...
从入门到精通:Linux 权限管理(rwx/chmod/chown)
目录 1. 引言:为什么需要文件权限? 2. 基础概念:理解 rwx 权限 (1)权限的三种角色 (2)权限的三种类型 (3)权限的两种表示法 (4) 目录的 rwx…...
虚拟机如何设置ip
在虚拟机中设置IP地址的具体步骤会因虚拟机软件(如VMware、VirtualBox等)和操作系统(如Windows、Linux等)的不同而有所差异。以下是几种常见虚拟机软件和操作系统的IP设置方法。 --- 一、VMware中的IP设置 1.Windows虚拟机 1. 打…...
自然语言处理:稀疏向量表示
介绍 大家好,我是博主。今天又来和大家分享自然语言处理领域的知识了。原本我计划这次分享NLP中文本表示的相关内容,不过在整理分享计划的过程中,发现这部分知识里包含一些涉及复杂数学原理和抽象概念的内容。对于刚接触NLP的小伙伴们来说&a…...
ubuntu 20.04 安装labelmg
1. 下载安装包 下载链接:下载链接 2. 安装启动 # 创建labelImg的环境 conda create -n labelImg# 激活labelImg环境 source activate labelImg安装依赖 pip install pyqt5-dev-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/cd requirements/pip install -…...
Redis版本的EOL策略与升级路径(刷到别划走)
各位看官,刷到就点进来,大数据已经抓到你喽~😊 前言 在软件行业做服务端开发的我们,多多少少都会接触到Redis,用它来缓存数据、实现分布式锁等,相关八股文烂熟于心,但是往往会忽略具…...
ExpMoveFreeHandles函数分析和备用空闲表的关系
第一部分:ExpMoveFreeHandles和备用空闲表的关系 ULONG ExpMoveFreeHandles ( IN PHANDLE_TABLE HandleTable ) { ULONG OldValue, NewValue; ULONG Index, OldIndex, NewIndex, FreeSize; PHANDLE_TABLE_ENTRY Entry, FirstEntry; EXHAND…...
[预订酒店]
预订酒店 真题目录: 点击去查看 E 卷 100分题型 题目描述 放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店(n>=k>0),并由低到高打印酒店的价格。 输入描述 第一行:n,…...
java项目之基于ssm的学籍管理系统(源码+文档)
项目简介 基于ssm的学籍管理系统实现了以下功能: 学生信息管理: 学生信息新增 学生信息修改 学籍异动管理: 学籍异动添加 学籍异动删除 学籍异动修改 学生学业管理: 学生学业添加 学生学业修改 学生学业删除 学院信息管理&am…...
SpringBoot+Redis+Mybatis-plus黑马点评
短信登录 基于Session实现登录 流程: 发送短信验证码-->短信验证码注册登录-->校验登录状态(保存用户到ThreadLocal,方便后续使用) 不能每次请求服务都要进行登录状态校验,解决办法:拦截器 在Sp…...
算法-二叉树篇23-二叉搜索树中的插入操作
二叉搜索树中的插入操作 力扣题目链接 题目描述 给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同…...
[STM32]从零开始的STM32 BSRR、BRR、ODR寄存器讲解
一、前言 学习STM32一阵子以后,相信大家对STM32 GPIO的控制也有一定的了解了。之前在STM32 LED的教程中也教了大家如何使用寄存器以及库函数控制STM32的引脚从而点亮一个LED,之前的寄存器只是作为一个引入,并没有深层次的讲解,在教…...
DeepSeek-V3关键技术之一:DeepSeekMoE
DeepSeekMoE 是一种创新的大规模语言模型架构,旨在通过高效的计算流程和优化设计,在保持高性能的同时显著降低计算成本。 1. 架构设计 DeepSeekMoE 基于 Transformer 架构,融合了以下核心技术: 专家混合系统(Mixture…...
MySQL--DQL、DML、DDL、DCL概念与区别
在SQL中,根据功能和操作对象的不同,通常将语文分为四大类:DQL(数据查询语言)、DML(数据操作语言)、DDL(数据定义语言)、DCL(数据控制语言) 一、D…...
Android Activity启动流程详解
目录 Activity 启动流程详细解析 1. 应用层发起启动请求 1.1 调用 startActivity() 1.2 通过 Instrumentation 转发请求 2. 系统服务处理(AMS 阶段) 2.1 Binder IPC 通信 2.2 AMS 处理流程 2.3 跨进程回调 ApplicationThread 3. 目标进程初始化…...
夜天之书 #106 Apache 软件基金会如何投票选举?
近期若干开源组织进行换届选举。在此期间,拥有投票权的成员往往会热烈讨论,提名新成员候选人和治理团队的候选人。虽然讨论是容易进行的,但是实际的投票流程和运作方式,在一个成员众多的组织中,可能会有不少成员并不清…...
保姆级教程:用Chart.js实现柱状图与折线图联动
保姆级教程:用Chart.js实现柱状图与折线图联动 ▲ 最终实现的交互式组合图表效果 一、技术原理剖析 1.1 Chart.js渲染机制 Chart.js基于HTML5 Canvas实现图表绘制,其核心原理包括: 数据绑定:将数据对象映射为图形元素分层渲染:通过order属性控制图层叠加顺序坐标系计算:…...
初阶MySQL(两万字全面解析)
文章目录 1.初识MySQL1.1数据库1.2查看数据库1.3创建数据库1.4字符集编码和排序规则1.5修改数据库1.6删除数据库 2.MySQL常用数据类型和表的操作2.(一)常用数据类型1.数值类2.字符串类型3.二进制类型4.日期类型 2.(二)表的操作1查看指定库中所有表2.创建表 3.查看表结构和查看表…...
大模型应用:多轮对话(prompt工程)
概述 在与大型语言模型(如ChatGPT)交互的过程中,我们常常体验到与智能助手进行连贯多轮对话的便利性。那么,当我们开启一个新的聊天时,系统是如何管理聊天上下文的呢? 一、初始上下文的建立 1. 创建新会…...
