58.亮度饱和度对比度基本原理

58.屏幕后期处理效果-效果实现-亮度饱和度对比度-基本原理


58.1 知识点

颜色亮度的基本原理

改变图像颜色的亮度,可以通过对图像的每个像素进行加法(或减法,即加负数)或乘法(或除法,即乘小数)运算。

  • 增加亮度:增加像素的 RGB 值。
  • 减小亮度:减少像素的 RGB 值。

在 Shader 中的实现方式:

  1. 定义一个控制亮度的 float 类型变量。
  2. 使用颜色的 RGB 乘以该变量或加上该变量。

通常采用乘法形式,具体公式为:最终颜色 = 原始颜色 * 亮度变量

亮度变量的取值效果:

  • 亮度变量 > 1:图像变亮。
  • 亮度变量 < 1:图像变暗。
  • 亮度变量 = 1:图像保持不变。

颜色饱和度的基本原理

改变图像颜色的饱和度,可以通过对每个像素的颜色值相对于灰度颜色进行插值运算实现,基本步骤如下:

  1. 计算灰度值(亮度)

    • 使用图像的 RGB 值计算一个平均值,得到灰度值。

    • 人眼对不同颜色的敏感度不同,因此不直接使用算术平均公式 (R + G + B) / 3,而采用 加权平均法 来计算灰度值。

    • 常用的权重基于 Rec. 709 标准(高清电视和数字图像格式常用的标准):

      • 红色通道(R)的权重:0.2126
      • 绿色通道(G)的权重:0.7152
      • 蓝色通道(B)的权重:0.0722
    • 这些权重反映了人眼对绿色最敏感、对蓝色最不敏感的特点。

    • 加权平均法公式: 灰度值(亮度)L = 0.2126 * R + 0.7152 * G + 0.0722 * B

  2. 生成灰度颜色

    • 利用第一步计算出的灰度值 L,生成对应的灰度颜色:灰度颜色 = (L, L, L)
  3. 插值计算

    • 使用插值函数 lerp,在灰度颜色和原始颜色之间进行插值运算。插值系数是用于控制饱和度的 float 类型变量

    • 计算公式:最终颜色 = lerp(灰度颜色, 原始颜色, 饱和度变量)

    • 插值计算原理最终颜色 = 灰度颜色 + (原始颜色 − 灰度颜色) * 饱和度变量

    • 饱和度变量的取值效果:

      • 饱和度变量 = 0:结果为灰度颜色。
      • 饱和度变量 = 1:保持原始颜色不变。
      • 饱和度变量在 0~1 之间:灰度颜色和原始颜色的混合。
      • 饱和度变量 > 1:RGB 值超出原始范围,使颜色更为饱和,产生增强效果。

颜色对比度的基本原理

调整图像颜色的对比度,可以通过对每个像素的颜色值相对于 中性灰色 进行插值运算实现,具体步骤如下:

  1. 声明中性灰色变量

    • 定义中性灰色作为参考基准:中性灰色 = (0.5, 0.5, 0.5)
  2. 进行插值运算

  • 在中性灰色和原始颜色之间使用插值函数 lerp 进行计算:
  • 最终颜色 = lerp(中性灰色, 原始颜色, 对比度变量)
  • 对比度变量的取值效果
    • 对比度变量 = 0
      图像对比度降到最低,所有像素变为中性灰色。
    • 对比度变量 = 1
      图像保持原始颜色,对比度不变。
    • 对比度变量在 0~1 之间
      图像亮度差异减少,颜色变得更平淡。
    • 对比度变量 > 1
      RGB 值超出原始范围,图像亮部更亮、暗部更暗,对比度增强。

总结

  • 亮度计算规则
    对图像的每个像素颜色进行乘法运算:
    最终颜色 = 原始颜色 * 亮度变量。

  • 饱和度计算规则
    相对于灰度颜色进行插值:

    1. 计算灰度值(亮度)L = 0.2126 * R + 0.7152 * G + 0.0722 * B
    2. 生成灰度颜色:灰度颜色 = (L, L, L)
    3. 最终颜色 = lerp(灰度颜色, 原始颜色, 饱和度变量)。
  • 对比度计算规则
    相对于中性灰色进行插值:

    1. 声明中性灰颜色 = (0.5, 0.5, 0.5)
    2. 最终颜色 = lerp(中性灰色, 原始颜色, 对比度变量)。
  • 注意:亮度、饱和度和对比度的计算规则是基于视觉科学、色彩理论和图像处理技术逐步发展起来的。这些规则并非由某个人发明,而是通过多年的研究与实践总结出来的。它们被广泛应用于各种图像处理工具和计算机图形学中,用于图像调整和优化。


58.2 知识点代码

Lesson58_屏幕后期处理效果_效果实现_亮度饱和度对比度_基本原理.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson58_屏幕后期处理效果_效果实现_亮度饱和度对比度_基本原理 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 颜色亮度的 基本原理

        //想要改变图像颜色的亮度
        //只需要对图像的每个像素进行加法(减法-加负数)或乘法(除法-乘小数)运算即可实现
        //增加亮度就是 增加像素的RGB值
        //减小亮度则是 减少像素的RGB值

        //也就是说我们只需要在Shader当中加入一个控制亮度的float类型的变量
        //然后用颜色的RGB乘以该变量或者加上该变量即可
        //一般我们会采用乘法的形式
        //即:
        //最终颜色 = 原始颜色 * 亮度变量
        //亮度变量 >1 时,图像变亮
        //亮度变量 <1 时,图像变暗
        //亮度变量 =1 时,图像不变

        #endregion

        #region 知识点二 颜色饱和度的 基本原理

        //想要改变图像颜色的饱和度
        //只需要对图像的每个像素的颜色值 相对于灰度颜色进行插值来实现
        //基本原理为以下三步:
        //1.计算灰度值(亮度)
        //  利用图像颜色RGB计算一个平均值,得到一个灰度值
        //  但是由于人眼对不同颜色的敏感度不同,所以在计算平均值时不会直接使用算数平均(R+G+B)/3
        //  在图形学中我们一般使用加权平均法来计算灰度值
        //  所谓加权平均法就是通过对不同数据分配不同权重,计算出更符合实际情况的平均值
        //  常用的权重基于Rec. 709标准(高清电视和许多数字图像格式中常用的标准)
        //  R 红色通道的权重:0.2126
        //  G 绿色通道的权重:0.7152
        //  B 蓝色通道的权重:0.0722
        //  这些权重反映了人眼对绿色最敏感,对蓝色最不敏感
        //  加权平均法公式:
        //  灰度值(亮度)L = 0.2126*R + 0.7152*G + 0.0722*B
        //2.生成灰度颜色
        //  利用第一步中计算出来的灰度值,生成一个灰度颜色
        //  灰度颜色 = (L, L, L)
        //3.插值计算
        //  使用插值函数lerp,在灰度颜色和原始颜色之间进行插值运算
        //  插值系数就是用于控制饱和度的float类型的变量
        //  公式如下:
        //  最终颜色 = lerp( 灰度颜色, 原始颜色, 饱和度变量 )
        //  lerp计算原理:最终颜色 = 灰度颜色 + (原始颜色 − 灰度颜色)*饱和度变量
        //  饱和度变量 = 0时,结果为灰度颜色
        //  饱和度变量 = 1时,保持原始颜色不变
        //  饱和度变量 = 0~1之间时,灰度颜色和原始颜色的混合
        //  饱和度变量 > 1时,颜色的RGB值超出原始范围,从而使颜色看起来更饱和

        #endregion

        #region 知识点三 颜色对比度的 基本原理

        //想要改变图像颜色的对比度
        //只需要对图像的每个像素的颜色值 相对于中性灰色进行插值来实现
        //基本原理为以下两步:
        //1.声明中性灰色变量,即RGB都为0.5的颜色变量
        //  中性灰颜色 = (0.5,0.5,0.5)
        //2.在中性灰色和原始颜色之间进行插值运算
        //  最终颜色 = lerp( 中性灰色, 原始颜色, 对比度变量 )
        //  对比度变量 = 0时,此时对比度降到最低,变为中性灰色
        //  对比度变量 = 1时,保持原始颜色不变
        //  对比度变量 = 0~1之间时,降低对比度效果,图像的亮度差异减少,使图像颜色看起来更平淡
        //  对比度变量 > 1时,颜色的RGB值超出原始范围,从而使颜色亮部更亮,暗部更暗,从而增加对比度

        #endregion

        #region 总结

        //1.亮度计算规则
        //  对图像的每个像素颜色进行乘法运算
        //  最终颜色 = 原始颜色 * 亮度变量

        //2.饱和度计算规则
        //  相对于灰度颜色进行插值
        //  第一步:灰度值(亮度)L = 0.2126*R + 0.7152*G + 0.0722*B
        //  第二步:灰度颜色 = (L, L, L)
        //  第三步:最终颜色 = lerp( 灰度颜色, 原始颜色, 饱和度变量 )

        //3.对比度计算规则
        //  相对于中性灰色进行插值
        //  第一步:中性灰颜色 = (0.5,0.5,0.5)
        //  第二步:最终颜色 = lerp( 中性灰色, 原始颜色, 对比度变量 )

        //注意:
        //亮度、饱和度和对比度的计算规则是在视觉科学、色彩理论和图像处理技术的基础上逐步发展起来的
        //这些规则不是由某个人发明的,而是通过多年的研究和实践得出的
        //这些计算方法被广泛应用于各种图像处理工具和计算机图形学中,用于实现图像的调整和优化

        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏