详解视频的图像数据

视频的数据表示

1.对于视频帧的裸数据表示,更多的是YUV数据格式的表示,YUV主要应用于优化彩色视频信号的传输,使其向后兼容老式黑白电视。它最大的优点在于只需要占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中Y表示明亮度,也称为灰阶值;而U和V表示的则是色度。他们的作用是描述影像的色彩及饱和度,用于指定像素的颜色。亮度是通过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起.色度则定义了颜色的两个方面---色调与饱和度,分别用Cr和Cb来表示。其中Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异,而Cb反映的是RGB输入信号蓝色与RGB信号亮度值之间的差异。2.之所以使用YUV色彩空间,是因为它的亮度信号Y和色度信号U,V是分离的。如果只有Y信号分量而没有U,V分量,那么这样表示的图像就是黑白灰度图像。彩色电视机采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收到彩色电视信号,最常见的表示形式是Y,U,V都使用8个字节表示,所以取值范围就是0~255.在广播电视系统中不传输很低和很高的数值,实际上是为了防止信号变动造成过载,因此把两边的数值作为保护带,不论是Rec.601还是BT.709的广播电视标准中,Y的取值范围都是16~235,UV的取值范围是16~240.3.YUV常见的采样格式是4:2:0,并不意味着只有Y,Cb而没有Cr分量,它指的是对每行扫描线来说,只有一种色度分量是以2:1的抽样率来存储的。相邻的扫描行存储着不同的色度分量,也就是说,如果某一行是4:2:0,那么其下一行就是4:0:2,再下一行就是4:2:0,以此类推。对于每个色度分量来说,水平方向与竖直方向的采样率都是2:1,所以说色度的抽样率率是4:1,对于非压缩的8比特量化的视频来说,84的一张图片需要占用48字节的内存。4.相较于RGB,我们可以计算一帧为1280720的视频帧,用YUV420P的格式来表示,其数据量为1280 * 720 * 1 + 1280 * 720 * 0.5 = 1.318M如果fps(1s的视频帧数目)是24,按照一般电影90分钟来计算,那么这部电影用YUV420P的数据格式来表示的话,其数据量的大小是1.318M *24fps *90min *60 = 166.8GB,从数据量上来看这种存储电影的方式是不可行的,更别说是流媒体播放了。这就需要视频编码

YUV和RGB的转化

*.凡是渲染到屏幕上的东西(文字,图片或者其他)都要转化为RGB表现的形式表示,比较典型的场景是在iOS平台中使用摄像头采集出YUV数据后,上传显卡称为一个纹理ID,这个时候就需要YUV-->RGB的转换,在iOS的摄像头采集出一帧数据之后(CMSampleBufferRef),我们可以在其中调用CVBuffetGetAttachment来获取YCbCrMatrix,用于决定用哪一个矩阵进行转换

视频的编码方式

*.音频数据的压缩主要是去除冗余信息,从而实现数据量的压缩。相对于音频,视频数据具有极强的相关性,也就是说有大量的冗余信息,包括空间上的冗余信息和时间上的冗余信息

帧间编码技术可以去除时间上的冗余信息

1.运动补偿:运动补偿是通过先前的局部图像来预测,补偿当前的局部图像,它是减少帧序列冗余信息的有效方法。2.运动表示:不同区域的图像需要使用不同的运动矢量来描述运动信息。3.运动估计:运动估计是从视频序列中抽取运动信息的一整套技术。

使用帧内编码技术可以去除空间上的冗余信息

1.MPEG算法是适用于动态视频的压缩算法,它除了对单幅图像进行编码外,还利用图像序列中的相关原则去除冗余,这样可以大大提高视频的压缩比。2.H264创造了多参考帧,多块类型,整数变换,帧内预测等新的压缩技术,使用了更精细的分像素运动矢量和新一代的环路滤波器,这使得压缩性能能够大大提高。

 

posted @ 2020-05-27 16:56  tryFighting  阅读(927)  评论(0编辑  收藏  举报