图像的伽马变换

news/2024/12/22 20:46:41/

  伽马变换(Gamma Correction)是一种在图像处理中常用的非线性变换方法,用于调整图像的亮度和对比度。它在图像的像素值上应用一个幂次函数,以改变图像的灰度级分布,从而影响图像的感知亮度。伽马变换通常用于纠正显示器的非线性响应以及在低光照条件下拍摄的图像的亮度调整。
  伽马变换的原理:在图像处理中,原始图像的亮度与显示器或摄像机的响应并不总是线性关系。伽马变换通过对每个像素的值应用一个幂函数来调整图像的亮度分布。这个幂函数的参数称为伽马值(γ),它可以用来控制图像的对比度和明暗程度。
  公式表示为:
I out = I in γ I_{\text{out}} = I_{\text{in}}^\gamma\ Iout=Iinγ 
  其中, I in I_{\text{in}} Iin是输入图像的像素值, I out I_{\text{out}} Iout是输出图像的像素值, γ \gamma γ是伽马值,通常取大于0的实数。
  伽马值gamma控制了变换的曲率。当 gamma > 1时,图像的低亮度部分会被拉伸,从而增强了图像的对比度。当 gamma < 1时,图像的高亮度部分会被拉伸,从而减弱了图像的对比度。
  伽马变换的意义和适用场景:伽马变换可以用于调整图像的感知亮度和对比度,使得图像在显示设备上或特定环境中更容易观察和分析。它在以下情况下特别有用:
  纠正显示器的非线性响应:显示器通常具有非线性的光强-显示响应曲线。通过应用适当的伽马变换,可以纠正这种非线性响应,使图像在显示器上呈现更准确的亮度和对比度。
  调整低光照图像:在低光照条件下拍摄的图像通常会变得模糊且缺乏对比度。通过应用伽马变换,可以增强图像的细节和对比度,使其更容易分析。
  以下是使用OpenCV进行图像伽马变换的代码示例:

import cv2
import numpy as npclass Gamma:def __init__(self,input_path,gama):self.input_path=input_pathself.gama=gamadef gamma_correction(self):img=cv2.imread(self.input_path,flags=0)if img is None:print('Unable to load image!')else:print('Load image successfully!')for i in range(len(self.gama)):corrected_image=np.power(img/255,self.gama[i])*255corrected_image=np.clip(corrected_image,0,255).astype(np.uint8)self.img_show(corrected_image)def img_show(self,image):cv2.namedWindow("image", cv2.WINDOW_FREERATIO)cv2.imshow('image', image)cv2.waitKey(0)cv2.destroyAllWindows()imgfile = "./Images/cat.jpg"
gamalist=[0.3,0.4,0.8,1.2,1.5]
img=Gamma(imgfile,gamalist)
coorected_img=img.gamma_correction()

http://www.ppmy.cn/news/1028235.html

相关文章

win11怎么关闭病毒和威胁防护?

win11怎么关闭病毒和威胁防护?随着Windows11的发布&#xff0c;微软为我们带来了许多新功能和改进&#xff0c;其中包括更强大的病毒和威胁防护功能。有时候您可能希望关闭这些功能&#xff0c;以便获得更好的性能或者使用其他第三方安全软件。 win11怎么关闭病毒和威胁防护?…

docker desktop搭建 nginx

【docker 桌面版】windows 使用 docker 搭建 nginx 拉取 nginx 镜像 docker pull nginx运行容器 docker run -d -p 80:8081 --name nginx nginx本地磁盘创建 nginx 目录 D:\DockerRep\nginx复制 docker 中的 nginx 配置文件 查看运行的容器 docker ps -a docker cp 9f0f82d66dd…

787. 归并排序

文章目录 QuestionIdeasCode Question 给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行&#xff0c;第一行包含整数 n 。 第二行包含 n 个整数&#xff08;所有整数均在 1∼109 范围…

代码审计-ASP.NET项目-未授权访问漏洞

代码审计必备知识点&#xff1a; 1、代码审计开始前准备&#xff1a; 环境搭建使用&#xff0c;工具插件安装使用&#xff0c;掌握各种漏洞原理及利用,代码开发类知识点。 2、代码审计前信息收集&#xff1a; 审计目标的程序名&#xff0c;版本&#xff0c;当前环境(系统,中间件…

vs使用def导出文件简介

vs使用def导出文件简介 1.首先需要创建一个dll项目&#xff0c;否则没地方配置使用def文件的指向 2.定义一系列函数并创建一个def文件 3.配置使用def文件的指向编译即可 配置到导出格式时候可以通过NONANE选项使到处函数的符号名字为空&#xff0c;X为导出的序号&#xff0c…

【CSH 入门基础 5 -- csh 文件监控脚本实现】

文章目录 背景CSHLL 代码实现cshell 中 unset 的介绍bash 中监控文件的方法 背景 由于开发代码是在外网编译&#xff0c;而镜像的烧写是在内网中的EDA工具中进行的&#xff0c;所以就需要先将代码在外网编译好后&#xff0c;再通过FTP工具将镜像传输到内网中&#xff0c;然后在…

Linux下grep通配容易混淆的地方

先上一张图: 我希望找到某个版本为8的一个libXXX.8XXX.so ,那么应该怎么写呢? 先看这种写法对不对: 是不是结果出乎你的意料之外? 那么我们来看一下规则: 这里的 "*" 表示匹配前一个字符的零个或多个 于是我们就不难理解了: lib*8*.so 表示 包…

备战秋招012(20230808)

文章目录 前言一、今天学习了什么&#xff1f;二、动态规划1.概念2.题目 总结 前言 提示&#xff1a;这里为每天自己的学习内容心情总结&#xff1b; Learn By Doing&#xff0c;Now or Never&#xff0c;Writing is organized thinking. 提示&#xff1a;以下是本篇文章正文…