伽马校正

article/2025/7/27 19:27:30

注:本文为博主参考书籍和他人文章并加上自己的理解所编,作为学习笔记使用并将其分享出去供大家学习。若涉及到引用您的文章内容请评论区告知!如有错误欢迎指正!

一、伽马校正简介    

    射伽马校正是图像预处理阶段经常使用的一个非线性算子,它可以去除输入辐射量和量化的像素值之间的非线性映。所谓伽玛校正就是对图像的伽玛曲线进行编辑,以对图像进行非线性色调编辑的方法,检出图像信号中的深色部分和浅色部分,并使两者比例增大,从而提高图像对比度效果。

二、伽马的概念以及为什么要校正

    什么是伽马(Gammar),它为什么需要被校正呢?在黑白电视的早期时代,CRT中的用于显示TV信号的荧光材料对其输入电压的响应是非线性的。电压V和其产生的亮度Y间的关系是由称作"gamma(γ)"的数刻画的,其幂函数公式粗略为

                                                                            Y=(V+e)^γ

    式中的e是补偿系数,γ (gamma)是幂函数的指数约为2.2,它用来衡量非线性部件的转换特性。这种特性称为幂-律(power-law)转换特性。按照惯例,"输入"和"输出"都缩放到0~1之间。其中,0表示黑电平(黑电平指在经过一定校准的显示装置上,没有一行光亮输出的视频信号电平。定义图像数据为0时对应的信号电平,调节黑电平不影响信号的放大倍数,而仅仅是对信号进行上下平移。如果向上调节黑电平,图像将变暗,如果向下调节黑电平图像将变亮。黑电平为0时,对应0V以下的电平都转换为图像数据0,0V以上的电平则按照增益定义的放大倍数转换,最大数值为255),1表示颜色分量的最高电平。对于特定的部件,人们可以度量它的输入与输出之间的函数关系,从而找出γ值。使用CRT的电视机等显示器屏幕,由于对于输入信号的发光灰度,不是线性函数,而是指数函数,从而导致整个图像的信号要比实际情况更暗,因此必需校正。

    实际的图像系统是由多个部件组成的,这些部件中可能会有几个非线性部件。如果所有部件都有幂函数的转换特性,那么整个系统的传递函数就是一个幂函数,它的指数γ 等于所有单个部件γ相乘(γ=γ1*γ2...*γn)。如果图像系统的整个γ =1,输出与输入就成线性关系。这就意味在重现图像中任何两个图像区域的强度之比率与原始场景的两个区域的强度之比率相同,这似乎是图像系统所追求的目标:真实地再现原始场景。但实际情况却不完全是这样。因为在某些场合例如放映电影以及投影幻灯片时为了在黑暗环境下获得更好的显示效果,所以我们需要进行伽马校正将最终的γ值设为1.5左右而不是1。

    还有一种环境称为中间环境的“暗淡环境”,这种环境就像房间中的其他东西能够看到,但比图像中白色部分的亮度更暗。看电视的环境和计算机房的环境就属于这种情况。在这种情况下,通常认为再现图像需要γ 被校正到1.25才能看起来像“原始场景”。

三、伽马校正

    所有CRT显示设备都有幂-律转换特性,如果生产厂家不加说明,那么它的γ 值大约等于2.5。用户对发光的磷光材料的特性可能无能为力去改变,因而也很难改变它的γ值。为使整个系统的γ 值接近于使用所要求的γ 值,就要有一个能够提供γ 校正的非线性部件,用来补偿CRT的非线性特性。

    要重现摄像机拍摄的画面,电视和监视器必须进行伽玛补偿。这种伽玛校正可以由摄像机完成。我们对整个电视系统进行伽玛补偿的目的,是使摄像机根据入射光亮度与显像管的亮度对称而产生的输出信号,所以应对图像信号引入一个相反的非线性失真,即与电视系统的伽玛曲线对应的摄像机伽玛曲线,它的值应为1/γ,我们称为摄像机的伽玛值。电视系统的伽玛值约为2.2,所以电视系统的摄像机非线性补偿伽玛值为0.45。彩色显像管的伽玛值为2.8,它的图像信号校正指数应为1/2.8=0.35,但由于显像管内外杂散光的影响,重现图像的对比度和饱和度均有所降低,所以现在的彩色摄像机的伽玛值仍多采用0.45。在实际应用中,我们可以根据实际情况在一定范围内调整伽玛值,以获得最佳效果。另外一个需要知道的事实时,大多数的图片在摄像机中已经被预处理过了,因此存储的颜色信息已经是伽马校正了的,我们在处理纹理时需要工作在线性的颜色空间下,因此需要对输入的图片,例如JPEG纹理进行处理,保证它在线性颜色空间下。

    如果要使伽马值为1,则需要进行如下式的伽马校正

                                                                            Y′=Y^(1/γ

                                                           

    红线表示显示器的伽马值,蓝线表示摄像机保存图片时进行的校正,紫线表示二者合成之后的结果。可以看出,显示器的gamma值越高,图像越偏暗。SRGB(gamma值为2.2时的称之为sRGB空间)标准中,通常显示设备的gamma值为约2.2。

    在发射前信号通过这个非线性映射有一个有效的负效应:传输期间增加的噪声(这是在模拟时代)在噪声比较明显的较暗信号区域中(在接收器做伽马校正后)会被减少。

    在彩色电视发明后,红、绿、蓝信号被分别做伽马非线性校正后再结合起来编码。

/***************************************************************时代分界线******************************************************/

    过去的时代是“模拟时代”,而今已进入“数字时代”。进入计算机的电视图像依然带有γ =0.5的校正,这一点可不要忘记。虽然带有γ 值的电视在数字时代工作得很好,尤其是在特定环境下创建的图像在相同环境下工作。可是在其他环境下工作时,往往会使显示的图像让人看起来显得太亮或者太暗,因此在可能条件下就要做γ 校正。另外伽马校正是点算子的一种,即某一像素点在输出时只与原图像中对应像素点有关,后面会详细介绍。

    为流行网站创建被几百万人浏览的图像是很平常的事情,因为大多数浏览者会有不同的监视器,有些计算机可能会内置部分伽马校正。此外,目前的图像标准并不包含创建图像的伽马值。因此在网站中存储图像时,一种合理的方法是用伽马值对图像进行预处理,此伽马值代表了在开放的市场中,在任意给定时间点,各种型号的监视器和计算机系统所期望的“平均值”。

               


http://chatgpt.dhexx.cn/article/5IlQbFLC.shtml

相关文章

可执行文件的装载,进程和线程,运行时库的入口函数(第六章)

目录 第1步.创建一个独立的虚拟内存空间 第2步.读取可执行文件头,建立虚拟空间和可执行文件之间的映射关系 第3步.将cpu的指令寄存器设置成可执行文件的入口地址,启动运行。 程序开始执行,发生页错误。 随着程序的执行,不停…

疯狂python讲义学习笔记——前十章完结

#第一章&#xff1a;绪论 #单行注释多行注释""" 多行注释 """#dir列出指定类或模块的属性与方法&#xff0c;help查看某个函数或方法的帮助文档 print(dir(str)) print(help(str.title))#第二章&#xff1a;数据类型 a5 print(type(a))#<clas…

嵌入式代码学习心得记录

一、C语言学习心得记录 函数递归 编写顺序 终结条件输入下一级递归参数,调用下一级递归函数.当前递归函数的操作代码,在下一级递归函数执行完成后执行的操作代码. #include <stdio.h> #include <string.h>void revert(char *s, int len) {// 终结条件if(len <…

python 字节流分段_一文掌握CTF中Python全部考点

声明&#xff1a;Tide安全团队原创文章&#xff0c;转载请声明出处&#xff01;文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用&#xff0c;任何人不得将其用于非法用途以及盈利等目的&#xff0c;否则后果自行承担&#xff01; 前 言 一次偶然的机会&#xff0c…

Python课程学习笔记 下

笔记目录 Python 学习笔记 上面向对象和异常面向对象基本理论定义类根据类实例化对象属性相关方法相关类的补充属性补充方法相关补充描述器python对象的生命周期内存管理机制面向对象的三大特性面向对象应当遵循的原则 错误和异常错误和异常的概念常见的系统异常和系统异常类继…

从点击APP图标到首页展示的加载过程

转载链接在这里 iOS 系统架构 Mac系统是基于Unix内核的图形化操作系统&#xff0c;Mac OS 和 iOS 系统架构的对比分析发现&#xff0c;Mac OS和iOS的系统架构层次只有最上面一层不同&#xff0c;Mac是Cocoa框架&#xff0c;而iOS是Cocoa Touch框架&#xff0c;其余的架构层次都…

python os模块

10.3 os模块 os就是“operating system”的缩写&#xff0c;顾名思义&#xff0c;os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os模块&#xff0c;一方面可以方便地与操作系统进行交互&#xff0c;另一方面页可以极大增强代码的可移植性。如果该模块中…

Python:异常处理,模块和包,正则表达式

1&#xff0c;异常处理机制 Python的异常处理机制可以让程序具有极好的容错性&#xff0c;让程序更加健壮。当程序运行出现意外情况时&#xff0c;系统会自动生成一个Error对象来通知程序&#xff0c;从而实现将“业务实现代码”和“错误处理代码”分离&#xff0c;提供更好的可…

操作系统面试题总结

进程的常见状态&#xff1f;以及各种状态之间的转换条件? 创建状态&#xff1a;进程在创建时需要申请一个空白PCB&#xff0c;向其中填写控制和管理进程的信息&#xff0c;完成资源分配。如果创建工作无法完成&#xff0c;比如资源无法满足&#xff0c;就无法被调度运行&#…

Python--多线程与并行

一、线程和进程介绍 1.1、进程基本概念 进程&#xff08;Process&#xff09;&#xff0c;是计算机中已运行程序的实体&#xff0c;曾经是分时系统的基本运作单位。在面向进程设计的系统&#xff08;如早期的Unix、Linux2.4及更早的版本&#xff09;中&#xff0c;进程是程序…

【Python学习】--pythonf笔记

系列文章目录 文章目录 系列文章目录前言一、Python代码规范&#xff08;编码、代码格式&#xff09;1. 编码2. 代码格式3. import 语句4. 空格 二、Python代码注释&#xff08;块注释、行注释、文档注释&#xff09;1. 块注释2. 行注释3. 建议4. 文档注释 三、Python命名规范&…

进程和信号

进程和信号 一、进程初识 1、程序的开始和结束 开始&#xff1a;编译链接时的引导代码。操作系统下的应用程序其实在main执行前也需要先执行一段引导代码才能去执行main。在程序链接时由链接器将编译器中事先准备好的引导代码给链接进去与我们的代码一起组成最终的可执行程序…

什么!学Python多进程的你还不知道multiprocessing模块?该充电了>_(Python编程 | 系统编程 | 并行系统工具 | multiprocessing模块)

文章目录 multiprocessing模块基本操作&#xff1a;进程和锁关于实现和用法的规则 *IPC*工具&#xff1a;管道、共享内存和队列管道共享内存和全局对象队列和子类 启动独立程序其他更多 multiprocessing模块 Python标准库中的multiprocessing模块允许脚本通过与threading模块非…

一文入门Python基础

Python基础 python中的输出函数 print()函数 可以输出的内容 数字字符串含有运算符的表达式(会返回表达式计算的结果) 内容输出的目的地 显示器文件 # 将数据输入文件中&#xff0c;注意点——所指的盘必须存在——使用filefp fp open(路径,模式) print(hello,file fp) fp.…

深入理解Linux进程管理(1.0)

学习方法论 写作原则 标题括号中的数字代表完成度与完善度 0.0-1.0 代表完成度&#xff0c;1.1-1.5 代表完善度 0.0 &#xff1a;还没开始写 0.1 &#xff1a;写了一个简介 0.3 &#xff1a;写了一小部分内容 0.5 &#xff1a;写了一半内容 0.9 &#xff1a;还有个别内容没写 1…

一、Linux系统编程:进程基础

1 进程基础 1.1 概念 定义 程序在计算机上的一次执行过程&#xff0c;执行中的程序。本质 1、程序在地址空间中按照代码逻辑控制流执行 2、资源分配最小单位 进程是一个抽象概念 1.2 进程与程序 区别 进程程序动态静态有生命周期指令集合只能对应一个程序可以对应多个进程…

YARN源码解析之NodeManager中的ContainerExecutor

在NodeManager中&#xff0c;有三种运行Container的方式&#xff0c;它们分别是: DefaultContainerExecutorLinuxContainerExecutorDockerContainerExecutor 从它们的名字中&#xff0c;我们就能看得出来&#xff0c;默认情况下&#xff0c;一定使用的是DefaultContainerExec…

linux进程状态怎么手动切换,二十六、Linux 进程与信号---system 函数 和进程状态切换...

26.1 system 函数 26.1.1 函数说明 system(执行shell 命令) 相关函数 fork&#xff0c;execve&#xff0c;waitpid&#xff0c;popen #include int system(const char * string); 函数功能&#xff1a;简化 exec 函数 函数说明 system()会调用 fork() 产生子进程&#xff0c;由…

进程控制(详解)

进程控制 上篇文章介绍了进程的相关概念&#xff0c;形如进程的内核数据结构task_struct 、进程是如何被操作系统管理的、进程的查看、进程标识符、进程状态、进程优先级、已经环境变量和进程地址空间等知识点&#xff1b; 本篇文章接着上篇文章继续对进程的控制进行展开&#…

c++跨平台技术学习(三)--使用标准API

Posix.1 API定义了大量的函数&#xff0c;在各方面的功能都很丰富&#xff0c;下面对其进行介绍 System V接口定义 它是一份描述了AT&T UNIX System V操作系统的文档&#xff0c;与POSIX.1保持一致&#xff0c;是它的一个超集。SVID由基础系统和扩展定义&#xff0c;它只…