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

news2025/1/8 20:48:10

文章目录

  • 一,简介:
  • 二、图像的线性变换
  • 三、分段线性变换
  • 四,非线性变换
    • 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 result


def gamma_bianhuan(image,gamma):  # gamma 变换
    image=image/255.0
    New=np.power(image,gamma)
    return New



img = 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, 50

alfa2, beta2 = 3, 50

for 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)

五,效果:

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

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

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

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

相关文章

Python基础和变量使用

1. 基础了解 1.1 运行方式 Python有多种运行方式&#xff0c;以下是几种常见的执行Python代码的方法&#xff1a; 交互式解释器&#xff1a; 打开终端或命令提示符&#xff0c;输入python或python3&#xff08;取决于你的系统配置&#xff09;&#xff0c;即可进入Python交互…

HelpLook AI 知识库:为企业提供高效智能的知识管理解决方案

“管理就是把复杂的问题简单化&#xff0c;混乱的事情规范化。” 在当今竞争激烈的商业环境中&#xff0c;企业面临着快速变化的市场需求和日益复杂的业务流程。为了保持竞争力并提升运营效率&#xff0c;选择一款合适的知识管理系统至关重要。在众多选项中&#xff0c;HelpLoo…

day05--Vue

一、Vue入门 1.1入门案例 1.在页面中引入vue.js框架 2.定义vue对象 let app new Vue({ el:"#vue作用域的div标签id", data:{ //所有数据模型 }&#xff0c; methods:{ //页面中所有触发的js方法 }&#xff0c; created(){ //页面初始化&#xff0c;准备调用方法 } …

MODELSIM仿真报错解决记录

目录 问题&#xff1a;Modelsim报错&#xff1a;Error (10228): Verilog HDL error at Line_Shift_RAM_1Bit.v(39): module “Line_Shift_RAM_1 原因&#xff1a;创建的IP核放到了别的位置 解决方法&#xff1a;删掉IP核以及QIP等文件&#xff0c;将IP核创建到工程目录下 问…

vue3旋转木马型轮播图,环型滚动

<template><div><div class"content"><div class"but1" click"rotateLeft">--向左</div><div class"ccc"><main id"main"><div class"haha" ref"haha"&g…

垂直电商的兴衰与开源AI智能名片S2B2C商城系统的崛起:一场商业模式的革新

摘要&#xff1a;随着互联网技术的飞速发展&#xff0c;电子商务行业经历了从萌芽到繁荣再到精细化分化的历程。垂直电商作为电商领域的一个重要分支&#xff0c;曾因其聚焦细分市场、满足特定用户需求、产品标准化及快速整合供应链等优势&#xff0c;吸引了大量资本的关注。然…

Ubuntu上安装Redis的详细教程

1、安装redis 首先&#xff0c;访问Redis官网&#xff0c;点击首页的【Get Started】&#xff0c;然后点击Install Redis on Linux 安装 终端依次输入以下命令&#xff0c;如果过程中没有错误提示&#xff0c;则redis安装完成。 sudo apt install lsb-release curl gpg cu…

【前端】NodeJS:会话控制

文章目录 1 介绍2 cookie2.1 cookie是什么2.2 cookie的特点2.3 cookie的运行流程2.4 浏览器操作cookie2.5 cookie的代码操作 3 session3.1 session是什么3.2 session的作用3.3 session运行流程3.4 session的代码操作 4 session和cookie的区别5 token5.1 token是什么5.2 token的…

网络安全之xss靶场练习

目录 一、xss靶场练习 1、Ma Spaghet! 2、Jefff 第一个方法 第二个方法 3、Ugandan Knuckles 4、Ricardo Milos 5、Ah Thats Hawt 6、Ligma 7、Mafia​编辑 8、Ok, Boomer 一、xss靶场练习 靶场地址 https://xss.pwnfunction.com/ 页面显示如下 1、Ma Spaghet! 分析…

旧版Pycharm支持的python版本记录

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;旧版Pycharm支持的python版本记录-CSDN博客 前言&#xff1a;近期由于打算研究GitHub上一个开源量化交易平台开发框架&#xff0c;但是该框架是基于python3.10的版本开发&#xff0c;所…

海康VisionMaster使用学习笔记5-开机自启动

开机自启动 在实际应用中&#xff0c;用户会希望机台上电开机后&#xff0c;软件能自启动避免现场人员误操作&#xff0c;减少机台重新上电时的操作步骤以提升效率。 设置 打开VM,点击设置,软件设置->开机自启动->勾选开机自启动->确定 默认运行界面 启动时以设定的…

MapReduce原理和操作

目录 一、MapReduce开发1. 数据处理的过程&#xff08;MapReduce&#xff09;2. 入门案例 二、MapReduce的高级特性1. 序列化2. 排序3. 分区4. Combiner——合并5. Shuffle——洗牌 一、MapReduce开发 1. 数据处理的过程&#xff08;MapReduce&#xff09; 注意 JobMapReduce&…

不同操作系统中如何搭建RabbitMQ开发环境?

大家好&#xff0c;我是袁庭新。今天介绍在不同操作系统中如何搭建RabbitMQ开发环境&#xff1f; 在使用RabbitMQ之前必须预先安装配置&#xff0c;参考RabbitMQ官网说明&#xff0c;RabbitMQ支持多平台安装&#xff0c;例如Linux、Windows、macOS、Docker等。不同架构的芯片对…

通过电影之镜,探索美的无限可能

通过电影之镜&#xff0c;探索美的无限可能&#xff1a;以《至爱梵高星空之谜》、《阳光灿烂的日子》与《这个杀手不太冷》为例 在光影交错的世界里&#xff0c;电影不仅是故事的讲述者&#xff0c;更是审美的引领者。三部风格迥异却同样引人入胜的电影——《至爱梵高星空之谜…

SSM学生社团管理系统—计算机毕业设计源码无偿分享20360

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 学生社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系…

海康VisionMaster使用学习笔记8-OKNG计数方案

OKNG计数方案 1. 添加图像源 2. 添加圆弧边缘缺陷检测 基本参数 自行绘制ROI,在图像上拖动小圆,圈住被测物 运行参数 边缘类型:选择最强边缘极性:由黑到白 缺陷距离阈值: 10 结果显示 为方便查看,文本显示内容设置为:检测结果:{} 光标移动到{}中间,选择模块状态 执行结果…

DeepSeek开源数学大模型,高中、大学定理证明新SOTA

DeepSeek-Prover-V1.5 通过结合强化学习和蒙特卡洛树搜索&#xff0c;显著提升了证明生成的效率和准确性。 AI 技术与数学发现的进展&#xff0c;正前所未有地交织在一起。 前段时间&#xff0c;著名数学家陶哲轩在牛津数学公开讲座中做了主题为「AI 在科学和数学中的潜力」的主…

利用modelscope下载模型

1. modelscope的简介 ModelScope作为一个先进的“模型即服务”(MaaS)平台&#xff0c;它的核心在于汇聚人工智能领域的尖端模型&#xff0c;降低了在现实世界应用这些前沿技术的门槛。该平台通过ModelScope库展现了其强大功能&#xff0c;这一库专为简化开发者体验而设计&…

CyberLink PowerDVD v23.0解锁版下载和安装教程 (专业蓝光影音播器)

前言 CyberLink PowerDVD 是一款全球专业蓝光影音播放软件&#xff0c;新版全新64位播放引擎&#xff0c;改进了8K超清视频播放、更高分辨率高清视频处理&#xff0c;同时4K视频后期处理还新增了色彩校正、对比度增强、HDR等。另外&#xff0c;新版支持HEIC/HEIF图像格式&…

【vue3动画】基于侦听器的动画

今天没事翻Vue3文档的时候看见一个不错的动画效果&#xff0c;做个记录&#xff0c;以后可能会用到 Vue3文档–基于侦听器的动画效果 //代码 import { ref, reactive, watch } from vue import gsap from gsap const number ref(0) const tweened reactive({number: 0 }) …