图像伽马校正_自动梯形校正

图像伽马校正_自动梯形校正一、Gamma校正1、颜色空间图中可以看到,sRGB和Rec.709的色域虚线一样,三原色的位置是相同的,那么它们之间的区别就是:传递函数不同2.传递函数定义知道了颜色的颜色值之后,想要在电子设备上显示,就需要把它转换为视频信号,需要一个函数来换算,传递函数就是用来做转换的。传递函数包括两部分光转电传递函数(OETF),把场景线性光转到非线性视频信号值。电转光传递函数(EOTF),把非线性视频信号值转到显示光亮度。3.Gamma校正定义伽马是显示器电光传递函.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、Gamma校正

1、颜色空间

图像伽马校正_自动梯形校正

 图中可以看到,sRGB和Rec.709的色域虚线一样,三原色的位置是相同的,那么它们之间的区别就是:传递函数不同

2.传递函数

定义

知道了颜色的颜色值之后,想要在电子设备上显示,就需要把它转换为视频信号,需要一个函数来换算,传递函数就是用来做转换的。

传递函数包括两部分

光转电传递函数(OETF),把场景线性光转到非线性视频信号值。

电转光传递函数(EOTF),把非线性视频信号值转到显示光亮度。

3.Gamma校正

定义

伽马是显示器电光传递函数的一种,是指对线性三色值和非线性视频信号之间进行编码和解码的操作。

例子:

OETF:拍到的照片,存在电脑里,就是把自然界中的光信号编码为视频信号

EOTF:查看照片时,就要把视频信号还原为线性的光信号,进行解码操作

线性空间(相机捕捉到的真实世界光信号) + gamma编码 + 显示器显示 = 结果

图像伽马校正_自动梯形校正

 

左图为存在硬盘中,将捕获到的物理数据做一次gamma值约为0.4的映射

中间为显示图像时,需要为每一个像素做一次gamma值约为2.2的校正,来使的最终结果为正确的物理数据。

经过gamma校正好,之前偏亮的图像亮度降低了。

图像伽马校正_自动梯形校正

 

二、为什么用Gamma校正

概括

1、和人眼的特性有关

人眼对暗部的变化感应更敏感

2、非线性转换为了优化存储空间和带宽

我们用于显示图像数据都是8bit,要充分利用带宽,就需要使用更多位置去存储暗部值。也就是 暗部使用高精度保存,亮部使用相对较低精度保存。

伽马2.2的存在和显示器本身没有任何因果关系,伽马2.2是为了让8位图 有限的存储空间可以表达适合人眼的色彩感知特性而不产生色彩断层(因为人眼对亮部和暗部的感知是非线性的,对暗部更敏感),伽马2.2的目的是将有限的色彩信息存储空间更多地留给暗部

1、人眼特性展开

韦伯定理

当所受刺激越大时,需要增加的刺激也要足够大才会让人感觉到明显的变化,但是只适用于中等强度的刺激

全黑时增加一点亮度就能看到变化,每一次都要比上次增加更多的光照量才能看到变化,所以暗部我们感知细腻,亮部看不出变化

美术上的均匀和物理上的均匀

图像伽马校正_自动梯形校正

上边是视觉上的均匀变化,而下边是物理量上的均匀变化。

理论上上边的中灰是物理量上(下边)的21.8%,视觉上认为的美术中灰色,大约是物理中灰色的20%

Gamma校正就是一个把物理灰阶映射成美术灰阶的函数

图像伽马校正_自动梯形校正

为什么现实中看到的光强度变化是正确的,不能忠实的记录下来显示就行了,而要来回转换呢?

2、优化带宽展开

8位通道图片只能储存256种灰阶

现实有无限灰阶,8位通道图片只能储存256种灰阶有要节约使用

上一点我们知道人眼对亮部不敏感,对暗部敏感

如果用物体上物理光照强度的50%作为采样中线

按照物理光强的变化来均匀采样

可以看到人眼感知到的亮部区域用了大量灰阶来采样,而暗部却很少,因为暗部的物理变化量小

图像伽马校正_自动梯形校正

如果均匀采样物理灰阶,暗部只有56个层次可用

图像伽马校正_自动梯形校正

 暗部采样灰阶不够用便会出现巨大色阶断层

图像伽马校正_自动梯形校正

 均匀记录美术灰阶的样本分布

就可以解决这个问题 

图像伽马校正_自动梯形校正

所以为了用有限的灰阶采集到人眼感兴趣的信息,我们需要使用伽马校正在美术灰阶和物理灰阶之间转换

三、应用

图像伽马校正_自动梯形校正

 图像伽马校正_自动梯形校正

 图像伽马校正_自动梯形校正

 

unity中的伽马设置

图像伽马校正_自动梯形校正

 图像伽马校正_自动梯形校正

 Unity中GAMMA校正的一些内置函数 图像伽马校正_自动梯形校正

 Unity中GAMMA校正的一些内置函数

inline float GammaToLinearSpaceExact (float value)
{
        if (value <= 0.04045F)
            return value / 12.92F;
        else if (value < 1.0F)
            return pow((value + 0.055F)/1.055F, 2.4F);
        else
            return pow(value, 2.2F);
}
inline half3 GammaToLinearSpace (half3 sRGB)
{
        // Approximate version from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1
        return sRGB * (sRGB * (sRGB * 0.305306011h + 0.682171111h) + 0.012522878h);

        // Precise version, useful for debugging.
        //return half3(GammaToLinearSpaceExact(sRGB.r), GammaToLinearSpaceExact(sRGB.g), GammaToLinearSpaceExact(sRGB.b));
}
 inline float LinearToGammaSpaceExact (float value)
 {
        if (value <= 0.0F)
             return 0.0F;
        else if (value <= 0.0031308F)
            return 12.92F * value;
        else if (value < 1.0F)
            return 1.055F * pow(value, 0.4166667F) - 0.055F;
        else
           return pow(value, 0.45454545F);
}
inline half3 LinearToGammaSpace (half3 linRGB)
{
        linRGB = max(linRGB, half3(0.h, 0.h, 0.h));
        // An almost-perfect approximation from http://chilliant.blogspot.com.au/2012/08/srgb-approximations-for-hlsl.html?m=1
        return max(1.055h * pow(linRGB, 0.416666667h) - 0.055h, 0.h);

        // Exact version, useful for debugging.
        //return half3(LinearToGammaSpaceExact(linRGB.r), LinearToGammaSpaceExact(linRGB.g), LinearToGammaSpaceExact(linRGB.b))
}

Substance Painter

图像伽马校正_自动梯形校正

 

PS

从PS中导出图片,如果把灰度系数设为一的话,在Unity中就不需要勾选sRBG选项了;

如果PS中什么都不做设置的话,在Unity中勾选sRGB选项即可。

图像伽马校正_自动梯形校正

 

Document Color Profile

  • PS对于颜色的管理是很精准的,我们在Unity中看到的颜色要经过显示器的gamma变换,而PS中的不会,PS会读取显示器的Color Profile,反向补偿回去

    • 也就是说,ps中的是真实的颜色值

  • PS自身有一个系统,会通过灰度值控制颜色的显示,(通常情况下这个值和显示器的gamma值一致,所以看起来会和Unity中看到效果的一样),可以通过改变灰度值来改变最终颜色显示的结果。

  • PS中8位通道   ctrl+t缩小、柔边笔刷涂抹、高斯模糊 显示结果都不是真实物理颜色

和渲染器是一个道理。

问题都处在:想做物理计算,工作环境却是8位通道的非线性色彩空间,计算结果会比预期更暗、更黑

缩小的操作

日常中影响不大,但在极端情况下会出错,例如下图情况(高频变化的信息一定会出错)

图像伽马校正_自动梯形校正

 图中黑白格易拉宝,如果要ctrl+t缩小画面,图中的黑(0)白(1),就要求平均色,也就是0.5,但是在8位通道环境下,0.5对应128号灰(美术中灰);但是物理世界中,离远看如果是50%的反射率,应该是物理中灰,但是PS算出来的却是美术的中灰(物理的0.218)。

  • 解决方法:图像—模式中选择32位通道即可

柔边笔刷涂抹

涉及到线性插值方程、本质上是模拟半透明物体的前后遮挡

图像伽马校正_自动梯形校正

 高斯模糊

32位通道下的高斯模糊滤镜有非常自然的混合效果

图像伽马校正_自动梯形校正

下面8位通道的高斯模糊偏暗

图像伽马校正_自动梯形校正

 存储的小技巧

在32位通道下完成操作(计算),最后再切换为8位通道保存

半透明效果

Unity中:

Unity进行半透明混合时,会先将它们转换到一个线性空间下然后再混合

PS中:

PS的图层和图层之间做混合时,每个上层的图层都会读取他们的Color Profile(gamma值),然后经过一个gamma变换再做混合,这样做得结果就会偏暗一些。

(可以在它的工作空间 的设置中进行更改,选择用灰度系数混合RGB颜色,参数设置为一,这样图层才是一个最终直接混合的结果

图像伽马校正_自动梯形校正

 unity设置中修改

图像伽马校正_自动梯形校正

 Linear空间

图像伽马校正_自动梯形校正

 Gamma空间

图像伽马校正_自动梯形校正

 参考资料

Unity Gamma校正 转为线性空间 – 知乎

【技术美术百人计划】图形 2.6 伽马校正_哔哩哔哩_bilibili

Gamma校正与线性工作流入门讲解_哔哩哔哩_bilibili

色彩校正中的 gamma 值是什么? – 知乎

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189745.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [261]Connection reset by peer的常见原因及解决办法[通俗易懂]

    [261]Connection reset by peer的常见原因及解决办法[通俗易懂]1,如果一端的Socket被关闭(或主动关闭,或因为异常退出而引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connectresetbypeer)。Socket默认连接60秒,60秒之内没有进行心跳交互,即读写数据,就会自动关闭连接。2,一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connectionreset)。简单的…

    2022年6月26日
    29
  • 如何写好技术方案

    如何写好技术方案本文将介绍写技术方案的意义,如何评判技术方案的好坏,如何写好技术方案。写技术方案的意义写技术方案根本目的是提高研发效率和质量,具体体现在以下方面:1、提高沟通效率对于整个团队,通过技术方…

    2022年5月21日
    77
  • python中imread什么意思_imwrite函数

    python中imread什么意思_imwrite函数Python中各种imread函数的区别与联系最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该readthefuckcode和APIdocument,但貌似python的很多模块文档都不是很全,所以只能多看代码和注释

    2022年10月14日
    4
  • rcnn目标检测算法_SCL90R在线测试

    rcnn目标检测算法_SCL90R在线测试•   RCNN    RCNN(RegionswithCNNfeatures)是将CNN方法应用到目标检测问题上的一个里程碑,由年轻有为的RBG大神提出,借助CNN良好的特征提取和分类性能,通过RegionProposal方法实现目标检测问题的转化。     算法可以分为四步:     1)候选区域选择     RegionProposal是一类传统的区域提取方

    2022年10月9日
    3
  • The Building Blocks- Components of EA Part 2- Process, People, Network and Time

    The Building Blocks- Components of EA Part 2- Process, People, Network and Time

    2021年12月2日
    43
  • python绘制条形柱状图_Python柱状图

    python绘制条形柱状图_Python柱状图文章目录1.竖放条形图bar(x,height,[width],**kwargs)2.画横放条形图bar(x,width,[height],**kwargs)3.并列条形图条形图(barchart),也称为柱状图,是一种以长方形的长度为变量的统计图表,长方形的长度与它所对应的变量数值呈一定比例。1.竖放条形图画条形图要用到pyplot中的bar函数,该函数的基…

    2025年6月7日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号