前言

首先指出本文中的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

详解RGB和YUV色彩空间转换相关推荐

  1. Linux下fdisk命令操作磁盘详解--添加、删除、转换分区

    linux下fdisk命令操作磁盘详解--添加.删除.转换分区等 fdisk 操作硬盘的命令格式如下: [root@localhost beinan]# fdisk 设备 比如我们通过 fdisk - ...

  2. 详解MTK系统中字符转换问题

    详解MTK系统中字符转换问题 2011-09-05 19:02 佚名 互联网 字号:T | T MTK系统中字符转换问题是本文要介绍的内容,主要是来了解并学习MTK中一些小案例的应用,具体内容来看本文 ...

  3. rgb到yuv的转换

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 RGB到YUV(4:2:0)的转换 实验目标:实验RGB到YUV 的转换 一.实验原理 二.编程步骤 1.读入rgb分量 2.由RGB ...

  4. RGB到HSV色彩空间转换表

    RGB到HSV色彩空间转换表

  5. FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战

    5.颜色空间转换RGB和YUV的原理与实战 三种颜色空间模型:RGB.YUV.HSV 一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间. 但被描述 ...

  6. 【OpenCV 4开发详解】颜色模型与转换

    通用模板 本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本Ope ...

  7. RGB与YUV的转换

    计算机领域,RGB被称为基色分量,组合后能显示的颜色叫做颜色空间,一般取值范围从0-255(2^8,可以显示1600万多种颜色:现在有的显示器为10位位深,即2^10,约可以显示10亿种颜色) 还有一 ...

  8. CSS3新特性详解(三):CSS3 2D转换和3D转换 transform 变形使用详解

      关于CSS3新特性,在上篇博文中"CSS3新特性详解(二):CSS3 字体@font-face详解.如何创建和修改woff字体文件及text-shadow等文本效果",讨论了C ...

  9. Java线程详解(4)-线程状态的转换

    一.线程状态 线程的状态转换是线程控制的基础.线程状态总的可以分为五大状态.用一个图来描述如下: 1.新状态:线程对象已经创建,还没有在其上调用start()方法. 2.可运行状态:当线程有资格运行, ...

最新文章

  1. .net使用httpclient获取http状态码_在 .NET Core 中结合 HttpClientFactory 使用 Polly(中篇)...
  2. 深入Python(3): and、or以及and-or
  3. (52)系统调用阶段测试——基于 SSDT HOOK 的 FindWindowA 监视器
  4. 【Logstash】logstash 报错 logstash cannot write event to DLQ reached maxQueueSize of
  5. IE6下Png透明最佳解决方案(推荐) Unit PNG Fix
  6. jquery templates jQuery html模板
  7. android 链式结构,Android 架构师之路10 设计模式之责任链模式
  8. 美股个股熔断机制[博]
  9. java后台调用webservice接口常用方式
  10. gym101964 G.Matrix Queries(思维+线段树)
  11. Linux在安装文件时,yum基本配置出现错误
  12. 运维工程师岗位职责、职业路线和常用工具
  13. 在条形码上如何添加日期
  14. RK3399 4K 带宽不足[drm:vop_isr] ERROR POST_BUF_EMPTY irq err
  15. windows7系统损坏修复_为什么有的win7开机没有修复计算机的选项?分享解决方法!...
  16. Java数据类型+练习
  17. 【vs2019】调试介绍
  18. 企业如何才能打造出一个高端大气上档次的公司品牌(官网)网站?
  19. 【下载!】免费经典的计算机教学视频,向孙鑫老师致敬!
  20. ios -生成推广海报

热门文章

  1. 如何保护网站免受流量劫持?
  2. 音频编辑开发SDK Audio DJ Studio for .NET Crack
  3. Nginx系列:图片过滤处理
  4. iOS开发:The app icon set named AppIcon did not have any applicable content
  5. 【PPP-RTK技术研究进展与实验验证】
  6. 实验室电磁铁EM4S的技术参数
  7. OpenCV图像处理技术之图像轮廓
  8. 基类与派生类中同名成员的关系
  9. kindle的重生:看视频
  10. 硅云账号注册过程与步骤详细图文教程