2.17. 详细色彩空间描述¶
2.17.1. 色彩空间 SMPTE 170M (V4L2_COLORSPACE_SMPTE170M)¶
SMPTE 170M 标准定义了 NTSC 和 PAL 以及一般 SDTV 使用的色彩空间。默认的传递函数是 V4L2_XFER_FUNC_709
。默认的 Y’CbCr 编码是 V4L2_YCBCR_ENC_601
。默认的 Y’CbCr 量化是有限范围。原色和白色参考的色度是
颜色 |
x |
y |
---|---|---|
红色 |
0.630 |
0.340 |
绿色 |
0.310 |
0.595 |
蓝色 |
0.155 |
0.070 |
白色参考 (D65) |
0.3127 |
0.3290 |
红色、绿色和蓝色的色度也通常被称为 SMPTE C 集,因此该色彩空间有时也称为 SMPTE C。
为 SMPTE 170M 定义的传递函数与 Rec. 709 中定义的相同。
反向传递函数
使用以下 V4L2_YCBCR_ENC_601
编码获得亮度 (Y’) 和色差 (Cb 和 Cr)
Y’ 被钳位在 [0…1] 范围内,Cb 和 Cr 被钳位在 [-0.5…0.5] 范围内。这种到 Y’CbCr 的转换与 ITU BT.601 标准中定义的转换相同,该色彩空间有时也称为 BT.601,即使 BT.601 没有提及任何颜色原色。
默认量化是有限范围,但全范围也是可能的,尽管很少见。
2.17.2. 色彩空间 Rec. 709 (V4L2_COLORSPACE_REC709)¶
ITU BT.709 标准定义了 HDTV 一般使用的色彩空间。默认的传递函数是 V4L2_XFER_FUNC_709
。默认的 Y’CbCr 编码是 V4L2_YCBCR_ENC_709
。默认的 Y’CbCr 量化是有限范围。原色和白色参考的色度是
颜色 |
x |
y |
---|---|---|
红色 |
0.640 |
0.330 |
绿色 |
0.300 |
0.600 |
蓝色 |
0.150 |
0.060 |
白色参考 (D65) |
0.3127 |
0.3290 |
该标准的完整名称是 Rec. ITU-R BT.709-5。
传递函数。通常,L 的范围是 [0…1],但对于扩展色域 xvYCC 编码,允许该范围之外的值。
反向传递函数
使用以下 V4L2_YCBCR_ENC_709
编码获得亮度 (Y’) 和色差 (Cb 和 Cr)
Y’ 被钳位在 [0…1] 范围内,Cb 和 Cr 被钳位在 [-0.5…0.5] 范围内。
默认量化是有限范围,但全范围也是可能的,尽管很少见。
上面描述的 V4L2_YCBCR_ENC_709
编码是此色彩空间的默认编码,但可以使用 V4L2_YCBCR_ENC_601
覆盖它,在这种情况下,将使用 BT.601 Y’CbCr 编码。
此色彩空间还可以使用两种额外的扩展色域 Y’CbCr 编码
xvYCC 709 编码 (V4L2_YCBCR_ENC_XV709
,xvYCC) 与 Rec. 709 编码类似,但它允许 R’、G’ 和 B’ 的值超出 [0…1] 范围。根据有限范围公式缩放和偏移所得的 Y’、Cb 和 Cr 值
xvYCC 601 编码 (V4L2_YCBCR_ENC_XV601
,xvYCC) 与 BT.601 编码类似,但它允许 R’、G’ 和 B’ 的值超出 [0…1] 范围。根据有限范围公式缩放和偏移所得的 Y’、Cb 和 Cr 值
Y’ 被钳位在 [0…1] 范围内,Cb 和 Cr 被钳位在 [-0.5…0.5] 范围内,并进行量化,无需进一步缩放或偏移。可以通过选择 V4L2_YCBCR_ENC_XV709
或 V4L2_YCBCR_ENC_XV601
来使用非标准 xvYCC 709 或 xvYCC 601 编码。从 xvYCC 公式可以看出,这些编码始终使用有限范围量化,没有全范围变体。这些扩展色域编码的重点在于,超出有限范围的值仍然有效,尽管它们映射到超出 [0…1] 范围的 R’、G’ 和 B’ 值,因此超出了 Rec. 709 色彩空间的色域。
2.17.3. 色彩空间 sRGB (V4L2_COLORSPACE_SRGB)¶
sRGB 标准定义了大多数网络摄像头和计算机图形使用的色彩空间。默认的传递函数是 V4L2_XFER_FUNC_SRGB
。默认的 Y’CbCr 编码是 V4L2_YCBCR_ENC_601
。默认的 Y’CbCr 量化是有限范围。
请注意,sYCC 标准指定了全范围量化,但是内核支持的所有当前捕获硬件都将 R’G’B’ 转换为有限范围的 Y’CbCr。因此,将全范围选择为默认值会破坏应用程序解释量化范围的方式。
原色和白色参考的色度是
颜色 |
x |
y |
---|---|---|
红色 |
0.640 |
0.330 |
绿色 |
0.300 |
0.600 |
蓝色 |
0.150 |
0.060 |
白色参考 (D65) |
0.3127 |
0.3290 |
这些色度与 Rec. 709 色彩空间相同。
传递函数。请注意,L 的负值仅由 Y’CbCr 转换使用。
反向传递函数
根据 sYCC 的定义,使用以下 V4L2_YCBCR_ENC_601
编码获得亮度 (Y’) 和色差 (Cb 和 Cr)
Y’ 被钳位在 [0…1] 范围内,Cb 和 Cr 被钳位在 [-0.5…0.5] 范围内。此转换与 SMPTE 170M/BT.601 中定义的转换相同。Y’CbCr 量化是有限范围。
2.17.4. 色彩空间 opRGB (V4L2_COLORSPACE_OPRGB)¶
opRGB 标准定义了使用 opRGB 色彩空间的计算机图形使用的色彩空间。默认的传递函数是 V4L2_XFER_FUNC_OPRGB
。默认的 Y’CbCr 编码是 V4L2_YCBCR_ENC_601
。默认的 Y’CbCr 量化是有限范围。
请注意,opRGB 标准指定了全范围量化,但是内核支持的所有当前捕获硬件都将 R’G’B’ 转换为有限范围的 Y’CbCr。因此,将全范围选择为默认值会破坏应用程序解释量化范围的方式。
原色和白色参考的色度是
颜色 |
x |
y |
---|---|---|
红色 |
0.6400 |
0.3300 |
绿色 |
0.2100 |
0.7100 |
蓝色 |
0.1500 |
0.0600 |
白色参考 (D65) |
0.3127 |
0.3290 |
传递函数
反向传递函数
使用以下 V4L2_YCBCR_ENC_601
编码获得亮度 (Y’) 和色差 (Cb 和 Cr)
Y’ 被钳位在 [0…1] 范围内,Cb 和 Cr 被钳位在 [-0.5…0.5] 范围内。此转换与 SMPTE 170M/BT.601 中定义的转换相同。Y’CbCr 量化是有限范围。
2.17.5. 色彩空间 BT.2020 (V4L2_COLORSPACE_BT2020)¶
ITU BT.2020 标准定义了超高清电视 (UHDTV) 使用的色彩空间。默认的传递函数是 V4L2_XFER_FUNC_709
。默认的 Y’CbCr 编码是 V4L2_YCBCR_ENC_BT2020
。默认的 Y’CbCr 量化是有限范围。原色和白色参考的色度是
颜色 |
x |
y |
---|---|---|
红色 |
0.708 |
0.292 |
绿色 |
0.170 |
0.797 |
蓝色 |
0.131 |
0.046 |
白色参考 (D65) |
0.3127 |
0.3290 |
传递函数(与 Rec. 709 相同)
反向传递函数
请注意,虽然 ITU BT.2020 标准将 Rec. 709 定义为默认传递函数,但在实践中,此色彩空间通常与 传递函数 SMPTE 2084 (V4L2_XFER_FUNC_SMPTE2084) 一起使用。特别是超高清蓝光光盘使用这种组合。
使用以下 V4L2_YCBCR_ENC_BT2020
编码获得亮度 (Y’) 和色差 (Cb 和 Cr)
Y’ 被钳位在 [0…1] 范围内,Cb 和 Cr 被钳位在 [-0.5…0.5] 范围内。Y’CbCr 量化是有限范围。
还有一种替代的恒定亮度 R’G’B’ 到 Yc’CbcCrc (V4L2_YCBCR_ENC_BT2020_CONST_LUM
) 编码
亮度
Yc’ 被钳位在 [0…1] 范围内,Cbc 和 Crc 被钳位在 [-0.5…0.5] 范围内。Yc’CbcCrc 量化是有限范围。
2.17.6. 色彩空间 DCI-P3 (V4L2_COLORSPACE_DCI_P3)¶
SMPTE RP 431-2 标准定义了使用 DCI-P3 色彩空间的电影放映机使用的色彩空间。默认的传递函数是 V4L2_XFER_FUNC_DCI_P3
。默认的 Y’CbCr 编码是 V4L2_YCBCR_ENC_709
。默认的 Y’CbCr 量化是有限范围。
注意
请注意,此色彩空间标准未指定 Y’CbCr 编码,因为它不打算编码为 Y’CbCr。因此,选择此默认 Y’CbCr 编码是因为它是 HDTV 编码。
原色和白色参考的色度是
颜色 |
x |
y |
---|---|---|
红色 |
0.6800 |
0.3200 |
绿色 |
0.2650 |
0.6900 |
蓝色 |
0.1500 |
0.0600 |
白色参考 |
0.3140 |
0.3510 |
传递函数
反向传递函数
未指定 Y’CbCr 编码。V4L2 默认使用 Rec. 709。
2.17.7. 色彩空间 SMPTE 240M (V4L2_COLORSPACE_SMPTE240M)¶
SMPTE 240M 标准是高清电视早期(1988-1998 年)使用的一个临时标准。它已被 Rec. 709 取代。默认的传递函数是 V4L2_XFER_FUNC_SMPTE240M
。默认的 Y’CbCr 编码是 V4L2_YCBCR_ENC_SMPTE240M
。默认的 Y’CbCr 量化是有限范围。原色和白色参考的色度是
颜色 |
x |
y |
---|---|---|
红色 |
0.630 |
0.340 |
绿色 |
0.310 |
0.595 |
蓝色 |
0.155 |
0.070 |
白色参考 (D65) |
0.3127 |
0.3290 |
这些色度与 SMPTE 170M 色彩空间相同。
传递函数
反向传递函数
亮度 (Y’) 和色差 (Cb 和 Cr) 是通过以下 V4L2_YCBCR_ENC_SMPTE240M
编码获得的
Y’ 被钳位在 [0…1] 范围内,Cb 和 Cr 被钳位在 [-0.5…0.5] 范围内。Y’CbCr 量化是有限范围。
2.17.8. 色彩空间 NTSC 1953 (V4L2_COLORSPACE_470_SYSTEM_M)¶
此标准定义了 1953 年 NTSC 使用的色彩空间。实际上,此色彩空间已过时,应使用 SMPTE 170M 代替。默认的传递函数是 V4L2_XFER_FUNC_709
。默认的 Y’CbCr 编码是 V4L2_YCBCR_ENC_601
。默认的 Y’CbCr 量化是有限范围。原色和白色参考的色度是
颜色 |
x |
y |
---|---|---|
红色 |
0.67 |
0.33 |
绿色 |
0.21 |
0.71 |
蓝色 |
0.14 |
0.08 |
白色参考 (C) |
0.310 |
0.316 |
注意
此色彩空间使用照明体 C 而不是 D65 作为白色参考。要正确地将此色彩空间中的图像转换为使用 D65 的另一个色彩空间,你需要应用一种色度适应算法,例如 Bradford 方法。
NTSC 1953 的传递函数从未被正确定义。文献中推荐使用 Rec. 709 传递函数。
反向传递函数
使用以下 V4L2_YCBCR_ENC_601
编码获得亮度 (Y’) 和色差 (Cb 和 Cr)
Y’ 被限制在 [0…1] 的范围内,Cb 和 Cr 被限制在 [-0.5…0.5] 的范围内。Y’CbCr 量化是有限范围。此变换与 SMPTE 170M/BT.601 中定义的变换相同。
2.17.9. 色彩空间 EBU Tech. 3213 (V4L2_COLORSPACE_470_SYSTEM_BG)¶
EBU Tech 3213 标准定义了 1975 年 PAL/SECAM 使用的色彩空间。请注意,HDMI 接口不支持此色彩空间。相反,EBU Tech 3321 建议 HDMI 改用 Rec. 709。默认的传递函数是 V4L2_XFER_FUNC_709
。默认的 Y’CbCr 编码是 V4L2_YCBCR_ENC_601
。默认的 Y’CbCr 量化是有限范围。原色和白色参考的色度是
颜色 |
x |
y |
---|---|---|
红色 |
0.64 |
0.33 |
绿色 |
0.29 |
0.60 |
蓝色 |
0.15 |
0.06 |
白色参考 (D65) |
0.3127 |
0.3290 |
此色彩空间的传递函数从未被正确定义。文献中推荐使用 Rec. 709 传递函数。
反向传递函数
使用以下 V4L2_YCBCR_ENC_601
编码获得亮度 (Y’) 和色差 (Cb 和 Cr)
Y’ 被限制在 [0…1] 的范围内,Cb 和 Cr 被限制在 [-0.5…0.5] 的范围内。Y’CbCr 量化是有限范围。此变换与 SMPTE 170M/BT.601 中定义的变换相同。
2.17.10. 色彩空间 JPEG (V4L2_COLORSPACE_JPEG)¶
此色彩空间定义了大多数(动态)JPEG 格式使用的色彩空间。原色和白色参考的色度与 sRGB 相同。使用的传递函数是 V4L2_XFER_FUNC_SRGB
。Y’CbCr 编码是 V4L2_YCBCR_ENC_601
,带有全范围量化,其中 Y’ 缩放到 [0…255],Cb/Cr 缩放到 [-128…128],然后裁剪到 [-128…127]。
注意
JPEG 标准实际上不存储色彩空间信息。因此,如果使用 sRGB 以外的其他色彩空间,则驱动程序必须明确设置该信息。实际上,V4L2_COLORSPACE_JPEG
可以被认为是 V4L2_COLORSPACE_SRGB
、V4L2_XFER_FUNC_SRGB
、V4L2_YCBCR_ENC_601
和 V4L2_QUANTIZATION_FULL_RANGE
的缩写。
2.18. 详细传递函数描述¶
2.18.1. 传递函数 SMPTE 2084 (V4L2_XFER_FUNC_SMPTE2084)¶
SMPTE ST 2084 标准定义了高动态范围内容使用的传递函数。
- 常量
m1 = (2610 / 4096) / 4
m2 = (2523 / 4096) * 128
c1 = 3424 / 4096
c2 = (2413 / 4096) * 32
c3 = (2392 / 4096) * 32
- 传递函数
L’ = ((c1 + c2 * Lm1) / (1 + c3 * Lm1))m2
- 反向传递函数
L = (max(L’1/m2 - c1, 0) / (c2 - c3 * L’1/m2))1/m1
在 此传递函数 和 非 HDR 传递函数 之间转换时要小心:HDR 内容的线性 RGB 值 [0…1] 映射到 0 到 10000 cd/m2 的亮度范围,而非 HDR(又名标准动态范围或 SDR)的线性 RGB 值映射到 0 到 100 cd/m2 的亮度范围。
要从 SDR 转换为 HDR,你必须先将 L 除以 100。要朝另一个方向转换,你必须将 L 乘以 100。当然,这会将所有超过 100 cd/m2 的亮度值钳位到 100 cd/m2。
有更好的方法,例如,请参阅 colimg 以获取有关此的更深入信息。