详解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
详解RGB和YUV色彩空间转换相关推荐
- Linux下fdisk命令操作磁盘详解--添加、删除、转换分区
linux下fdisk命令操作磁盘详解--添加.删除.转换分区等 fdisk 操作硬盘的命令格式如下: [root@localhost beinan]# fdisk 设备 比如我们通过 fdisk - ...
- 详解MTK系统中字符转换问题
详解MTK系统中字符转换问题 2011-09-05 19:02 佚名 互联网 字号:T | T MTK系统中字符转换问题是本文要介绍的内容,主要是来了解并学习MTK中一些小案例的应用,具体内容来看本文 ...
- rgb到yuv的转换
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 RGB到YUV(4:2:0)的转换 实验目标:实验RGB到YUV 的转换 一.实验原理 二.编程步骤 1.读入rgb分量 2.由RGB ...
- RGB到HSV色彩空间转换表
RGB到HSV色彩空间转换表
- FFmpeg入门详解之121:颜色空间转换RGB和YUV的原理与实战
5.颜色空间转换RGB和YUV的原理与实战 三种颜色空间模型:RGB.YUV.HSV 一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间. 但被描述 ...
- 【OpenCV 4开发详解】颜色模型与转换
通用模板 本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本Ope ...
- RGB与YUV的转换
计算机领域,RGB被称为基色分量,组合后能显示的颜色叫做颜色空间,一般取值范围从0-255(2^8,可以显示1600万多种颜色:现在有的显示器为10位位深,即2^10,约可以显示10亿种颜色) 还有一 ...
- CSS3新特性详解(三):CSS3 2D转换和3D转换 transform 变形使用详解
关于CSS3新特性,在上篇博文中"CSS3新特性详解(二):CSS3 字体@font-face详解.如何创建和修改woff字体文件及text-shadow等文本效果",讨论了C ...
- Java线程详解(4)-线程状态的转换
一.线程状态 线程的状态转换是线程控制的基础.线程状态总的可以分为五大状态.用一个图来描述如下: 1.新状态:线程对象已经创建,还没有在其上调用start()方法. 2.可运行状态:当线程有资格运行, ...
最新文章
- .net使用httpclient获取http状态码_在 .NET Core 中结合 HttpClientFactory 使用 Polly(中篇)...
- 深入Python(3): and、or以及and-or
- (52)系统调用阶段测试——基于 SSDT HOOK 的 FindWindowA 监视器
- 【Logstash】logstash 报错 logstash cannot write event to DLQ reached maxQueueSize of
- IE6下Png透明最佳解决方案(推荐) Unit PNG Fix
- jquery templates jQuery html模板
- android 链式结构,Android 架构师之路10 设计模式之责任链模式
- 美股个股熔断机制[博]
- java后台调用webservice接口常用方式
- gym101964 G.Matrix Queries(思维+线段树)
- Linux在安装文件时,yum基本配置出现错误
- 运维工程师岗位职责、职业路线和常用工具
- 在条形码上如何添加日期
- RK3399 4K 带宽不足[drm:vop_isr] ERROR POST_BUF_EMPTY irq err
- windows7系统损坏修复_为什么有的win7开机没有修复计算机的选项?分享解决方法!...
- Java数据类型+练习
- 【vs2019】调试介绍
- 企业如何才能打造出一个高端大气上档次的公司品牌(官网)网站?
- 【下载!】免费经典的计算机教学视频,向孙鑫老师致敬!
- ios -生成推广海报