【问题标题】:Confusion regarding RGB colorspace conversions关于 RGB 颜色空间转换的困惑
【发布时间】:2020-08-30 09:10:25
【问题描述】:

我对@9​​87654321@ 色彩空间的某些方面感到困惑。我正在研究有助于转换不同颜色空间中的颜色(针对数字图形)的工具。我想要实现的重要功能之一是将颜色从 RGB 转换为 CIE-Lab。看了多篇文章,很明显,首先我必须将RGB转换为XYZ,然后再将XYZ转换为Lab。有很多网站都提到了这些转换背后的数学。最值得注意的是 Lindbloom 的 website。本网站提供了矩阵,可用于多个 RGB 颜色空间之间的直接转换。

现在,我对使用哪个矩阵感到困惑。在数字图形/可视化的上下文中,RGB 表示线性 RGB(对吗?)。如果有人向我提供 (r, g, b) 值,我将使用其中一个转换矩阵并计算 X、Y、Z。但我的问题是使用哪个矩阵?我的猜测是 'srgb' 和 'D65' 作为白色参考,但我不确定。当用户提供线性 RGB 时,对使用哪个矩阵有任何提示吗?

我知道我可以通过应用 gamma 变换将 sRGB 转换为 RGB,但我对这些转换矩阵感到困惑。

【问题讨论】:

    标签: colors color-space


    【解决方案1】:

    在数字图形/可视化的上下文中,RGB 表示线性 RGB(对吗?)。

    RGB 是一种颜色模型,一种使用 RGB 分量指定颜色信息的方法,它本质上是一个线性模型,但您不能真正安全地做出该假设,并且必须知道您正在操作的 RGB 值代表什么。 RGB 风格有很多种,即 RGB 色彩空间,以下是最常见的一种:

    ['ACES2065-1', 'ACEScc', 'ACEScct', 'ACESproxy', 'ACEScg', 'Adobe RGB (1998)', 'Adobe Wide Gamut RGB', 'Apple RGB', 'ALEXA Wide Gamut', 'Best RGB', 'Beta RGB', 'ITU-R BT.470 - 525', 'ITU-R BT.470 - 625', 'ITU-R BT.709', 'ITU-R BT.2020', 'CIE RGB', 'Cinema Gamut', 'ColorMatch RGB', 'DCDM XYZ', 'DCI-P3', 'DCI-P3+', 'Display P3', 'DJI D-Gamut', 'Don RGB 4', 'ECI RGB v2', 'Ekta Space PS 5', 'FilmLight E-Gamut', 'Protune Native', 'Max RGB', 'P3-D65', 'Pal/Secam', 'REDcolor', 'REDcolor2', 'REDcolor3', 'REDcolor4', 'REDWideGamutRGB', 'DRAGONcolor', 'DRAGONcolor2', 'ROMM RGB', 'RIMM RGB', 'ERIMM RGB', 'F-Gamut', 'ProPhoto RGB', 'Russell RGB', 'Sharp RGB', 'SMPTE 240M', 'SMPTE C', 'NTSC (1953)', 'NTSC (1987)', 'S-Gamut', 'S-Gamut3', 'S-Gamut3.Cine', 'Venice S-Gamut3', 'Venice S-Gamut3.Cine', 'sRGB', 'V-Gamut', 'Xtreme RGB']
    

    它们中的每一个都由三个组件指定:

    • 初选
    • 白点
    • 传递函数

    引用 ISO 22028-1 标准对加色 RGB 色彩空间的定义以供参考:

    3.3

    加法 RGB 颜色空间

    具有三种原色的色度色彩空间(通常 红色、绿色和蓝色),这样 CIE XYZ 三色值可以 通过形成加权从 RGB 颜色空间值确定 个人 CIE XYZ 三刺激值的组合 原色,其中权重与 对应的辐射测量线性颜色空间值 原色

    注释 1:一个简单的线性 3 × 3 矩阵变换可以是 用于在 CIE XYZ 三色值和 加色 RGB 颜色的辐射测量线性颜色空间值 空间。

    条目注释 2:加法 RGB 颜色空间是通过指定 一组加法 RGB 原色的 CIE 色度值和 颜色空间白点,连同颜色分量转移 功能。

    使用原色和白点计算从 RGB 转换为 CIE XYZ 的归一化主矩阵。考虑到这一点,为了知道您需要使用哪个矩阵,您首先需要知道哪个 RGB 颜色空间,即您的值是用哪种 RGB 进行编码的。

    这是几年前写的一篇文章,解释了构成 RGB 色彩空间的一些重要方面:https://www.colour-science.org/posts/the-importance-of-terminology-and-srgb-uncertainty/

    【讨论】:

    • 补充一点:对于传递函数,我们还需要范围:一个可能有全范围 8 位 (0-255) 或有限范围 (16-235),可能还有位数 (如果使用 1.0 或 100 作为最大值,则没有必要:位数会影响精度,但不会影响数字常量/转换矩阵。
    • 感谢您的解释。但是,我仍然有点困惑。对于日常使用,外行人不会知道他/她正在处理哪个色彩空间。那么假设“sRGB”是否安全?只有当我们进入 XYZ 时,这才重要吗?其他常见的转换,如 HSL/HEX 应该不会受到它的影响吧?
    • 知道你来自哪里对于知道你要去哪里至关重要!因此,拥有数据的所有编码特征至关重要。 sRGB 在几年前可能是一个安全的假设,但在过去的 5 年中,随着 HDR 显示和广色域色彩空间的丰富,情况发生了巨大变化。 HSL 和 HEX 转换通常不知道编码特征,它们不知道诸如白点之类的东西。但是,例如在给定的 RGB 颜色空间中减少某些色调在另一个颜色空间中不会产生相同的效果。
    • 事实上,根据您的 RGB 颜色空间的规格,即使乘法本身的行为也不相同,这是我几年前写的其他非常相关的内容:computergraphics.stackexchange.com/questions/8152/…
    猜你喜欢
    • 1970-01-01
    • 2011-06-24
    • 2012-09-10
    • 2019-01-01
    • 2012-06-29
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多