图像数据处理9

devtools/2025/1/7 6:00:58/

二、灰度变换

2.3 非线性灰度变换

以下式子中使用 f 表示输入图像的像素值,g 表示输出图像的像素值

2.3.1伽马校正(Gamma Correction)

γ 是伽马值,通常大于0。调整 γ 的值可以改变图像的亮度。当 γ<1 时,图像会变亮;当 γ>1 时,图像会变暗。在使用 伽马矫正时需先将输入灰度值r从[0,255]归一化到[0,1],变换后再把输出灰度值g从[0,1]线性映射到[0,255]之间。

import cv2  
import numpy as np  def gamma_correction(image, gamma):  # 构建一个映射表  table = np.array([((i / 255.0) ** gamma) * 255 for i in np.arange(0, 256)]).astype("uint8")  # 应用映射表进行伽马矫正  return cv2.LUT(image, table)  # 读取图像  
image = cv2.imread('.jpg')  # 设置伽马值  
gamma = 2.2  # 应用伽马矫正  
corrected_image = gamma_correction(image, gamma)  # 显示原图和矫正后的图像  
cv2.imshow('Original Image', image)  
cv2.imshow('Gamma Corrected Image', corrected_image)  # 等待按键操作后关闭窗口  
cv2.waitKey(0)  
cv2.destroyAllWindows()

2.3.2对数矫正(Logarithmic Correction)

其中,c 是一个常数,用于调整对数曲线的形状和位置。对数矫正可以扩展图像中较暗区域的细节,同时压缩较高灰度级的范围。

c值对图像的影响

  1. 亮度调整
    • 当 c 的值较小时,对数曲线的斜率较小,导致图像的整体亮度相对较低,暗部细节得到增强,但亮部可能显得过于暗淡。
    • 当 c 的值较大时,对数曲线的斜率增大,图像的整体亮度提高,亮部细节得到更好的保留,但暗部可能显得不够突出。
  2. 对比度调整
    • c 的值还影响着图像的对比度。较小的 c 值会增强图像的对比度,使暗部和亮部之间的差异更加明显。
    • 较大的 c 值则会降低对比度,使图像看起来更加柔和。

import cv2
import numpy as npdef logarithmic_correction(image, c=40):# 创建一个对数变换的映射表table = np.array([c * np.log(1 + i) if i > 0 else 0 for i in np.arange(0, 256)]).astype("uint8")# 应用映射表执行对数矫正return cv2.LUT(image, table)# 读取图像
image = cv2.imread('saved_image.jpg')# 缩小图像(可选)
scale_percent = 50  # 缩小到原图的50%
width = int(image.shape[1] * scale_percent / 100)
height = int(image.shape[0] * scale_percent / 100)
dim = (width, height)
resized_image = cv2.resize(image, dim, interpolation=cv2.INTER_AREA)# 应用对数矫正
corrected_image = logarithmic_correction(resized_image)# 水平拼接原图和矫正后的图像
concatenated_image = cv2.hconcat([resized_image, corrected_image])# 在一个窗口中展示拼接后的图像
cv2.imshow('Original and Logarithmic Corrected Image', concatenated_image)# 等待按键操作后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

c=1

c=10

c=40

2.3.3指数矫正(Exponential Correction)


其中,b和 k是常数,k的值通常略大于1。该函数能突出图像的亮区域,减弱图像的暗区域。

import cv2
import numpy as npdef exponential_correction(image, b, k):# 将图像数据类型转换为float,以便进行数学运算float_image = image.astype(float) / 255.0# 应用指数矫正公式corrected_image = b * (k ** float_image - 1)# 将矫正后的图像值重新缩放到0到255之间,并转换为uint8类型corrected_image = np.clip(corrected_image * 255.0, 0, 255).astype(np.uint8)return corrected_image# 读取图像
image = cv2.imread('slpn.jpg', cv2.IMREAD_GRAYSCALE)# 设置b和k的值
k=1.01
b = 125# 应用指数矫正
corrected_image = exponential_correction(image, b, k)# 水平拼接原始图像和矫正后的图像
concatenated_image = cv2.hconcat([image, corrected_image])# 缩小拼接后的图像
scale_percent = 50  # 缩小到原始尺寸的50%
width = int(concatenated_image.shape[1] * scale_percent / 100)
height = int(concatenated_image.shape[0] * scale_percent / 100)
dim = (width, height)
resized_concatenated_image = cv2.resize(concatenated_image, dim, interpolation=cv2.INTER_AREA)# 显示拼接并缩小后的图像
cv2.imshow('Original and Corrected Image (Resized)', resized_concatenated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

总结一下:①伽马校正常用于校正图像亮度的不均匀性,使图像更加符合人眼的视觉特性。②对数矫正常用于增强图像的对比度,特别是在暗区域中。③指数矫正常用于改善图像的视觉效果,使图像更加清晰。

注,本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。

“本文章中所使用的圣灵谱尼图片来源于网络,版权归属原作者所有。若您认为本文章/作品的使用侵犯了您的权益,请及时与我联系,我将尽快核实并删除相关内容。

文章来源:https://blog.csdn.net/2301_80400361/article/details/141141845
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/devtools/96226.html

相关文章

杭州百腾教育科技 TiDB 6.5 to 7.5 升级记录

作者&#xff1a; reAsOn2010 原文来源&#xff1a; https://tidb.net/blog/612103f3 背景 使用 TiDB 作为我们的全量数据库已经有六七年了&#xff0c;当时还是 2.0 版本。早期TiDB的迭代和新特性的发布对于实际使用的影响还是很大的&#xff0c;所以从那个时候开始就有每…

MySQL表的增删改查(基础)

目录 1. CRUD 2. 新增 (Create) 3. 查询 (Retrieve) 3.1 全列查询 ​3.2 指定列查询 3.3 查询字段为表达式 ​3.4 别名 ​3.5 去重 3.6 排序 3.7 条件查询 3.7.1 基本查询 3.7.2 AND于OR 3.7.3 范围查询 3.7.3.1 BETWEEN...AND... 3.7.3.2 IN 3.7.4 模糊查询:L…

HarmonyOS NEXT - 数据持久化存储(key,value进行AES加密处理)

demo 地址: https://github.com/iotjin/JhHarmonyDemo 代码不定时更新&#xff0c;请前往github查看最新代码 鸿蒙的数据持久化是通过PersistentStorage&#xff0c; PersistentStorage官方文档 PersistentStorage是应用程序中的可选单例对象。此对象的作用是持久化存储选定的A…

Cortex-A7的GIC(全局中断控制器)使用方法(1):GIC简介

0 参考资料 STM32MP13xx参考手册.pdf&#xff08;RM0475&#xff09; ARM Generic Interrupt Controller Architecture version 2.0 - Architecture Specification.pdf 1 GIC&#xff08;全局中断控制器&#xff09;介绍 Cortex-M内核使用NVIC&#xff08;嵌套向量中断控制器&…

常用开发环境和软件下查找整个项目文件中的内容和查找文件名的方法

一、Linux 下的在整个工程中查找内容 1、Linux 下查找字符串 grep -n 2019-10-24 00:01:11 ./* //-n 指示在文件中的行号 2、使用 find 命令来查找文件名中包含特定字符的文件 find /path/to/search -type f -name *abc* 从文件内容查找匹配指定字符串…

类和对象(下)(1)

类和对象&#xff08;下&#xff09; 再探构造函数 我们之前在实现构造函数的时候&#xff0c;初始化成员变量使用的方式都是在函数体内进行赋值&#xff0c;其实构造函数初始化成员变量还有一种方式&#xff1a;初始化列表。 初始化列表不只是为了写得方便&#xff0c;还能解…

Ricardo Milos

目录 一、题目 二、思路 三、payload 四、思考与总结 一、题目 <!-- Challenge --> <form id"ricardo" method"GET"><input name"milos" type"text" class"form-control" placeholder"True" va…

ptqt5 打包把资源文件合进exe文件中 单个exe文件即可

目录 安装 PyInstaller 项目结构 编写 spec 文件 修改代码以嵌入资源 打包应用程序 解释 检查打包结果 使用 PyQt5 开发的应用程序可以通过 PyInstaller 工具打包成单个可执行文件(exe),并将所有资源文件(如图像、图标、样式表等)嵌入到 exe 文件中。以下是如何实现…