Correcting HDMI colour on Nvidia GPU // Code Redux 

JerryXia 发表于 , 阅读 (17)

此处输入图片的描述

你可能听人们说过,
HDMI (High-Definition Multimedia Interface)DP 接口(Display Port)以及 DVI (Digital Visual Interface)的显示效果相同,它们都是数字信号

事实并非如此,HDMI 作为一种通用的信号,广泛的用于电视以及娱乐系统领域,不像 DVI 和 DP 接口那样,是专为计算机显示器来设计的。所以当 PC 端的显卡通过 HDMI 接口连接 PC 显示器的时候,就会出现一些令人不爽的小问题,原因就要从开始说起。


常见的 3 个基本色彩模型分别是:

  • RGB
  • CMYK
  • YUV

YCbCr 有时也称为 YCC,而 YCC 不是一种绝对色彩空间,而是 YUV 压缩和偏移的版本。YCbCr 是计算机系统中应用最多的成员,其应用领域很广泛。JPEG,MPEG 均采用此格式,一般人所讲的 YUV 大多是指 YCbCr
YCbCr 有多种取样格式,比如:

  • 4:4:4
  • 4:2:2
  • 4:1:1
  • 4:2:0
    Y:
    明亮度 (Luminancr 或 Luma),也就是灰阶值。「亮度」是透过 RGB 输入信号来建立,方法是将 RGB 信号的特定部分叠加在一起。
    U&V:
    色度(Chrominance 或 Chroma),作用是描述影像色彩饱和度,用于指定像素的颜色,「色度」则定义了颜色的两个方面——色调和饱和度,分别用 CrCb 表示。
    Cb:
    反映的是 RGB 输入信号蓝色部分与 RGB 信号亮度值之间的差异。
    Cr:
    反映了 RGB 输入信号红色部分与 RGB 信号亮度值之间的差异。

在以下的两个公式中 RGB 和 YCbCr 各分量的范围均为 0-255
Y = 0.299R + 0.587G + 0.114B
U = -0.1687R - 0.3313G + 0.5B + 128
V = 0.5R - 0.4187G - 0.08313B + 128

R = Y +1.402(U-128)
G = Y - 0.34414(U-128)-0.71414(V-128)
B = Y + 1.772(U-128)

灰阶明暗等级的表现。
HDMI 传输数字色差信号常采用 YPbPr8 位数字 RGB 信号的话,是 RGB 三通道各 8 位,总计 24 位的形式来传输。8 位能表现 0-255 个层次,0最暗255

For example :

  • (255.255.255) 最亮的白
  • (0.0.0) 黑色

但电视(TV)和影像领域的视频信号是通过色差信号表示的,电视使用 IRE 规格,
纯黑 IRE 0%
纯白 IRE 100%
Y = 235 即灰阶表现范围为 16-235

投影仪和电视产品默认输入信号范围为 16-235,而 HDMI 输入信号范围的 0-255 直接输入的话,就会出现暗部过暗,而亮部又太亮的问题。
PC 显示器等默认输入范围是 0-255 ,直接输入范围 0-235 的信号的话,现象就会反过来。比如说,出现黑色变为深灰而不是纯黑色,白色变为浅灰。
对应的相关现象表格如下:
(O 代表正常)