2016年07月31日 21:30:02 取次花丛懒回顾 阅读数 7460更多
分类专栏: 视频编解码 先进视频压缩编码(Advanced Video Coding, H.264/AVC)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shaqoneal/article/details/52080975
从远古时代人类文明诞生之日起,人类就在人类就在不断为适应环境、改造环境而艰苦斗争。其中最为基础的前提就是利用感官对外界信息的获取。利用各种感官,人类可以与世界环境进行多种不同的信息交互,例如:
另外,最重要的一种自然就是视觉。据统计,在人的各种感官中,视觉占据了超过7成的信息获取量。而且视觉可以使人对环境变化做出最直接的反映。
在文明的发展过程中,人们不满足于仅仅靠着口述记录所看到的影像,而是希望能用更加直观的形式将其记录下来。经过了多年的发展,经过多年的发展,视频已经成为记录和重现信息最为高效的方式,可以在相对很短的时间内传递大量的信息。
综上我们可知,视频信息提供了最为接近人的直接体验的信息表示方式。
真实世界中的影像与早期的视频处理与传输系统所处理的都是模拟信号。然而为了能适应现代的计算机、网络传输与数字视频处理系统,模拟的视频信号必须转换成数字格式。
在数字格式的视频信号中,组成视频的基本结构是一帧帧连续而相关联的图像。组成每一帧图像的基本结构是成平面紧密排列的像素,每个像素代表图像中的一个彩色的点。为了使得像素以彩色表示,每一个像素由颜色的三基色取不同的分量构成:
使用这种方式表示彩色图像的方式为RGB颜色空间。RGB颜色空间常用于显示器系统。通过这种形式表示的图像,每个像素的每一个颜色分量用1个字节表示,则可以表示256×256×256种不同的颜色。在常见的图像格式中,如位图(bmp)格式以RGB形式保存数据。
在实际的编解码等视频处理的过程中,YUV格式比RGB格式更为常用。在YUV格式中,一个像素由亮度分量和色度分量表示,每一个像素由一个亮度分量Y和两个色度分量U/V组成。亮度分量可以与色度分量一一对应,也可以对色度分量进行采样,即色度分量的总量少于亮度分量。
在YUV中之所以采用这样的方式,主要是因为人的感官对亮度信息的敏感度远高于对色度信息。因此相对于其他像素格式,YUV的最大优势是可以适当降低色度分量的采样率,并保证不对图像造成太大影响。而且,使用这种方式还可以兼容黑白和彩色显示设备。对于黑白显示设备,只需要去除色度分量,只显示亮度分量即可。
在YUV中常见的色度采样方式有4:4:4、4:2:2和4:2:0等,如下图所示:
编码这一概念在通信与信息处理领域中广泛使用,其基本原理是将信息按照一定规则使用某种形式的码流表示与传输。常用的需要编码的信息主要有:文字、语音、视频和控制信息等。
对于视频数据而言,视频编码的最主要目的是数据压缩。这是因为动态图像的像素形式表示数据量极为巨大,存储空间和传输带宽完全无法满足保存和传输的需求。例如,图像的每个像素的三个颜色分量RGB各需要一个字节表示,那么每一个像素至少需要3字节,分辨率1280×720的图像的大小为2.76M字节。
如果对于同样分辨率的视频,如果帧率为25帧/秒,那么传输所需的码率将达到553Mb/s!如果对于更高清的视频,如1080P、4k、8k视频,其传输码率更是惊人。这样的数据量,无论是存储还是传输都无法承受。因此,对视频数据进行压缩称为了必然之选。
视频信息之所以存在大量可以被压缩的空间,是因为其中本身就存在大量的数据冗余。其主要类型有:
针对这些不同类型的冗余信息,在各种视频编码的标准算法中都有不同的技术专门应对,以通过不同的角度提高压缩的比率。
从事视频编码算法的标准化组织主要有两个,ITU-T和ISO。
ITU-T,全称International Telecommunications Union - Telecommunication Standardization Sector,即国际电信联盟——电信标准分局。该组织下设的VECG(Video Coding Experts Group)主要负责面向实时通信领域的标准制定,主要制定了H.261/H263/H263+/H263++等标准。
ISO,全称International Standards Organization,即国际标准化组织。该组织下属的MPEG(Motion Picture Experts Group),即移动图像专家组主要负责面向视频存储、广播电视、网络传输的视频标准,主要制定了MPEG-1/MPEG-4等。
实际上,真正在业界产生较强影响力的标准均是由两个组织合作产生的。比如MPEG-2、H.264/AVC和H.265/HEVC等。
不同标准组织制定的视频编码标准的发展如下图所示:
为了专门处理视频信息中的多种冗余,视频压缩编码采用了多种技术来提高视频的压缩比率。其中常见的有预测编码、变换编码和熵编码等。
预测编码可以用于处理视频中的时间和空间域的冗余。视频处理中的预测编码主要分为两大类:帧内预测和帧间预测。
通常在视频码流中,I帧全部使用帧内编码,P帧/B帧中的数据可能使用帧内或者帧间编码。
目前主流的视频编码算法均属于有损编码,通过对视频造成有限而可以容忍的损失,获取相对更高的编码效率。而造成信息损失的部分即在于变换量化这一部分。在进行量化之前,首先需要将图像信息从空间域通过变换编码变换至频域,并计算其变换系数供后续的编码。
在视频编码算法中通常使用正交变换进行变换编码,常用的正交变换方法有:离散余弦变换(DCT)、离散正弦变换(DST)、K-L变换等。
视频编码中的熵编码方法主要用于消除视频信息中的统计冗余。由于信源中每一个符号出现的概率并不一致,这就导致使用同样长度的码字表示所有的符号会造成浪费。通过熵编码,针对不同的语法元素分配不同长度的码元,可以有效消除视频信息中由于符号概率导致的冗余。
在视频编码算法中常用的熵编码方法有变长编码和算术编码等,具体来说主要有上下文自适应的变长编码(CAVLC)和上下文自适应的二进制算术编码(CABAC)。
2016年07月31日 21:36:23 取次花丛懒回顾 阅读数 7526 文章标签: h.264视频压缩标准 更多
分类专栏: 视频编解码 先进视频压缩编码(Advanced Video Coding, H.264/AVC)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shaqoneal/article/details/52081021
H.264视频编码标准是ITU-T与MPEG合作产生的又一巨大成果,自颁布之日起就在业界产生了巨大影响。严格地讲,H.264标准是属于MPEG-4家族的一部分,即MPEG-4系列文档ISO-14496的第10部分,因此又称作MPEG-4/AVC。同MPEG-4重点考虑的灵活性和交互性不同,H.264着重强调更高的编码压缩率和传输可靠性,在数字电视广播、实时视频通信、网络流媒体等领域具有广泛的应用。
在整体的编码框架方面,H.264依然采用了与前期标准类似的结构,即块结构的混合编码框架。其主要结构图如下图所示:
在H.264进行编码的过程中,每一帧的H图像被分为一个或多个条带(slice)进行编码。每一个条带包含多个宏块(MB,Macroblock)。宏块是H.264标准中基本的编码单元,其基本结构包含一个包含16×16个亮度像素块和两个8×8色度像素块,以及其他一些宏块头信息。在对一个宏块进行编码时,每一个宏块会分割成多种不同大小的子块进行预测。帧内预测采用的块大小可能为16×16或者4×4,帧间预测/运动补偿采用的块可能有7种不同的形状:16×16、16×8、8×16、8×8、8×4、4×8和4×4。相比于早期标准只能按照宏块或者半个宏块进行运动补偿,H.264所采用的这种更加细分的宏块分割方法提供了更高的预测精度和编码效率。在变换编码方面,针对预测残差数据进行的变换块大小为4×4或8×8(仅在FRExt版本支持)。相比于仅支持8×8大小的变换块的早期版本,H.264避免了变换逆变换中经常出现的失配问题。
H.264标准中采用的熵编码方法主要有上下文自适应的变长编码CAVLC和上下文自适应的二进制算数编码CABAC,根据不同的语法元素类型指定不同的编码方式。通过这两种熵编码方式达到一种编码效率与运算复杂度之间的平衡。
同前期标准类似,H.264的条带也具有不同的类型,其中最常用的有I条带、P条带和B条带等。另外,为了支持码流切换,在扩展档次中还定义了SI和SP片。
视频编码中采用的如预测编码、变化量化、熵编码等编码工具主要工作在slice层或以下,这一层通常被称为**“视频编码层”(Video Coding Layer, VCL)。相对的,在slice以上所进行的数据和算法通常称之为“网络抽象层”(Network Abstraction Layer, NAL)**。设计定义NAL层的主要意义在于提升H.264格式的视频对网络传输和数据存储的亲和性。
为了适应不同的应用场景,H.264也定义了三种不同的档次:
在H.264中使用的编码技术主要有以下类型:
H.264中采用了基于像素块的帧内预测技术。主要可分为以下不同类型:
H.264中的帧间预测方法采用了基于块的运动估计和补偿方法,其主要特点有:
亚像素插值的表示如下图。其中红色点表示图像中的整像素点的位置,绿色点表示两个正像素之间的1/2像素插值的位置,紫色点表示1/4像素插值的位置。
针对隔行扫描的视频,H.264专门定义了用于处理此类交错视频的算法。
H.264的变换编码创新性地采用了类DCT的整数变换,有效降低了运算复杂度。对于基础版H.264,变换矩阵为4×4;在FRExt扩展中,还支持8×8的变换矩阵。
H.264的量化算法仍然采用标量量化方法。
H.264标准针对不同的语法元素指定了不同的熵编码算法,主要有:
除了上述的核心算法之外,H.264还定义了包括去块环路滤波器、SI/SP帧、码率控制等多种技术。