微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RGB和YUV 多媒体编程基础详细介绍

RGB和YUV 多媒体编程

一、概念

方法统称为“

颜色空间

”或“

色域

”。用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量。RGB(红、绿、蓝)只是众多颜色空间的一种。采用这种编码方法,每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。记录及显示彩色图像时,RGB是最常见的一种方案。

颜色编码方法(属于PAL),是PAL和SECAM模拟彩色电视制式采用的

颜色空间

彩色电视系统中,通常采用三管彩色摄影机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号B-Y(即U)、R-Y(即V),最后发送端将亮度和色差三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。

间的概念。

二、RGB和YUV的优缺点

显示系统的良好兼容性。因此,许多电子电器厂商普遍采用的做法是,将RGB转换成YUV颜色空间,以维持兼容,再根据需要换回RGB格式,以便在电脑显示器上显示彩色图形。

彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。

间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。

三、YUV和RGB的实现原理

颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和,越混合亮度越高,即加法混合。

添加在一起(即所有光线反射回眼睛)可产生白色。加成色用于照明光、电视和计算机显示器。例如,显示器通过红色、绿色和蓝色荧光粉发射光线产生颜色。绝大多数可视光谱都可表示为红、绿、蓝 (RGB) 三色光在不同比例和强度上的混合。这些颜色若发生重叠,则产生青、洋红和黄。

明亮度(luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是

色度

(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。

四、RGB和YUV的格式

一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel);而后者使用三个数组分开存放YUV三个分量,就像是一个三维平面一样。

一个宏像素为4个字节,实际表示2个像素。(4:2:2的意思实际上是一个宏像素中有2个Y分量、1个U分量和1个V分量。)图像数据中YUV分量排列顺序如下:

一个Alpha通道,并且为每个像素都提取YUV分量,图像数据格式如下:

一个宏像素为12个字节,实际表示8个像素。图像数据中YUV分量排列顺序如下:

一个宏像素为4个字节,实际表示4个像素。图像数据中YUV分量排列顺序如下:

提取Y分量,而在UV分量的提取时,首先将图像分成若干个4 x 4的宏块,然后每个宏块提取一个U分量和一个V分量。图像数据存储时,首先是整幅图像的Y分量数组,然后就跟着U分量数组,以及V分量数组。IF09格式与YVU9类似。

提取Y分量,而在UV分量的提取时,首先将图像分成若干个2 x 2的宏块,然后每个宏块提取一个U分量和一个V分量。YV12格式与IYUV类似。

提取Y分量,而UV分量在水平方向上每4个像素采样一次。YUV420并非V分量采样为0,而是跟YUV411相比,在水平方向上提高一倍色差采样频率,在垂直方向上以U/V间隔的方式减小一半色差采样。

五、RGB和YUV转换

一个转换是 BT.709 中定义用于 50-Hz 的较早的 YUV 格式。它与在 ITU-R Recommendation BT.601 中指定的关系相同, ITU-R Recommendation BT.601 也被称为它的旧名称 CCIR 601。这种格式应该被视为用于标准定义 TV分辨率(720 x 576) 和更低分辨率视频的首选 YUV 格式。它的特征由下面两个常量 Kr 和 Kb 的值来定义:

内容开始:L = Kr * R + Kb * B + (1 – Kr – Kb) * G然后,按照下列方式获得 YUV 值:

= 8)。

= 8)。S 为缩放变量。对于计算机RGB,S 等于 255。对于 studio视频RGB,S 等于 219*2。

函数floor(x) 返回大于或等于 x 的最大整数。函数clip3(x,y,z) 的定义如下所示:

y) ? y : z))Y 样例表示亮度,U 和 V 样例分别表示偏向蓝色和红色的颜色偏差。Y 的标称范围为 16*2 到 235*2 。黑色表示为 16*2 ,白色表示为 235*2 。U 和 V 的标称范围为 16*2 到 240*2 ,值 128*2 表示中性色度。但是,实际的值可能不在这些范围之内。

dio 视频 RGB 形式的输入数据,要使得 U 和 V 值保持在 0 到 2M-1 范围之内,必需进行剪辑操作。如果输入为计算机RGB,则不需要剪辑操作,这是因为转换公式不会生成超出此范围的值。

六、YUV的采样格式

ycbcr 4:2:0、ycbcr 4:2:2、ycbcr 4:1:1和 ycbcr 4:4:4。

ycbcr 4:1:1 比较常用,其含义为:每个点保存一个 8bit 的亮度值(也就是Y值),每 2x2 个点保存一个 Cr 和Cb 值,图像在肉眼中的感觉不会起太大的变化。所以, 原来用 RGB(R,G,B 都是 8bit unsigned) 模型, 1个点需要 8x3=24 bits(如下图第一个图),(全采样后,YUV仍各占8bit)。按4:1:1采样后,而现在平均仅需要 8+(8/4)+(8/4)=12bits(4个点,8*4(Y)+8(U)+8(V)=48bits),平均每个点占12bits(如下图第二个图)。这样就把图像的数据压缩了一半。

生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节。

用户和消费类产品这仍然是可以接受的。对非压缩的8比特量化的视频来说,每个由4个水平方向相邻的像素组成的宏像素需要占用6字节内存。

支持!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐