彻底搞懂Gamma矫正
最近复习图形学的时候,复习到了Gamma矫正,笔记本上记得内容太少,没有看明白是啥意思,于是就到网上去搜索了一下,好了越看越不明白了……花了两天,终于算是搞懂了,写在这里分享一下。
首先,关于颜色矫正,有三个方面:
1,相机矫正
2,显示器矫正
3,人眼矫正
关于相机矫正:首先相机的感光元件感受的是辐照度(物理符号,表示单位时间通过单位面积的光能量,可以直接理解为在这个位置光的亮度【能量意义上亮度,不是人眼感受的亮度,不明白的话可以先看下面,看完了应该能够理解】)。如果场景之中之前有一个灯泡,现在我们再加上一个灯泡,相机在原位置能够接收到2倍的辐照度,那么相机会直接把2存储到图像吗?答案是不会,相机会大概存储 到图像上,至于原因请往下看。注意:你的硬盘存储的所有图像都是经过矫正过的,很意外吧!
关于显示器矫正:显示器矫正源于早期使用的CRT显示器(阴极射线管)的物理特性:I = ,即光强与输入电压的2.2次幂成正比(大致原因是:,即功率与电压U的平方成正比)。Gamma指的就是这里的2.2次幂,又称为灰度系数。注意:对于CRT显示器矫正是被动的,不受人控制的,即你永远无法改变你给一个电压U,输出的光强约为U的平方倍这一事实,它源于物理特性。然而,现代的LCD,AMOLED显示器已经没有这个特性,但是为了与过去一致,显示器的驱动程序程序会自动对输出进行校对,即用软件计算出 I = ,然后输出到屏幕上。这个过程是可控的,在Windows操作系统上,可以进入设置-系统-显示-高级显示设置(在最下面倒数第二个蓝色的)-显示器的显示适配器属性-颜色管理-颜色管理-高级-校准显示器,对Gamma参数进行调整。
关于人眼矫正:人眼对暗处的分辨能力强于明亮处,这是进化的结果(这样可以帮助人们发现夜晚的危险)。即:人眼能够分辨暗处更多的细节。转化为数学公式可以写成:,即人感知的亮度约是辐照度的0.45次幂。在这种情况下,如果某个物体的辐照度为0.22,那么人眼感受到的光强约为,可以看出,当光源较弱时,人眼感受的光实际更强了。
在这三种矫正的作用下,奇妙的事情发生了:
- 假设一个灯泡的亮度是1个单位亮度,那么两个灯泡的亮度就应该是2个单位亮度。
- 如果我们直接看这两个灯泡,根据人眼矫正,我们的眼睛感受到 单位亮度。
- 我们用摄像机对这两个灯泡进行拍照,摄像机的感光原件能够感受到2个单位亮度。但是别忘了相机矫正,即相机会对亮度进行处理再存储到图像上。相机校正后的亮度。
- 现在这一张照片被显示到了屏幕上,根据显示器矫正:,即显示器输出的亮度为2个单位亮度。
- 现在我们用眼睛来观察屏幕,根据人眼矫正:,即我们感受到的1.36个单位亮度。
怎么样,发现哪里有问题了吗?
没错,经过一系列矫正之后,我们观察显示器得到的亮度和我们直接观察两个灯泡的亮度是一样的!!这就是Gamma矫正!!下面的图可能能够帮助你理解。
或者:
知道了Gamma矫正,这对我们的渲染有什么用呢?
1,我们的纹理图像是矫正过的。即纹理图像中的数字不代表光强,我们需要将强度取2.2次幂才能得到实际光强,这样的光强相加才具有物理意义。当然对于相加得到光强,我们还需要将其矫正(取0.45次幂)才能输出到屏幕上(这一步是还原相机对图像的矫正)。
2,对于光源的衰减:物理上光强度与半径的平方成反比:,由于显示器Gamma,,我们得到显示的光强与半径的4.4次幂成反比,这样的衰减有些过度了。我们可以不使用物理公式,而令I与半径成反比,这样经过显示器Gamma后,还是可以分辨的。
一些注解:
多数显示器的Gamma值为2.2,但并不是绝对的。Gamma值甚至可以手动调节。
我也是个初学者,上面的内容很可能存在错误,欢迎指正。
彻底搞懂Gamma矫正相关推荐
- 一文多图搞懂KITTI数据集下载及解析
转载自一文多图搞懂KITTI数据集下载及解析-阿里云开发者社区 KITTI Dataset 1.图片下载:点击下载:https://s3.eu-central-1.amazonaws.com/avg- ...
- 一文搞懂什么VR,什么是6Dof,欧拉角,四元数转视图矩阵
目录 一.什么是VR 二.什么是3Dof,6Dof, 9Dof 三.欧拉角(姿态角) 四.Android手机的欧拉角与坐标系 五.安卓坐标系转换欧拉角 六.根据姿态四元数求视图矩阵 一文搞懂什么VR, ...
- zhs16gbk对应mysql_[Oracle] 彻底搞懂Oracle字符集
基本概念字符集(Character set):是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.常见的字符集有ASCII,ZHS16GB231 ...
- 面试必备|带你彻底搞懂Python生成器
2019年人工智能系统学: https://edu.csdn.net/topic/ai30?utm_source=ai100_bw 作者 | Rocky0429 转载自 Python空间(ID:Dev ...
- 20分钟教你搞懂Git!
Git 是最流行的版本管理工具,也是程序员必备的技能之一.本文就来教你 20 分钟搞懂 Git! 以下为译文: 尽管每天你都会用到Git,但也有可能搞不懂它的工作原理.为什么Git可以管理版本?基本命 ...
- 搞懂机器学习的常用评价指标!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陈安东,湖南大学,Datawhale成员 我与评价指标的首次交锋是 ...
- 一文搞懂结构体的定义及实际使用
大家好,我是无际,无实战不理论. 今天给大家讲一下结构体. 大家可能很好奇,为什么这种文章教程泛滥了,我还要拿出来讲. 相信无际的铁粉都知道,我分享的干货和经验出发点是实际产品应用. 脱离产品你所学的 ...
- 想要彻底搞懂“异地多活”,看完这篇就够了
在软件开发领域,「异地多活」是分布式系统架构设计的一座高峰,很多人经常听过它,但很少人理解其中的原理. 异地多活到底是什么?为什么需要异地多活?它到底解决了什么问题?究竟是怎么解决的? 这些疑问,想必 ...
- 这一次,你能彻底搞懂 Flink!
近年来,AI 场景发展得如火如荼,同时其计算规模也越来越大.这也让专注于数据处理的 Flink 有了较大的发展空间.Flink作为在大数据生态里实时处理的一个新框架,在一定程度上也有一定的难度. Fl ...
最新文章
- Java .net 心得_关于Java和.Net的一些感想
- python项目归纳总结-python总结七
- 【安全漏洞】利用CodeQL分析并挖掘Log4j漏洞
- 命令流水帐之二:配置Server环境LAMP
- Input placeholder属性样式修改(颜色,大小,位置)
- oracle存储过程隐式函数,Oracle存储过程,函数。
- My97 DatePicker获取自定义日期的前一天
- leetcode 377. 组合总和 Ⅳ(dp)
- 推荐一个接口文档工具
- 设计模式学习总结(一)——设计原则与UML统一建模语言
- Android 开发者们,如何使用 Python 来扩展 adb 命令?
- IOS下图片不能显示问题的解决办法
- Mouse Without Border 无法安装问题
- 《剑指offer》面试题22——栈的压入、弹出序列(C++)
- ORACLE 正則表達式
- TiledMap 使用
- centos 计算器_在Linux命令行中使用计算器的5个命令
- Silvaco TCAD 2017 在RedHat6.5 Linux系统的安装教程
- access里面的表达式运用_Access 如何使用表达式生成器
- blast2go mysql_从 Blast2GO 本地化聊一聊 Linux 下 MySQL 的源码安装