一、什么是线性颜色空间和伽马颜色空间?

线性颜色空间是指与显示亮度值之间呈线性关系的像素值空间。

伽马(Gamma)颜色空间是指线性颜色空间中的像素值经过伽马校正得到的颜色空间。

之所以使用伽马颜色空间是由于早期CRT显示器的输入电压与显示亮度值之间呈一种非线性关系,如图1所示,这个非线性关系曲线近似为指数函数曲线,这个指数称为Gamma。

图1 Gamma颜色空间像素值与显示亮度关系

这种非线性关系会导致图片显示颜色偏暗。例如,一个典型的Gamma值为2.2,在这种情况下当输入像素值为最大值的50%时,实际显示的亮度还不到亮度最大值的25%。

为了修正显示效果,在显示前会将图片的像素值做Gamma校正。Gamma校正的表达式如下:

使用伽马颜色空间更便于在显示器中显示。如今的LCD显示器虽然不存在非线性关系的问题,但为了继承这一属性,通常也会模拟这个非线性关系。

二、颜色空间的转换

虽然使用伽马空间便于显示,但是我们在渲染过程中对颜色值进行计算时,却希望使用线性颜色空间。这是因为光的传播是线性的。两束光打到同一个地方,得到的亮度是两束光“颜色”相加,而不是相乘、相减或者其他计算方式。

因此,在渲染过程中,要确定使用的是线性颜色空间,必要时需要把图片从伽马颜色空间转换到线性颜色空间。例如,所有的 JPEG 格式文件都会预校正为 Gamma 值为 2.2 的 Gamma颜色空间中,在渲染时需要转换到线性颜色空间再进行计算。而在显示前,应当将像素值变换到伽马颜色空间。

三、sRGB格式

为了避免繁琐的颜色空间转换,微软和惠普联合制定了一个规范,也就是目前我们最最常用的 Color Profile : sRGB

所有的现代 GPU 都支持 sRGB 贴图格式。这类格式的图片虽然的像素还是经过 Gamma 校正的,但是文件里还保存了校正的 Gamma 值。但在使用前GPU会进行自动校正,因此使用sRGB格式可以保证 Shader 在访问贴图时,返回的是线性颜色空间下的值。

在显示之前,如果设定了 Frame Buffer 的格式为 sRGB,Shader 只需要直接把计算得到的值写进 FrameBuffer 就好了。GPU 会自动把值做 Gamma 校正,然后再写到 FrameBuffer。

线性颜色空间与伽马颜色空间相关推荐

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

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

  2. unity3D中的伽马空间和线性空间

    https://zhuanlan.zhihu.com/p/66558476 https://zhuanlan.zhihu.com/p/88317263 https://zhuanlan.zhihu.c ...

  3. 数字图像处理(18): 图像灰度变换——线性灰度变换 和 非线性灰度变换(对数变换 与 伽马变换)

    目录 1 灰度变换简介 2 线性灰度变换­-图像反转 3 非线性灰度变换 3.1 对数变换 3.2 伽马变换 参考资料 1 灰度变换简介 灰度变换是图像增强的一种重要手段,用于改善图像显示效果,属于空 ...

  4. 【Unity3D】sRGB伽马(gamma)空间和sRGB Frame Buffer线性空间的简单介绍

    2022年7月20日更新 线性空间是指物理意义上的真实颜色值,伽马空间是人眼会自动将真实世界进行一个伽马校正运算,即对数据进行1/2.2次幂,提高较暗区域细节,减弱亮区域细节.人眼处理这种细节变化是用 ...

  5. 有生之年转ta系列 2.6 伽马校正

    本文内容来自 [技术美术百人计划]图形 2.6 伽马校正 观后记录 美术岗位代码或者算法一类的问题可能不太懂 本文仅用来记录学习,如果有不对的请指出谢谢 图形部分 第二章 伽马校正 颜色空间 色度图 ...

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

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

  7. (二十)unity shader之——————基于物理的渲染技术(PBS):下篇(PBS技术拓展:全局光照、伽马校正、HDR)

    前面两篇文章我们介绍了PBS实现的数学和理论基础,和standard shader的原理和实现,还有一些其他的渲染相关的unity技术.其中有些概念和技术没有讲的很详细,现在对这些重要的概念进行更深入 ...

  8. OpenCV计算机视觉学习(3)——图像灰度线性变换与非线性变换(对数变换,伽马变换)

    人工智能学习离不开实践的验证,推荐大家可以多在FlyAI-AI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力.FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台.每周免费提供 ...

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

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

最新文章

  1. GDB调试--以汇编语言为例
  2. Gerrit代码Review入门实战
  3. Spring IOC 容器源码分析 - 创建原始 bean 对象
  4. JDBC连接sql server数据库
  5. C++:基于范围的for循环
  6. linux中的medium_如何在freeCodeCamp Medium出版物中发布
  7. M0/M3的异常和中断
  8. 游戏是如何限制多开的,如何解决
  9. 怎么查看表用了那个序列_3套阴瑜伽序列,让你身心平衡
  10. 【整理】牛客网编程题前端篇(中等难度)
  11. 淘宝电子面单怎么用CAINIAO打印组件调打印偏移
  12. EAN13条形码生成器(C++)
  13. 关于STM32xE系列芯片STOP模式下使用RTC唤醒所遇到的问题记录
  14. 单片机之步进电机驱动篇(一)
  15. Easy Touch参数
  16. 手机ram和rom的区别
  17. 【Unity面板属性扫盲】导入模型后属性设置之——Avatar Mapping 选项卡
  18. DP转HDMI音视频数据转换器普瑞PS176方案设计
  19. ubuntu20.4安装anaconda和pycharm
  20. Keras中predict()方法和predict_classes()方法和evaluate()方法

热门文章

  1. mysql外网访问phpmyadmin_MYSQL如何用phpMyAdmin设置外部IP可以访问
  2. 云服务器CPU Intel Xeon Platinum 8163(Skylake)处理器性能评测
  3. flink案例之求TopN
  4. 【数据库】主键,超键,候选键,外键区别与联系?
  5. 51单片机mysql_51单片机之蓝牙遥控小车_效果展示+单片机知识+完整蓝牙电车代码...
  6. @5-1 CCF 2019-12-1 报数
  7. Java实现超市管理系统(含数据库)
  8. Win7 UltraIso刻录时报错解决办法
  9. 基于Python实现的论坛帖子情感分析
  10. python二进制转中文_python3 二进制转中文