详解RGB和YUV色彩空间转换

前言

首先指出本文中的RGB指的是非线性RGB,意思就是经过了伽马校正,按照行业规矩应当写成R'G'B',但是为了书写方便,仍写成RGB。关于YUV有多种叫法,分别是YUV,YPbPr,YCbCr。因此本文将首先指出他们之间的区别与联系,然后依次推演和RGB色彩空间之间的关系,最后导出转换矩阵。

各种说法

对于名称的叫法本来无所谓,例如鬼子、倭寇、小日本、Japan指的都是日本,只要交流的人之间互相明白对方的意思即可。对于YUV色彩空间来说,原本也是如此,只是概念上的混用对于专业人士来说,有时候会引起不专业的问题。所以有必要汇总一下各家的说法。

YUV:第一种含义是YUV,YCbCr,YPbPr的统称,任何一种都可以叫YUV;第二种含义指的是原始版YUV色彩空间。

YCbCr:第一种含义指的是数字分量,他是YUV的压缩和裁剪版本;第二种含义指的是标清隔行视频的模拟分量接口名称。

YPbPr:第一种含义指的是模拟分量,仅仅是YCbCr进行模拟化得到;第二种含义指的是高清视频的模拟分量接口名称。

演化推导

1:亮度和色差的定义

因为

所以

因此亮度分量可以使用下面的表达式表示:

红色分量和亮度之差为:

蓝色分量和亮度之差为:

上面三个式子用矩阵的形式表达如下:

2,色差的范围标定

所以可以知道红色分量范围是:

同理可知,蓝色分量范围是:

通常我们知道RGB的范围是0~1,因此

那么为了给色差分量的范围归一化,就需要乘以缩放系数:

色差归一化后用UV去表达,矩阵形式如下:

YUV色彩空间在SDTV中的实例

1,参数带入后得到基本的YUV转换公式

写成方程式RGB转YUV如下:

反过来YUV转RGB公式为:

2,模拟信号的负电平和过冲问题

由于模拟信号在传输的过程中会引起吉布斯过冲现象,导致后端解码识别错误,因此在模拟视频时代需要对YUV信号进行二次压缩,同时为了保证电平为正,还需要叠加一个偏置。

化简后得如下:

上式中Y'~[0~235],Cb~[0~240],Cr~[0~240];R,G,B~[0,255]

3, RGB的辐值范围均在[16,235]时的转换关系

首先可以知道亮度表达式一定如下,原因时带入RGB=16或235时,亮度可以取到16或235:

另外按照原来的表达式Cb和Cr还不能够达到240,因此还需要乘以个比例系数:

化简后可以得到:

4,YCbCr和RGB均在[0,255]时的转换关系

显然只需要在YUV转换关系中将U和V偏移到正数区域即可:

5,对于YUV亮度表达式的质疑

我们知道SDTV中,色域空间的定义如下:

另外我们也知道sRGB跟SDTV的色域空间几乎一致:

在我的上一篇文章 详解RGB和XYZ色彩空间转换之下篇_古楼望月的博客-CSDN博客中已经推导出XYZ和sRGB之间的色彩转换矩阵如下:

rgb2xyz = 0.4124 0.3576 0.1805 0.2126 0.7152 0.0722 0.0193 0.1192 0.9505 因此SDTV中真正的亮度表达式应该如下所示:

但是实际上SDTV规范中亮度表达式确实如下定义:

因此只有一种解释,那就是SDTV事实上并没有严格按照自己的色域空间进行执行,而是采用了比较接近的三基色,这样的做法或许是技术实现难度上的考量。进一步分析SDTV中RGB三基色的比例关系正好是LED显示中发白光时的比例,这可以百度查询到,如下:

YUV色彩空间在HDTV中的实例

1,参数带入后得到基本的YUV转换公式

2,RGB的辐值范围均在[0,255]时的转换关系

3,RGB的辐值范围均在[16,235]时的转换关系

4,YCbCr和RGB均在[0,255]时的转换关系

YUV色彩空间在UHDTV中的实例

1,参数带入后得到基本的YUV转换公式

2,RGB的辐值范围均在[0,255]时的转换关系

3,RGB的辐值范围均在[16,235]时的转换关系

4,YCbCr和RGB均在[0,255]时的转换关系

本文参考:BT.601,BT.709,BT.2020

Copyright © 2088 国足世界杯出线形势_世界杯出线 - ybjysq.com All Rights Reserved.
友情链接