传统图像处理之直方图均衡化

news2024/9/30 19:26:59

重要说明:本文从网上资料整理而来,仅记录博主学习相关知识点的过程,侵删。

一、参考资料

直方图均衡化的原理及实现
图像处理之直方图均衡化

二、直方图

1. 直方图的概念

图像的灰度直方图,描述了图像中灰度分布情况,能够很直观的展示出图像中各个灰度级所占的多少。图像的灰度直方图是灰度级的函数, 描述的是图像中具有该灰度级的像素的个数: 其中, 横坐标是灰度级, 纵坐标是该灰度级出现的次数。如下图所示:
在这里插入图片描述

2. 直方图的性质

  1. 直方图反映了图像中的灰度分布规律。 它描述每个灰度级具有的像素个数, 但不包含这些像素在图像中的位置信息。 图像直方图不关心像素所处的空间位置, 因此不受图像旋转和平移变化的影响, 可以作为图像的特征
  2. 任何一幅特定的图像都有唯一的直方图与之对应, 但不同的图像可以有相同的直方图。

3. cv2.calcHist()

函数原型:calcHist(images,channels,mask,histSize,ranges,hist=None,accumulate=None)

功能:计算图像直方图。

参数解释

  • images:图像矩阵,例如:[image];
  • channels:通道数,例如:0;
  • mask:掩膜,一般为:None;
  • histSize:直方图大小,一般等于灰度级数;
  • ranges:横轴范围。

4. 示例代码

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


# 获取灰度图像
img = cv2.imread("lena_std.tif", 0)
# cv2.imshow("src", img)

# 灰度图像的直方图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
plt.figure() #新建一个图像
plt.hist(img.ravel(), 256)
plt.show()

绘制直方图,如下图所示:
在这里插入图片描述

三、直方图均衡化

1. 引言

假如图像的灰度分布不均匀,其灰度分布集中在较窄的范围内,使图像的细节不够清晰对比度较低。通常采用直方图均衡化直方图规定化两种变换,使图像的灰度范围拉开使灰度均匀分布,从而增大反差,使图像细节清晰,以达到图像增强的目的。

直方图均衡化,对图像进行非线性拉伸,重新分配图像的灰度值,使一定范围内图像的灰度值大致相等。这样,原来直方图中间的峰值部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较为平坦的直方图。

2. 均衡化算法

直方图的均衡化实际也是一种灰度的变换过程,将当前的灰度分布通过一个变换函数,变换为范围更宽、灰度分布更均匀的图像。也就是将原图像的直方图修改为在整个灰度区间内大致均匀分布,因此扩大了图像的动态范围,增强图像的对比度。通常均衡化选择的变换函数是灰度的累积概率,直方图均衡化算法的步骤:

  1. 依次扫描原始灰度图像的每一个像素, 计算出图像的灰度直方图
  2. 计算灰度直方图的累积分布函数
  3. 根据累积分布函数和直方图均衡化原理得到输入与输出之间的映射关系;
  4. 最后根据映射关系得到结果进行图像变换。

举例说明,如下图所示,可直观的理解直方图均衡化的原理及过程:
在这里插入图片描述

3. cv2.equalizeHist()

函数原型:equalizeHist(src, dst=None)

功能:计算直方图均衡化。

参数解释

  • src:图像矩阵(单通道图像);
  • dst:默认即可。

4. 代码示例

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


# 获取灰度图像
img = cv2.imread("lena_std.tif", 0)
cv2.imshow("src", img)

# 灰度图像的直方图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
plt.figure() #新建一个图像
plt.hist(img.ravel(), 256)
plt.show()

# 灰度图像直方图均衡化
dst = cv2.equalizeHist(img)

# 直方图
hist = cv2.calcHist([dst],[0],None,[256],[0,256])

plt.figure()
plt.hist(dst.ravel(), 256)
plt.show()

cv2.imshow("dst", dst)

cv2.waitKey(0)

src图像的直方图
在这里插入图片描述

直方图均衡化之后的直方图
在这里插入图片描述

src源图像与dst图像对比
在这里插入图片描述

彩色直方图均衡化

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

# 彩色图像直方图均衡化
img = cv2.imread("lena_std.tif", 1)
cv2.imshow("src", img)

# 彩色图像均衡化,需要分解通道 对每一个通道均衡化
(b, g, r) = cv2.split(img)
bH = cv2.equalizeHist(b)
gH = cv2.equalizeHist(g)
rH = cv2.equalizeHist(r)
# 合并每一个通道
result = cv2.merge((bH, gH, rH))
cv2.imshow("dst_rgb", result)

cv2.waitKey(0)

src源图像与dst图像对比
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/905802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BaiChuan13B多轮对话微调范例

前方干货预警:这可能是你能够找到的,最容易理解,最容易跑通的,适用于多轮对话数据集的大模型高效微调范例。 我们构造了一个修改大模型自我认知的3轮对话的玩具数据集,使用QLoRA算法,只需要5分钟的训练时间…

antd5源码调试环境启动(MacOS)

将源码下载至本地 这里antd5 版本是5.8.3 $ git clone gitgithub.com:ant-design/ant-design.git $ cd ant-design $ npm install $ npm start前提:安装python3、node版本18.14.0(这是本人当前下载的版本) python3安装教程可参考:https://…

达梦数据库读写分离集群原理

概述 本文就达梦数据库读写分离原理进行介绍。 达梦读写分离集群特点: 可以配置8个即时备库或8个实时备库;读写操作自动分离、负载均衡;提供数据同步;备库故障自动处理,故障恢复自动数据同步等功能,也支持…

基于”Python+”多技术融合在蒸散发与植被总初级生产力估算中的应用

熟悉蒸散发ET及其组分(植被蒸腾Ec、土壤蒸发Es、冠层截留Ei)、植被总初级生产力GPP的概念和碳水耦合的基本原理;掌握利用Python与ArcGIS工具进行课程相关的操作;熟练掌握国际上流行的Penman-Monteith模型,并能够应用该…

K8s学习笔记1

一、课程介绍: 1、背景: 1)从基础设备主机化向容器化转换。 2)从人肉式运维工作模式向自动化运维模式转换。 3)从自动化运维体系向全体系智能化运维模式转换。 2、课程目标人群: 1)掌握Linux操作系统基…

适合国内用户的五款ChatGPT插件

众所周知使用ChatGPT3.5需要使用魔法且不稳定,订阅ChatGPT4.0每月需要支付20美元,并且使用次数有限制。对于那些不想每年花费240美元(超过1500元人民币)来使用GPT4.0的朋友们来说,还有别的办法吗? 答案是&…

手机debug模式无法连接AndroidStudio,或者Android项目运行失败

在开发中,经常会遇到手机开发模式无法连接AndroidStudio;或者连接后运行失败的问题,请关闭以下设置。

学习笔记|基于Delay实现的LED闪烁|u16是什么|a--和--a的区别|STC32G单片机视频开发教程(冲哥)|第六集(上):实现LED闪烁

文章目录 摘要软件更新什么是闪烁Tips:u16是什么? 语法分析:验证代码Tips:a--和--a的区别(--ms 的用法)测试代码: 摘要 1.基于Delay实现的LED闪烁 2.函数的使用 3,新建文件,使用模块化编程 软件更新 打…

Python3 从简介及环境搭建到第一个入门程序

文章目录 前言一、Python3 简介1. 什么是python2. python的发展史3. python的特点 二、Python环境搭建1. Python3 下载2. Python安装3. 第一个Python3.x程序 总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然&…

Android企业项目开发实训室建设方案

一 、系统概述 Android企业项目开发作为新一代信息技术的重点和促进信息消费的核心产业,已成为我国转变信息服务业的发展新热点:成为信息通信领域发展最快、市场潜力最大的业务领域。互联网尤其是移动互联网,以其巨大的信息交换能力和快速渗透…

【jsthreeJS】入门three,并实现3D汽车展示厅,附带全码

首先放个最终效果图: 三维(3D)概念: 三维(3D)是一个描述物体在三个空间坐标轴上的位置和形态的概念。相比于二维(2D)只有长度和宽度的平面,三维增加了高度或深度这一维度…

K8s学习笔记2

Kubernetes: K8s由来: 希腊语:舵手、飞行员 来自于谷歌的Borg系统开源(2014年) 简称K8s 现归属于CNCF(2016年) 云原生基金会 是一个开源软件基金会,致力于使云计算普遍性和持…

React 18 用 State 响应输入

参考文章 用 State 响应输入 React 控制 UI 的方式是声明式的。不必直接控制 UI 的各个部分,只需要声明组件可以处于的不同状态,并根据用户的输入在它们之间切换。这与设计师对 UI 的思考方式很相似。 声明式 UI 与命令式 UI 的比较 当设计 UI 交互时…

Semantic Visual SLAM 简述

语义slam解决的问题:在动态和复杂环境下的定位问题 语义slam的关键:语义信息的提取与联系。 本文仅讨论视觉slam。 参考文献: [1] https://arxiv.org/abs/2209.06428 [2] slambook 一、简介 slam的目的在于定位和建图。 视觉slam由于其…

电子器件系列57:三防漆

三防漆是一种特殊配方的涂料,用于保护线路板及其相关设备免受环境的侵蚀。三防漆具有良好的耐高低温性能;其固化后成一层透明保护膜,具有优越的绝缘、防潮、防漏电、防震、防尘、防腐蚀、防老化、耐电晕等性能。 三防漆根据每个地区和每个厂家…

【Kubernetes】Rancher管理集群

目录 1、安装 rancher 2、登录 Rancher 平台 3、Rancher 管理已存在的 k8s 集群 4、Rancher 部署监控系统 5、使用 Rancher 仪表盘管理 k8s 集群 以创建 nginx 服务为例 创建名称空间 namespace 创建 Deployment 资源 创建 service 1、安装 rancher 在 所有 node 节点下…

org.xml.sax.SAXParseException: 元素类型 “select“ 必须后跟属性规范 “>“ 或 “/>

项目场景: springBoot项目build编译成功,maven依赖都没问题,项目启动run服务的时候报异常: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name demoUserController: Unsatisfie…

燃尽图、甘特图、鱼骨图

燃尽图、甘特图、鱼骨图 1. 燃尽图 燃尽图(burn down chart)是在项目完成之前,对需要完成的工作的一种可视化表示。燃尽图有一个Y轴(工作)和X轴(时间)。理想情况下,该图表是一个向下…

运动控制-CodeSys编程书籍

陆国君 <<PLC综合开发利器-CodeSys基础编程及应用指南 网上流传的陆国君PDF书籍 <<PLC综合开发利器-CodeSys基础编程及应用指南>> 很不错, 这本书网上有两个版本 556页是新的版本, 423页是老的版本, 不过内容差异不大. 423页是老的版本下载: url80.ctfile.co…

FL Studio21.1最新中文版本新功能有哪些?详细下载教程

FL Studio 21.1通过钢琴卷中的音阶吸附和基于 Python 的脚本&#xff0c;提供了更快捷、更有创意的音符编辑功能。更新版还带来了针对更好的管理采样的彩色波形&#xff0c;Hyper Chorus 极致合唱插件、Edison 中的 AI Declipper&#xff08;人工智能去削波器&#xff09;等。 …