图像数据处理9

news2024/11/16 5:39:17

二、灰度变换

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 np


def 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 np


def 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()

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

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

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

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

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

相关文章

一个简单的Rtmp推流客户端(QT录音,OpenCV摄像,FFmpeg编码推流)

RTMP&#xff08;Real-Time Messaging Protocol&#xff09;是一种实时流媒体传输协议&#xff0c;常用于音视频直播。 RTMP推流客户端是一种能够将音视频数据推送到直播服务器的工具。QT录音是利用Qt库实现的录音功能。OpenCV摄像是利用OpenCV库实现的对摄像头的控制和图像处理…

Chrome书签搜索插件

效果展示 这是一个chroma插件&#xff0c;可以按住 ctrl/command B 进行搜索您的书签&#xff0c;并且点击打开您的书签。支持上下切换回车打开新页面。支持文件夹搜索。多层级文件夹使用 / 分割。如&#xff1a;文件夹1/文件夹2/标签1 扩展下载地址 bookmark-search 欢迎有…

小程序学习day09-WXS脚本、自定义组件-组件的创建、引用、组件与页面的区别、组件的样式隔离

39、WXS脚本&#xff08;小程序独有的一套脚本语言&#xff09; &#xff08;1&#xff09;作用&#xff1a;结合WXML&#xff0c;可以构建出页面结构 &#xff08;2&#xff09;应用&#xff1a;在小程序中充当过滤器。&#xff08;wxml无法调用在页面的.js中定义的函数&…

DNS in Kubernetes

DNS in Kubernetes 对象分配的名称Service DNS 记录Pod DNS 记录 Cluster DNS参考 DNS for Services and Pods 这里主要讨论集群内不同对象之间的DNS解析 默认情况下&#xff0c;创建集群时&#xff0c;k8s会部署内置的DNS服务器&#xff0c;在集群内&#xff0c;我们不关注…

spring-boot-3.2.6+spring-security-6.2.4+oauth2整合github示例

一、添加依赖 在 pom.xml 中添加如下依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"h…

<数据集>航拍路面病害识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3151张 标注数量(xml文件个数)&#xff1a;3151 标注数量(txt文件个数)&#xff1a;3151 标注类别数&#xff1a;7 标注类别名称&#xff1a;[Longitudinal crack, Transverse crack, Alligator crack, Oblique cr…

腾讯 图标点选 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我…

Element UI中报dateObject.getTime is not a function解决方法~

1、错误信息。 2、该报错原因是Element UI中日期组件的校验规则是type: "date",而一般我们从后台拿到的数据是字符串型的&#xff0c;不满足预期&#xff0c;就会报错。 3、解决方法。 去掉日子组件中的type: "date"校验规则即可。 rules: {newName: [{…

SOMEIP_ETS_046: echoUTF16FIXED

测试目的&#xff1a; 验证设备&#xff08;DUT&#xff09;是否能够正确处理echoUTF16FIXED方法的参数&#xff0c;并确保发送和接收的参数顺序和值保持一致。 描述 本测试用例旨在检查DUT在接收到一个使用echoUTF16FIXED方法的SOME/IP消息时&#xff0c;是否能够按照请求中…

利用PostgreSQL向量数据库和负责任的AI知识库在亚马逊云科技上构建商品推荐机器人

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技利用Postg…

软件需求规格说明书编写规范(Doc原件)

软件需求规格说明书编写规范&#xff08;Word原件&#xff09; 1.项目背景 2.项目目标 3.系统架构 4.总体流程 5.名称解释 6.功能模块 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明…

WPF MvvmLight

关于 停止更新 官网&#xff1a;http://www.mvvmlight.net/ 源码地址&#xff1a;GitHub - lbugnion/mvvmlight: The main purpose of the toolkit is to accelerate the creation and development of MVVM applications in Xamarin.Android, Xamarin.iOS, Xamarin.Forms, Wi…

C++ //练习 17.17 更新你的程序,令它查找输入序列中所有违反“ei“语法规则的单词。

C Primer&#xff08;第5版&#xff09; 练习 17.17 练习 17.17 更新你的程序&#xff0c;令它查找输入序列中所有违反"ei"语法规则的单词。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块&#xff1a; /**********…

定制开发AI智能名片O2O商城小程序:基于限量策略与个性化追求的营销创新

摘要:随着科技的飞速发展和消费者需求的日益多元化&#xff0c;传统商业模式正经历着前所未有的变革。在数字化转型的大潮中&#xff0c;定制开发AI智能名片O2O商城小程序作为一种新兴的商业模式&#xff0c;凭借其独特的个性化定制能力、高效的线上线下融合&#xff08;O2O&am…

居住证申报系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;群众用户管理&#xff0c;警方管理&#xff0c;居住证登记管理&#xff0c;回执单管理&#xff0c;领证信息管理&#xff0c;公告栏管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页…

MySQL数据库专栏(四)数据库操作

1、创建数据库 create database if not exists [数据库名称] character set [字符集] COLLATE [排序规则]; 例如&#xff1a;create database if not exists db_demo character set utf8mb4 COLLATE utf8mb4_general_ci; if not exists&#xff1a;判断数据库是否存在&#x…

Ubuntu20, Windows10 双系统安装

1. 制作启动盘 1.1 下载 Ubuntu 系统镜像 ISO 文件 从 Ubuntu 官网下载 (https://cn.ubuntu.com/download/desktop)。官网访问慢的&#xff0c;从国内镜像点下。 1.2 烧录 Ubuntu ISO 镜像 下载 Rufus&#xff1a;从Rufus官网下载 Rufus 工具。 插入U 盘&#xff1a;将U盘插…

详解语义安全(semantically secure)

目录 一. 引入 二. 密文与明文 2.1 通俗性理解 2.2 定理 2.3 定理理解 三. 语义安全的第一个版本 3.1 基本理解 3.2 定理 3.3 定理理解 四. 语义安全的第二个版本 4.1 直观解释 4.2 小结 一. 引入 密码学中安全加密要求&#xff1a;敌手&#xff08;adversary&…

“百板齐发“ — 一个拥有上百个独特看板的代码

精选100套AXURE可视化数据大屏看板 产品经理高效工具 高保真原型模板 赋能智慧城市 元件库 AXURE9.0版本&#xff0c;所有页面均可编辑&#xff0c;部分地图与实现放大缩小&#xff0c;拖拉拽的功能。 01.水质情况实时监测预警系统 02.全国停车云实时数据监测系统 03.中国移…

【系统分析师】-综合知识-补充知识

1、在软件设计中&#xff0c;通常由着眼于“宏观的”软件架构开始&#xff0c;由着眼于“微观的”构件模块结束。 即测试应该从“微观”开始&#xff0c;逐步转向“宏观”。 2、数据备份是信息系统运行管理时保护数据的重要措施。增量备份可针对上次任何一种备份进行&#xf…