当前位置: 首页 > news >正文

从零开始学cv-6:图像的灰度变换

文章目录

  • 一,简介:
  • 二、图像的线性变换
  • 三、分段线性变换
  • 四,非线性变换
    • 4.1 对数变换
    • 4.2 Gamma变换
  • 五,效果:


一,简介:

图像灰度变换涉及对图像中每个像素的灰度值执行数学运算,进而调整图像的视觉效果或突出其特定特征。作为一种基础的图像处理方法,灰度变换常用于图像的预处理和增强阶段。由于其独特的特性,灰度变换在工业领域中被广泛应用于缺陷检测、异常检测以及在恶劣环境下的图像重建等场景。
灰度变换的本质是根据特定的规则(即灰度映射函数)调整图像中每个像素的灰度值,以此来改变图像灰度的动态范围。根据灰度映射函数的不同性质,灰度变换可分为线性变换、分段线性变换和非线性变换。在非线性变换中,常见的类型包括对数变换、指数变换以及幂律变换(如n次幂、n次方根)。这些变换方法能够有效地改善图像质量,满足不同应用场景的需求。

二、图像的线性变换

线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。线性灰度变化对图像的每一个像素作线性拉伸,可以凸显图像的细节,提高图像的对比度。
线性灰度变换可以由以下公式描述 :
在这里插入图片描述
式中,D 为原始图像的灰度值,Dt 为线性灰度变换后的图像灰度值。
当 α = 1 , β = 0 时,保持原始图像不变
当 α = 1 , β > 0 ,图像的灰度值上移,灰度图像颜色发白(彩色图像颜色发亮)
当 α = 1 , β < 0时,图像的灰度值下移,灰度图像颜色发黑(彩色图像颜色发暗)
当 α > 1 ,图像的对比度增强
当 0 < α < 1 时,图像的对比度减小
当 α < 0 , β = 255时,图像暗区域变亮,亮区域变暗,图像求补
当 α = − 1 , β = 255时,图像的灰度值反转
可以这样理解参数的作用:参数 a 在灰度变换中起到了缩放像素值的作用,可以视为图像整体对比度的调整因子。当 a 大于1时,图像中所有像素的灰度值都会按照 a 的比例进行放大。这意味着原本灰度值较高的像素在放大后将变得更加明亮,而原本灰度值较低的像素虽然也有所增加,但增加的幅度相对较小。这样的操作会增强图像的对比度,使得明暗差异更加明显,从而拉伸图像的对比度范围。
参数 β 则是图像灰度值的偏移量,它通过在每个像素的灰度值上加上 β 值,实现了图像的整体亮度的提升或降低。当 β 为正值时,图像的整体亮度会增加,使得图像看起来更亮,即发白;相反,当 β 为负值时,图像的整体亮度会降低,使得图像看起来更暗,即发黑。因此,β 参数可以用来调整图像的亮度,使图像更适合特定的显示需求或视觉效果。

三、分段线性变换

分段线性变换是一种常见的图像处理技术,它通过将图像的灰度范围分割成几个不同的区间,并对每个区间分别应用不同的线性变换来调整图像的亮度和对比度。这种变换的灵活性使得它能够针对图像的不同部分进行精确的调整。
分段线性变换函数可以增强图像各部分的反差,增强感兴趣的灰度区间、抑制不感兴趣的灰度级。
分段线性函数的优点是可以根据需要拉伸特征物的灰度细节,一些重要的变换只能用分段函数来描述和实现,缺点则是参数较多不容易确定。
公式为:
在这里插入图片描述
变换步骤

  1. 确定区间:根据图像的特点和需求,确定需要划分的灰度区间。例如,可以将图像的灰度范围分为三个部分:低灰度区间、中灰度区间和高灰度区间。
  2. 设置变换函数:为每个区间设置一个线性变换函数。这些函数的参数(斜率和截距)需要根据具体的需求来确定,以实现不同的图像增强效果。
  3. 应用变换:对图像中的每个像素,根据其灰度值所属的区间,应用相应的线性变换函数。

简单概述为,分段线性变换与线性变换相似,唯一的区别就是加了像素值范围判定,即在不同的像素值区间执行不同的线性变换.

四,非线性变换

4.1 对数变换

对数曲线在像素值较低的区域斜率大,在像素值较高的区域斜率小。对数变换将输入中范围较窄的低灰度值映射为范围较宽的灰度级,输入中的高灰度值则被映射为范围较窄的灰度级。对数变换后,较暗区域的对比度提升,可以增强图像的暗部细节,简而言之是对图像中低灰度细节进行增强
公式:
在这里插入图片描述
曲线为:
在这里插入图片描述

4.2 Gamma变换

Gamma校正多用在图像整体偏暗,扩展灰度级。另外一种情况是,图像有“冲淡”的外观(很亮白)需要压缩中高以下的大部分的灰度级。伽马变换本质上是对图像矩阵中的每个值进行幂运算。0< γ <1时,拉伸图像中灰度级较低的区域,压缩灰度级较高的部分,增加图像的对比度;γ>1 时,拉伸图像中灰度级较高的区域,压缩灰度级较低的部分,降低图像的对比度。
伽马变换通过非线性变换对人类视觉特性进行补偿,最大化地利用有效的灰度级带宽。很多拍摄、显示、打印设备的亮度曲线都符合幂律曲线,因此伽马变换广泛应用于各种设备显示效果的调校,称为伽马校正。

公式为:
在这里插入图片描述
曲线为:
请添加图片描述
伽马变换的曲线形状由伽马值 γ 决定,当 γ < 1 时,虽然也是增强暗部,但其效果和对数变换不同,对数变换的增长速度随输入值的增加而减慢,而伽马变换的增长速度是一致的。
与对数变换不同的是伽马变换是对整体灰度值进行改变,所以说如果想要对光照条件较好的阴影部分进行校正,使用对数变换较好,如果是对光照情况较差,整体像素全部偏暗或偏亮,则用伽马变换效果较好。
实现代码:

import cv2
import numpy as np# 图像灰度变换def nonlinear_logarithm_transform(img_gray, c):  # 对数变换result = c * np.log(1.0 + img_gray)# uint8是专门用于存储各种图像的(包括RGB,灰度图像等),范围是从0–255# 这里要转换成unit8,否则会报错result = np.uint8(result)return resultdef gamma_bianhuan(image,gamma):  # gamma 变换image=image/255.0New=np.power(image,gamma)return Newimg = cv2.imread(r"E:\PS\2.png")  # 读取彩色图像(BGR)
imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 颜色转换:BGR(OpenCV) -> Gray
h, w = img.shape[:2]  # 图片的高度和宽度
img1 = img.copy()
img2 = img.copy()
# Dt[i,j] = alfa*D[i,j] + beta
alfa1, beta1 = 3, 50alfa2, beta2 = 3, 50for i in range(h):for j in range(w):img1[i][j] = min(255, max((alfa1*imgGray[i][j] + beta1), 0))   # 线性变换if imgGray[i][j] < 100:img2[i][j] = min(255, max((alfa2 * imgGray[i][j] + beta2), 0))   # 分段线性变换img3 = nonlinear_logarithm_transform(imgGray,40)
img4 = gamma_bianhuan(imgGray,0.4)
cv2.imshow("liner",img1)
cv2.imshow("liner2",img2)
cv2.imshow("log",img3)
cv2.imshow("gam",img4)
cv2.waitKey(0)

五,效果:

线性变换:
在这里插入图片描述
分段线性变换:
在这里插入图片描述
对数变换:‘
在这里插入图片描述

伽马变换:
在这里插入图片描述

相关文章:

从零开始学cv-6:图像的灰度变换

文章目录 一&#xff0c;简介&#xff1a;二、图像的线性变换三、分段线性变换四&#xff0c;非线性变换4.1 对数变换4.2 Gamma变换 五&#xff0c;效果: 一&#xff0c;简介&#xff1a; 图像灰度变换涉及对图像中每个像素的灰度值执行数学运算&#xff0c;进而调整图像的视觉…...

使用Apache POI和POI-OOXML实现word模板文档自动填充功能

最近接到一个新的需求&#xff0c;用户创建好模板文件保存到模板库&#xff0c;然后使用在线文档编辑器打开模板时&#xff0c;将系统数据填充到模板文件并生成新的word文件&#xff0c;然后在线编辑&#xff0c;研究使用Apache POI和POI-OOXML实现了这个功能。 Maven依赖 <…...

【HarmonyOS NEXT星河版开发学习】综合测试案例-各平台评论部分

目录 前言 功能展示 整体页面布局 最新和最热 写评论 点赞功能 界面构建 初始数据的准备 列表项部分的渲染 底部区域 index部分 知识点概述 List组件 List组件简介 ListItem组件详解 ListItemGroup组件介绍 ForEach循环渲染 列表分割线设置 列表排列方向设…...

垂直行业数字化表现抢眼 亚信科技全年利润展望乐观

大数据产业创新服务媒体 ——聚焦数据 改变商业 2024年8月14日&#xff0c;亚信科技控股有限公司&#xff08;股票代码&#xff1a;01675.HK&#xff09;公布了公司截至2024年6月30日的中期业绩。 财报数据显示&#xff0c;2024年上半年&#xff0c;亚信科技的营业收入为人民币…...

EmguCV学习笔记 VB.Net 4.1 颜色变换

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 教程VB.net版本请访问&#xff1a;EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问&#xff1a;EmguCV学习笔记 C# 目录-CSD…...

【MySQL进阶之路】表结构的操作

目录 创建表 查看表 查看数据库有哪些表 查看表结构 查看表的详细信息 修改表 表的重命名 添加一列 修改某一列的属性 删除某一列 对列进行重命名 删除表 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 【MySQL进阶之路】MySQL基础——从零认识MySQL-CSDN博客 创…...

3分钟搞定PDF转PPT!你一定要知道的3款转换神器!

在数字办公成为主流的当下&#xff0c;我们每天会收到各类基于数字化方式存储的办公文档&#xff0c;如PDF、PPT、Word、Excel文档等。 日常处理这些文档时&#xff0c;经常需要在不同格式的文档之间进行切换和转换&#xff0c;其中将PDF转换为PPT就是一个非常高频的需求&…...

【EasyExcel】导出excel-设置动态表头并导出数据

需求背景&#xff1a; 导出excel的设置某些表头动态导出(可以根据筛选条件或一些属性的数据量)&#xff0c;方便导出后用户查看想看的信息。 一、技术选型&#xff1a; easyExcel的原生数据处理 二、方案设计&#xff1a; 根据EasyExcel支持的表头List<List<String>…...

深入探索 Elasticsearch 8:新特性与核心原理剖析(上)

深入探索 Elasticsearch 8&#xff1a;新特性与核心原理剖析 目录 一、引言 &#xff08;二&#xff09;版本 8 的重要意义 二、Elasticsearch 8 的新特性 三、Elasticsearch 的核心原理 一、引言 &#xff08;一&#xff09;Elasticsearch 简介 在大数据处理和搜索领域…...

瑜伽馆预约小程序,在线预约,提高商业价值

随着大众生活质量的提高&#xff0c;对休闲运动的关注逐渐加大&#xff0c;瑜伽作为一种身心放松、改善体态的运动&#xff0c;深受女性用户的喜爱。目前&#xff0c;各大瑜伽馆开始结合数字化&#xff0c;建立了新型的线上小程序&#xff0c;帮助大众快速预约体验瑜伽&#xf…...

Python--数据类型转换

在Python中&#xff0c;数据类型的转换是一个常见的操作&#xff0c;涉及将一种数据类型转换为另一种数据类型。Python提供了多种内置函数用于执行这种转换&#xff0c;如 int()、str()、float()、list()、tuple()、set()、dict() 等。下面详细讨论Python的基本数据类型及它们之…...

域控ntdsutil修改架构、域命名、PDC、RID、结构主机

#笔记记录# FSMO盒修改 1、提示访问特权不够&#xff0c;不能执行该操作&#xff0c;0x2098 清除缓存账号密码并修改新架构管理员账号密码即可。 背景&#xff1a;更替架构主机、域命名主机 C:\Windows\system32>ntdsutil ntdsutil: roles fsmo maintenance: ?? …...

解决 Swift 6 全局变量不能满足并发安全(concurrency-safe)读写的问题

概述 WWDC 24 终于在 Swift 十岁生日发布了全新的 Swift 6。这不仅意味着 Swift 进入了全新的“大”版本时代&#xff0c;而且 Swift 编译器终于做到了并发代码执行的“绝对安全”。 不过&#xff0c;从 Swift 5 一步迈入“新时代”的小伙伴们可能对新的并发检查有些许“水土不…...

迈入退休生活,全职开发ue独立游戏上架steam

决定退休了。算了算睡后收入&#xff0c;也可以达到每月一万一&#xff0c;正好可以养家糊口。 既然退休了&#xff0c;那就做些想做的事情&#xff0c;别人养花养草&#xff0c;而我打算开发独立游戏上架steam。 一&#xff0c;盘点下目前的技术体系。 1&#xff0c;图形学底…...

什么是光伏气象站——仁科测控

【仁科测控&#xff0c;品质保障】光伏气象站&#xff0c;‌这一专门为光伏发电系统设计的监测设备&#xff0c;‌其核心能力在于精确且实时地捕捉那些对光伏发电效率产生关键影响的气象因素。‌这些数据不仅为评估光伏电站的发电性能提供了重要依据&#xff0c;‌更是优化运维…...

webshell免杀--免杀入门

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理webshell免杀的一些基础思路 入门级&#xff0c;不是很深入&#xff0c;主要是整理相关概念 免杀对象 1.各类杀毒软件 类似360&#xff0c;火绒等&#xff0c;查杀己方webshell的软件。 2.各类流量…...

Linux---02---系统目录及文件基本操作命令

课程回顾 操作系统 虚拟机安装 本章重点 Linux系统目录结构 常用命令 熟练区分Linux下各层目录的作用 熟练掌握Linux的常用命令&#xff08;文件命令、时间命令等&#xff09; 一、Linux系统目录结构 1.1 目录结构 /&#xff1a; 根目录&#xff0c;一般根目录下只存放…...

CSP-J/S第一轮初赛模拟赛试题

本模拟试题为本人自创&#xff0c;由于发布在 LG 所以就直接放入链接。 非经允许&#xff0c;不得转载。 本套模拟题只供大家练习使用&#xff0c;不保证难度与真实 CSP-J/S 完全符合。 本模拟赛为专业CSP类型的模拟赛&#xff0c;不存在错题、超出知识的题目。 CSP-J/S 20…...

LangGPT结构化提示词

LangGPT是Language For GPT-like LLMs的简称&#xff0c;中文名为结构化提示词&#xff0c;LangGPT是一个帮助你编写高质量提示词的工具&#xff0c;理论基础是我们提出的一套模块化、标准化的提斯提编写方法论——结构化提示词。我们希望揭开提示工程的神秘面纱&#xff0c;为…...

如何为个人网站更换ssl证书

关键步骤 1&#xff0c;确认服务器类型并下载对应证书&#xff08;这个超级简单&#xff0c;阿里云现在可以下3月免费的&#xff09;&#xff1b; 2&#xff0c;本文以nginx服务为例&#xff0c;主打的就是一个简单且快速让你搞清楚实操流程&#xff1b; linux命令 ps-ef|gr…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

从零手写Java版本的LSM Tree (一):LSM Tree 概述

&#x1f525; 推荐一个高质量的Java LSM Tree开源项目&#xff01; https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree&#xff0c;专为高并发写入场景设计。 核心亮点&#xff1a; ⚡ 极致性能&#xff1a;写入速度超…...