首页 > 编程知识 正文

数字视频编码方式,视频格式与编码

时间:2023-05-06 09:05:34 阅读:220238 作者:3898

一、RGB概述 R:red,G:Green,B:Blue,即红绿蓝——色光三原色(加法三原色),通过不同比例相加,可产生多种颜色。

补:除色光三原色外,还有另一种颜料三原色(减法三原色),即看到的印刷的纸张反射的光线颜色,颜料吸收光线,而不是将光线叠加(因为透明体的颜色是由它本身的色光决定,不透明体的颜色由他反射的色光决定),因此颜料的三原色就是能够吸收RGB的颜色,为黄、品红、青三个颜色即(C、M、Y),是RGB的补色。

常见RGB格式

RGB格式一种是索引形式,一种是像素形式

索引格式中的每个bit存储的并非是实际的R、G、B值,而是对应点的像素在调色板中的索引。即在图像文件中划出一个区域存放一个调色板来存储图像中的每一种颜色,然后在记录每个像素的时候,只是记录这个像素的颜色对应到调色板的第几号颜色。

索引形式RGB1、RGB4、RGB8

例如:RGB8,即每个像素点只用8个bit表示。8个bit所能够表示的索引范围是2的8次方即0-255,即每个像素只能有调色板中的256种不同颜色中的一种,表示的颜色较少,色彩单一。

像素形式RGB555、RGB565、RGB24、RGB32

RGB像素格式不同于索引,索引格式中的所有bit存储的是每一个像素的色彩索引,而像素格式中的bit用来单独具体存储像素点中R、G、B三个颜色的值。

RGB555、RGB565:一个像素都用16个bit 即2个字节表示,但是555代表RGB各5个bit表示,最高位不用,565代表R占5bit,G占6bit,B占5bit。

RGB24:常用的彩色图像像素表示格式,即每种色度成分用8bit表示,2^8=256,即每种色度的表示范围为0-255。

缺点:对于一张1080p的图片1920*1080*24bit ≈ 6MB ,当视频传输时,60帧的视频,传输速率应达到360Mps。所以需要合理的视频编码进行压缩。二、YUV概述

人的视觉系统对亮度感知更敏感,所以将色彩空间分解为亮度Y和色度U(Cb)、V(Cr)。

百度百科:YUV的发明是由于彩色电视与黑白电视的过渡时期。黑白视频只有Y(Luma,Luminance)视频,也就是灰阶值。到了彩色电视规格的制定,是以YUV的格式来处理彩色电视图像,把UV视作表示色度的C(Chrominance或Chroma),如果忽略C信号,那么剩下的Y(Luma)信号就跟之前的黑白电视频号相同,这样一来便解决彩色电视机与黑白电视机的兼容问题。此外,YUV最大的优点在于只需占用极少的带宽。

       因为UV分别代表不同颜色信号,所以直接使用R与B信号表示色度的UV。也就是说UV信号告诉了电视要偏移某象素的的颜色,而不改变其亮度。或者UV信号告诉了显示器使得某个颜色亮度依某个基准偏移。UV的值越高,代表该像素会有更饱和的颜色。

       彩色图像记录的格式,常见的有RGB、YUV、CMYK等。彩色电视最早的构想是使用RGB三原色来同时传输。这种设计方式是原来黑白带宽的3倍,在当时并不是很好的设计。RGB诉求于人眼对色彩的感应,YUV则着重于视觉对于亮度的敏感程度,Y代表的是亮度,UV代表的是彩度(因此黑白电影可省略UV,相近于RGB),分别用Cr和Cb来表示,因此YUV的记录通常以Y:UV的格式呈现。

Y:亮度(luma / luminance)基本同灰度值,灰度值是形容黑白图像的,亮度值是形容彩色图像的,如果把彩色图像转换成黑白图像,亮度值就会作为转换后的黑白图像的灰度值。如下图所示,没有U、V颜色分量的图像Y image就是一副黑白图片。

图像的亮度分量是R、G、B分量的加权平均值,Y = kr*R + kg*G + kb*B

U(Cb)、V(Cr):色度(chroma / chromimance)表示图像的颜色信息,定义影像的色彩和饱和度,用于指定像素的颜色。

Cb = B - Y       Cr =  R - Y      Cg = G - Y

RGB转换YUV

三、YUV存储格式 Planar

在YUV的Planar存储格式的图像存储矩阵中,先连续存储所有像素点的Y值,再存储所有像素点的U值,最后存储剩下像素点的V值{y0y1y2y3....},{u0u1u2u3...},{v0v1v2v3....},相当于分别存储data[0]、data[1]、data[2]中。

Packed

在YUV的Packed存储格式的图像存储矩阵中,每个像素点的YUV是连续交替存储的 {y0u0v0}{y1u1v1}{y2u2v2}{y3u3v3}......,相当于都存储在data[0]中。

四、YUV采样格式

YUV基本有以下如图这几种采样方式:

其中:

YUV 4:4:4采样,即每一个Y值对应一组UV分量。

图像前四个像素的数据: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3

采样的码流: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

Y分量的大小: w*h

U分量的大小: w*h

V分量的大小: w*h

YUV 4:2:2采样,即每两个Y值共用一组UV分量(两个像素一个采U一个采V)。

图像前四个像素的数据: Y0U0V0 Y1U1V1 Y2U2V2 Y3U3V3

采样的码流举例(不唯一,原则是两个相邻的Y共用一对UV,UV可以是他们两个各一个,也可以各取一个):                        Y0 U0 Y1 V1 Y2 U2 Y3 V3

Y分量的大小: w*h

U分量的大小: w*h/2

V分量的大小: w*h/2

YUV 4:2:0采样,即每四个Y值共用一组UV分量。(2:0不是不采集V)

例如:

Y分量的大小: w*h 

U分量的大小: w*h/4 

V分量的大小: w*h/4

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。