伽马校正(Gamma Correction)

为什么需要伽马校正?

部分人认为,是由于早期CRT显示器的输出亮度和输入电压存在非线性关系,具体就是近似2.2次幂的关系,导致显示器的亮度要比计算机上存储的亮度要低。

举个例子:假如你计算机存储的亮度是0.5(亮度范围是0~1),CRT显示器的输出亮度并不是0.5,而是约等于 0.218,具体计算过程如下
output=input2.2output = input^{2.2} output=input2.2
当你输入0.5时,输出到显示器的值为
output=0.52.2≈0.218output = 0.5^{2.2} \approx 0.218 output=0.52.2≈0.218
其中2.2这个指数就是伽马值,而显示器的这种非线性输出过程称为伽马展开(gamma expansion)。

为了能够得到正确的输出,必须对输入进行补偿,方法是对输入进行一次指数为1/2.2的幂次运算,这个补偿的过程就是伽马校正:

input⟶input12.2input \longrightarrow input^{\frac{1}{2.2}} input⟶input2.21​
经过伽马校正后,显示器便能正确显示我们的输入了 :
{input⟶input12.2output=(input12.2)2.2=input\left\{ \begin{aligned} input& \longrightarrow input^{\frac{1}{2.2}} \\ output& = (input^{\frac{1}{2.2}})^{2.2} = input \end{aligned} \right. {inputoutput​⟶input2.21​=(input2.21​)2.2=input​
还是之前那个例子,我们先对0.5进行伽马校正,实际给显示器的输入约为0.73
0.5⟶0.512.2≈0.730.5 \longrightarrow 0.5^{\frac{1}{2.2}} \approx 0.73 0.5⟶0.52.21​≈0.73
然后,计算显示器的输出
output=(0.73)2.2≈0.50output = (0.73)^{2.2} \approx 0.50 output=(0.73)2.2≈0.50
最终保证了输出也是0.5


既然伽马校正起源于早期CRT显示器的非线性输出问题,而现在基本已经淘汰掉这些显示器了,并且当今的显示器已经可以做到线性输出了,那么我们是不是可以直接废弃伽马校正了呢?

实际上,我们仍然需要伽马校正!

原因是:伽马校正可以提高暗部亮度的存储精度

人眼对于较暗(接近0)的亮度值比较敏感,对于较亮(接近1)的亮度值则不太敏感,我们只能用一个8位二进制(可以表达0~255的整数)来存储亮度值,我们希望在整个图像中尽可能保留暗部细节。

下面举了例子说明:

假定我们要存储0.2400.243这两个亮度值,如果不进行伽马校正,图片亮度的存储值分别为:
I1=0.240∗255=61.2⟶保留整数61I2=0.243∗255=61.965⟶保留整数61I_1 = 0.240 * 255 = 61.2 \stackrel{保留整数}{\longrightarrow} 61 \\ I_2 = 0.243 * 255 = 61.965 \stackrel{保留整数}{\longrightarrow} 61 I1​=0.240∗255=61.2⟶保留整数​61I2​=0.243∗255=61.965⟶保留整数​61
可以看到0.2400.243的存储值都是61,它们的细节差异丢失了,所以实际显示效果会是一样的。

如果我们进行一次伽马校正,则有:
I1=0.2401/2.2∗255≈133.3⟶保留整数133I2=0.2431/2.2∗255≈134.1⟶保留整数134I_1 = 0.240^{1/2.2} * 255 \approx 133.3 \stackrel{保留整数}{\longrightarrow} 133 \\ I_2 = 0.243^{1/2.2} * 255 \approx 134.1 \stackrel{保留整数}{\longrightarrow} 134 \\ I1​=0.2401/2.2∗255≈133.3⟶保留整数​133I2​=0.2431/2.2∗255≈134.1⟶保留整数​134
0.2400.243的存储值变为了133134,它们的实际显示效果就区分开了。

当然,伽马校正会带来亮度较大值的表示精度的减小,例子如下:

无伽马校正:
I1=0.844∗255=215.22⟶保留整数215I2=0.848∗255≈216.24⟶保留整数216I_1 = 0.844 * 255 = 215.22 \stackrel{保留整数}{\longrightarrow} 215 \\ I_2 = 0.848 * 255 \approx 216.24 \stackrel{保留整数}{\longrightarrow} 216 I1​=0.844∗255=215.22⟶保留整数​215I2​=0.848∗255≈216.24⟶保留整数​216
有伽马校正:
I1=0.8441/2.2∗255≈236.08⟶保留整数236I2=0.8481/2.2∗255≈236.59⟶保留整数236I_1 = 0.844^{1/2.2} * 255 \approx 236.08 \stackrel{保留整数}{\longrightarrow} 236 \\ I_2 = 0.848^{1/2.2} * 255 \approx 236.59 \stackrel{保留整数}{\longrightarrow} 236 \\ I1​=0.8441/2.2∗255≈236.08⟶保留整数​236I2​=0.8481/2.2∗255≈236.59⟶保留整数​236
可以看到,无伽马矫正的时候能区分的亮度值,到了伽马校正后反而无法分开了。

不过,人眼恰好对较暗值比较敏感,对较亮值不太敏感,所以亮部细节的丢失不会造成什么影响,而暗部细节的保留则会大大改善图像质量,这就是伽马校正至今依然采用的原因。


参考链接:

简单理解伽马校正:https://blog.csdn.net/tkokof1/article/details/87878442

Gamma 的由来:https://zhuanlan.zhihu.com/p/36581276

色彩校正中的 gamma 值是什么?https://www.zhihu.com/question/27467127

伽马校正(Gamma Correction)相关推荐

  1. OpenGL学习脚印:伽马校正(Gamma Correction)

    写在前面 由于CRT,LED等显示设备显示颜色时并非按照线性方式工作,因此我们在程序中输出的颜色,最终输出到显示器上时会产生亮度减弱的现象,这种现象在计算光照和实时渲染时对图形质量有一定影响,需要我们 ...

  2. 伽马校正(gamma correction)学习笔记

    学习HDR和Bloom特效的过程中,接触到了伽马矫正的问题.查阅了不少资料,这一篇讲的最清楚,下面的图片也是来自该文章. 这应该说是一个历史遗留问题,以前的CRT显示器是使用电子显像管,通过控制电流大 ...

  3. OpenGL Gamma Correction伽马校正的实例

    OpenGL Gamma Correction伽马校正 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <glad/glad.h> # ...

  4. Gamma Correction(伽马校正)

    定义 Gamma correction, gamma nonlinearity, gamma encoding, or often simply gamma, is the name of a non ...

  5. 我理解的伽马校正(Gamma Correction)

    [图形学]我理解的伽马校正(Gamma Correction) 2015年05月30日 18:22:52 妈妈说女孩子要自立自强 阅读数:69844 版权声明:本文为博主原创文章,未经博主允许不得转载 ...

  6. 伽马校正笔记(Gamma Correction)

    在数字图像系统中,伽马(Gamma)是一个重要的但很少被正确理解的特性.它定义了一个像素的数值和对应的实际亮度之间的关系. 人眼感知的亮度和相机"看到"的亮度区别 对于数码相机来说 ...

  7. 色彩校正(CCM)和伽马校正(Gamma)

    目录 1.色彩矫正(CCM) 2.伽马校正(Gamma) 1.色彩矫正(CCM)         色彩校正(Color Correction)是指用相同的方法改变图像中的所有像素的颜色值,以得到不同得 ...

  8. 【TA100】图形 2.6伽马(Gamma)校正

    很好的视频 https://www.bilibili.com/video/BV15t411Y7cf/?spm_id_from=333.788.b_636f6d6d656e74.96&vd_so ...

  9. matlab批量读取图像图片并批量处理图像(以伽马校正为例)以及批量保存图像

    文章目录 处理1张图片,获取4幅不同伽马校正图像 批量读取图片模板 批量处理多张图片,分别获取4幅伽马校正图像 参考 处理1张图片,获取4幅不同伽马校正图像 实验结果 实验代码 get_4_pictu ...

  10. 图像亮度、对比度调节(伽马校正)

    [OpenCV学习]图像亮度.对比度调节(伽马校正) 作者:gnuhpc  出处:http://www.cnblogs.com/gnuhpc/ #include "cv.h" #i ...

最新文章

  1. LTE-怎么获取上行资源
  2. 008_setting指令
  3. apr_pool -- 内存池
  4. SP1026 FAVDICE - Favorite Dice 期望dp
  5. 带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动
  6. oracle 中EXP、IMP 命令详解
  7. python字体大小颜色_在matplotlib中使用单词作为标记的“干净”方式?使字体大小和颜色不同?...
  8. java编码规范日常积累(持续更新)
  9. 知物由学 | 如何应对日益强大的零日攻击
  10. 【鲲鹏HCIA考试】随堂习题卷三
  11. element ui后台html_Github上10 个优秀的后台控制面板
  12. 蒜头君任务系统C语言,白菜君的三角形 T3180 计蒜客
  13. 开场PPT动画怎么做炫酷
  14. softmax函数反向传播
  15. 计算机专业的有关的外文文献,计算机专业外文外文 计算机专业专著类参考文献有哪些...
  16. 企业微信--扫一扫功能(隐形坑)
  17. Flutter 淡入淡出与逐渐出现动画
  18. 什么是make/Makefile?
  19. 不同局域网之间socket通信
  20. CodeForces-1062E LCA,DFN,RMQ

热门文章

  1. 网络编程-网路七层协议图
  2. android自动点击相应位置脚本,轻易连使用说明-自动连点器-安卓自动点击脚本 | MOS86...
  3. 如何设计一个秒杀系统(完整版)
  4. k2路由器改无线打印服务器,修改斐讯K2、K3路由器的无线密码【图解】
  5. 功率谱学习及matlab代码
  6. 谷歌浏览器(1) : 主题
  7. 【js练习】鼠标按下和松开事件
  8. ffmpeg音视频剪辑常用操作
  9. 如何使用视频剪辑软件将qsv格式视频转换为MP4格式
  10. 编程视频资源教程汇总