从线性 RGB 转换为 XYZ
Convert from linear RGB to XYZ
该矩阵应该从 线性 RGBA 转换为 XYZ,同时保留原样的 alpha 通道:
vec4 M[4]=
{
vec4{0.4124564f,0.3575761f,0.1804375f,0.0f}
,vec4{0.2126729f,0.7151522f,0.0721750f,0.0f}
,vec4{0.0193339f,0.1191920f,0.9503041f,0.0f}
,vec4{0.0,0.0f,0.0f,1.0f}
};
对吗?在哪里可以找到双精度值?我在问,因为第二行非常接近亮度公式,根据我的理解,它与非线性 sRGB 值相关:
vec4 weights{0.2126f,0.7152f,0.0722f,0.0f};
auto temp=m_data*weights; //vectorized multiplication
return temp[0] + temp[1] + temp[2] + temp[3]; //Sum it up to compute the dot product (weighted average)
其他问题:所讨论的权重实际上应该相同吗?转换为 Y'CbCr 是否应该使用相同的权重?应该以线性还是 sRGB 执行 space?
此矩阵从 sRGB flavour 转换为 CIE XYZ D65。然而,这不是 IEC 61966-2-1:1999 中发布的官方 sRGB 矩阵,它四舍五入为 4 位数字,如下所示:
[[ 0.4124 0.3576 0.1805]
[ 0.2126 0.7152 0.0722]
[ 0.0193 0.1192 0.9505]]
根据您执行转换的上下文,使用官方 IEC 61966-2-1:1999 矩阵以获得与其他第三方匹配的结果可能很重要数据集,因为它们很可能会使用规范矩阵。
此处供参考的是使用 Colour:
计算的双精度转换矩阵
[[0.412390799265960 0.357584339383878 0.180480788401834]
[0.212639005871510 0.715168678767756 0.072192315360734]
[0.019330818715592 0.119194779794626 0.950532152249661]]
以及用于生成它的代码:
import numpy as np
import colour
print(colour.models.sRGB_COLOURSPACE.RGB_to_XYZ_matrix)
np.set_printoptions(formatter={'float': '{:0.15f}'.format})
colour.models.sRGB_COLOURSPACE.use_derived_transformation_matrices(True)
print(colour.models.sRGB_COLOURSPACE.RGB_to_XYZ_matrix)
Should the weights discussed actually be identical?
为了计算的一致性,您可能需要使用与矩阵匹配的权重,否则在来回转换时会遇到问题。
Should conversion to Y'CbCr use the same weights?
Y'CbCr 有很多变体,如果您不知道需要哪个变体,没有人能够正确回答。
Should it be performed in linear or sRGB space?
Y'CbCr 转换几乎总是发生在伽马编码值中,ITU-R BT.2020 YcCbcCrc 是一个值得注意的例外,因为它基于线性编码值。同样重要的是要了解 sRGB 色彩空间也是线性的,事实上,这里讨论的中心矩阵旨在应用于线性编码的 sRGB 值。
最后两个问题可能应该在另一个新问题中提出。
该矩阵应该从 线性 RGBA 转换为 XYZ,同时保留原样的 alpha 通道:
vec4 M[4]=
{
vec4{0.4124564f,0.3575761f,0.1804375f,0.0f}
,vec4{0.2126729f,0.7151522f,0.0721750f,0.0f}
,vec4{0.0193339f,0.1191920f,0.9503041f,0.0f}
,vec4{0.0,0.0f,0.0f,1.0f}
};
对吗?在哪里可以找到双精度值?我在问,因为第二行非常接近亮度公式,根据我的理解,它与非线性 sRGB 值相关:
vec4 weights{0.2126f,0.7152f,0.0722f,0.0f};
auto temp=m_data*weights; //vectorized multiplication
return temp[0] + temp[1] + temp[2] + temp[3]; //Sum it up to compute the dot product (weighted average)
其他问题:所讨论的权重实际上应该相同吗?转换为 Y'CbCr 是否应该使用相同的权重?应该以线性还是 sRGB 执行 space?
此矩阵从 sRGB flavour 转换为 CIE XYZ D65。然而,这不是 IEC 61966-2-1:1999 中发布的官方 sRGB 矩阵,它四舍五入为 4 位数字,如下所示:
[[ 0.4124 0.3576 0.1805]
[ 0.2126 0.7152 0.0722]
[ 0.0193 0.1192 0.9505]]
根据您执行转换的上下文,使用官方 IEC 61966-2-1:1999 矩阵以获得与其他第三方匹配的结果可能很重要数据集,因为它们很可能会使用规范矩阵。
此处供参考的是使用 Colour:
计算的双精度转换矩阵[[0.412390799265960 0.357584339383878 0.180480788401834]
[0.212639005871510 0.715168678767756 0.072192315360734]
[0.019330818715592 0.119194779794626 0.950532152249661]]
以及用于生成它的代码:
import numpy as np
import colour
print(colour.models.sRGB_COLOURSPACE.RGB_to_XYZ_matrix)
np.set_printoptions(formatter={'float': '{:0.15f}'.format})
colour.models.sRGB_COLOURSPACE.use_derived_transformation_matrices(True)
print(colour.models.sRGB_COLOURSPACE.RGB_to_XYZ_matrix)
Should the weights discussed actually be identical?
为了计算的一致性,您可能需要使用与矩阵匹配的权重,否则在来回转换时会遇到问题。
Should conversion to Y'CbCr use the same weights?
Y'CbCr 有很多变体,如果您不知道需要哪个变体,没有人能够正确回答。
Should it be performed in linear or sRGB space?
Y'CbCr 转换几乎总是发生在伽马编码值中,ITU-R BT.2020 YcCbcCrc 是一个值得注意的例外,因为它基于线性编码值。同样重要的是要了解 sRGB 色彩空间也是线性的,事实上,这里讨论的中心矩阵旨在应用于线性编码的 sRGB 值。
最后两个问题可能应该在另一个新问题中提出。