视频编码的算法与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要 (2)
Abstract (3)
1 绪论 (4)
1.1引言 (4)
1.2 视频编码技术简介 (4)
1.2.1 视频压缩的基本原理 (4)
1.2.2图像压缩编码的方法 (5)
1.3 视频编码的国际标准 (6)
2 H.264视频编码技术 (7)
2.1 H.264/AVC国内外发展现状 (7)
2.2 H.264编码算法的实现方法 (7)
2.3 H.264的档次及应用场合 (8)
2.4 H.264标准的关键技术 (8)
2.5 H.264视频编码标准的结构框架 (10)
3 H.264编码器分析及优化 (11)
3.1 H.264编码基于硬件的算法 (11)
3.2H.264编码流程 (12)
3.2.1 编码的主流程 (13)
3.2.2 帧编码流程 (13)
3.2.3 宏块编码流程 (14)
4 H.264编码系统的硬件实现 (15)
4.1 TMS320DM642 DSP结构 (16)
4.2 H.264的视频编解码的DSP平台实现 (16)
4.3 H.264的视频编解码的DSP优化 (17)
参考文献(占一页) (19)
视频编码的算法与实现
摘要
H.264标准是由视频图像编码组和运动图像编码组共同开发的新一代视频
编码标准。
在相同的编码图像质量下,H.264比H.263、MPEG-4标准分别能节约50%和20%的码流,而且加强了对网络和流媒体应用的支持,H.264可以达到很高的编码效率,具有很好的市场应用前景。
跟踪和掌握H.264/AVC的核心技术,并结合实际应用在某些关键方向上有所创新和发展,是一项很有价值的工作。
本文阐述了数字视频编码标准在当今技术领域的重要性以及数字视频编码标准的发展历程,扼要描述了几种重要的视频编码标准,并详细叙述了H.264
编码标准以及它的各种关键技术,编码流程。
其次,本文选用X264作为H.264编码器的参考源码,研究了编码器编码流程,包括编码的主流程、帧编码流程、宏块编码流程。
研究了H.264在DSP上实现的问题。
关键词:视频编码;H.264/AVC;DSP DM642
Video Coding Algorithm And Its Implementation
Abstract
H.264 video coding standard is jointly developed by Video Coding Experts Group and Moving Picture Experts Group. Under the same reconstruction video quality, H.264 has 50% and 20% bit-stream, compared with H.263 and MPEG-4 respectively. H.264 improves the ability to support the network application and the video stream application。
H.264 has been the focus in the video compression area, it has a promising future in digital media market. So it is important for engineering application and theory to research deeply into H.264 and the implement of its fast H.264 encoder.
This dissertation mainly research on the new techniques in H.264/A VC. First the author describes the history of video coding, then introduced the H.264/AVC standard in detail. Second, using the open code X264 as a reference model, the thesis studied H.264 encoding flow, including encoding main flow, frame encoding flow and macroblock encoding flow. I emphasized on realization of H.264 encoder. DSP is a good plat for it, I researched naturalization and optimization in DM642 flat.
Key words: video coding. H.264/A VC. DSP,DM642
1 绪论
1.1引言
在现代社会信息交流中,视频通信占据着通信信息流量的绝大部分,对视频进行压缩编解码使视频信号达到更高的压缩比和更好的信道适应性一直是人们的追求,所面临的主要问题是既要保证传输图像质量,有要尽可能少的占用有限度信道资源,由于视频图像信号的空间冗余度和时间冗余度很大,可以方便有效地进行数据压缩,因此视频编解码技术成为多媒体时代最热门的技术之一。
视频编解码技术不断发展,标准不断推新,应用也越来越广泛。
1.2 视频编码技术简介
1.2.1 视频压缩的基本原理
传统的压缩编码是建立在香农(Shannon)的信息理论基础上的,它以经典的集合论为基础,用统计概率模型来描述信源,但它没有考虑信息接受者的主观特性及事件本身的具体含义,重要程度和引起的后果,因此,数据压缩编码的发展历程实际上是以香农信息论为出发点的一个不断完善的过程。
从信息论的观点看,视频作为一个信源,描述信源的数据时信息量和信息冗余之和,数据压缩实际上是减少冗余量
图像信号的压缩可以根据两个方面:
(1)图像信号中存在大量的冗余度可供压缩,这种冗余度在解码后还可以无失真的恢复;
(2)利用人的视觉特性,在不被主观视觉察觉的容限内,通过减少信号的精度,以一定的客观失真换取数据的压缩。
图像信号的冗余度存在于结构和统计两方面。
图像信号在结构上的冗余度表现为很强的空间(帧内)和时间(帧间)相关性。
大量的实验证实了电视信号在相临像素,相邻行,相邻帧间存在很强的相关性。
因此,无需传输每帧图像而只需传输预测误差信号。
充分利用人眼的视觉特点是实现码率压缩的又一途径。
人对图像的细节分辨率,运动分辨率和对比度分辨率的要求都有一定的限度。
同时人眼对图像的细节,运动和对比度三方面的分辨能力是相互制约的。
利用这一特点,进行图像数字化时可以采用自适应技术,根据图像的某一局部的特点来决定
对他的取样频率可量化精度,尽力做到与人眼在观看这种图像局部时所反映的视觉特点相匹配,因此,可以再不损坏图像主观质量的条件下进行压缩码率。
1.2.2图像压缩编码的方法
数字图像压缩编解码技术是多媒体信息处理的重要部分,它主要是解决图像声音信息的存储和传输。
按照压缩编码所采用的算法不同,图像压缩编码的方法有三类:
1、消除图像时间冗余度的预测编码方法
预测编码是基于图像相关性进行数据压缩的一种方法。
视讯传输中,每一帧图像与其前一帧图像内容差别不大,即相关性很强。
利用这个相关性,首先将一副完整内容的图像传到对方,再用遗产送的像素对当前的图像像素进行预测,对预测值与实际值的差值(预测误差)进行编码处理和传输。
以后发送的每幅图像,只需把不同的内容传过去,从而可使传输的码率大大下降。
这种编码方式,采用较少的量化分层,使量化噪声不易被人眼觉察,这样图像数据得到压缩,而图像主观质量并不下降。
2、消除空间冗余度的变换编码方法
(1) 离散余弦变换(DCT)编码。
图像数据具有空间相关性,通过DCT 变换将图像数据从空间域变换到频域,视频图像的相关性明显下降,信号的能量主要集中在少数几个变换系数上,然后采用量化和熵编码可以有效的压缩其数据。
(2) 又称长度编码(RLC)。
DCT 编码中,通常变换系数经量化后会出现很多连续的零系数。
在这种情况下,只要说明两个非零系数之间有多少个零,而不需要传送大量的零系数,解码时插入零系数即可。
(3) 哈夫曼编码。
哈夫曼编码是一种非等长编码方法。
对DCT 系数进行量化以后,在已知各量化值出现不同概率的情况下,对出现概率高的量化值采用短码字,对出现概率低的量化值采用长码字,可以减少量化值的平均码长,达到压缩目的。
(4) 运动补偿。
视频图像数据具有时间相关性,相邻的两帧图像间可能具有相同的背景和一些运动的物体。
如果能用尽量少的数据描述出这些相同的背景以及运动物体的移动情况,可以大大减少数据量。
运动补偿技术的主要内容包括:
将视频图像分割成静止部分和运动部分,检测运动物体的位移,对分割出的运动物体在移动后的差值进行编码,对运动矢量进行编码。
3、混合编码
信源编码的目的是压缩电视图像的时域和空间域冗余量,降低视频数字化图像序列的比特率,从而提高传输和存储的效率。
所以一般都采用将前两类方法结合起来使用的所谓的混合编码。
采用混合编码方式可以用DCT 变换进行帧内编码压缩,用运动补偿和运动估计来进行帧间编码压缩,使用熵编码提高压缩的效率等。
像H.261、H.263、MPEG-1、MPEG-2 等标准都是采用这样的混合编码模型来实现的。
1.3 视频编码的国际标准
随着编码技术的广泛应用,国际标准化组织(ISO)、国际电工委员会(IEC)和国际电信联盟(ITU)等国际组织自1986年起就制定了一系列视频压缩编码的国际标准。
ISO/IEC的运动图像专家组MPEG致力于运动图像和音频的压缩处理和播放开发标准。
他们开发了一系列标准,首先是MPEG-1(CD品质播放压缩的音视频),接着是MPEG-2(电视品质的视频和音频的存储和播放),MPEG-4是关于视听编码的最新标准总的来说,MPEG最突出的贡献无疑是音频和视频的压缩,在数字电视广播和DVD上,MPEG-3无处不在。
除此还有MPEG-4,MPEG-7,MPEG-21。
与此同时,ITU视频编码专家组VCEG也开发了一系列与电信网络和计算机网络上的视频通信相关的标准。
随着H.261广泛应用于可视电话,H.263,H.263+,H.263++陆续发展起来。
以上这些皆称之为H.26L,即为现在开发与发布的H.264建议。
H.264 是ITU-T 的VCEG(视频编码专家组)和ISO/IEC 的MPEG(活动图像编码专家组)的联合视频组(JVT)开发的一个新的数字视频编码标准。
H.264 和以前的标准一样,也是DPCM 加变换编码的混合编码模式。
但它采用“回归基本”的简洁设计,不用众多的选项,获得比H.263 好得多的压缩性能。
加强了对各种信道的适应能力,采用“网络友好”的结构和语法,有利于对误码和丢包的处理。
应用目标范围较宽,以满足不同速率、不同解析度以及不同传输(存储)场合的需求。
在技术上,H.264 标准中有多个闪光之处,如统一的VLC 符
号编码,高精度、多模式的位移估计,基于4×4 块的整数变换、分层的编码语法等。
这些措施使得H.264 算法具有很高的编码效率,在相同的重建图像质量下,能够比H.263 节约50%左右的码率。
H.264 的码流结构网络适应性强,增加了差错恢复能力,能够很好地适应IP 和无线网络的应用。
2 H.264视频编码技术
2.1 H.264/AVC国内外发展现状
H.264标准从1998年1月份开始草案征集,到2003年7月,整套H.264(ISO/IEC 14496-10)规范定稿。
2005年1月,MPEG组织正式发布了H.264验证报告,从各个方面论证了H.264的可用性以及各种工具集的效果,从标准的角度,印证H.264的成熟性。
H.264使图像压缩技术上升到了一个更高的阶段,能够在较低带宽上提供高质量的图像传输,该优点非常适合国内运营商用户量大、接入网/骨干网带宽相对有限的状况。
在同等的画质下,H.264比上一代编码标准MPEG2平均节约64%的传输码流,而比MPEG4 ASP要平均节约39%的传输码流。
全球很多IPTV业务运营商都将H.264作为编解码格式的标准,包括比利时电信,荷兰KPN,泰国ADC电信,中国电信等等。
2.2 H.264编码算法的实现方法
目前实现H.264视频编码的方式主要有三种,分别是纯硬件方式,软件方式和基于DSP的方式,三种方式各有特点。
(1)纯硬件方式
纯硬件方式就是使用专用集成芯片来实现视频编码,随着超大规模集成电路技术的发展,各大厂商相继推出了各种高性能的视频图像处理专用芯片,如公司的系列。
这种将视频压缩算法固化在芯片中的方式,特点是开发周期短,压缩率高,运算速度快,图像质量和系统实时性较好,缺点是一旦视频编码方案固定,则系统升级和更新比较困难,而且专用芯片造价比较高,通用性差,不易推广。
(2)软件方式
软件方式就是利用PC机通过基于计算机操作系统的软件来实现视频编码,虽然比较容易实现软件的升级,但系统性能受PC机处理器运算能力限制,最大
缺陷为速度慢,实时处理视频信号不容易实现,其主要用于前期仿真,验证算法的正确性。
(3)基于DSP的方式
基于DSP实现视频编码是现今应用最多的一种方法。
利用DSP的高速信号处理能力,使软件实现的算法在其上运行时可以大大缩短执行时间,获得高压缩率,同时由于数字视频的标准广泛,产品的更新要求更多,采用DSP做产品将更加具有优势,当进行软件升级或使用新的编码标准时,只需对代码进行修改和调整DSP的配置就可以实现。
该方案易升级,低功耗,多媒体化,多处理器的方向发展,使得用DSP实现视频编码更加方便,图像质量也好。
2.3 H.264的档次及应用场合
H.264规定了三种档次,每个档次支持一组特定的编码功能,并支持一类特定的应用。
(l)基本档次:利用I片和P片支持帧内和帧间编码,支持利用基于上下文的自适应的变长编码进行熵编码(CAVLC:Contex-Adaptive Variable Length Coding)。
主要用于可视电话、会议电视、无线通信等实时视频通信。
(2)主要档次:支持隔行视频,采用B片的帧间编码和加权预侧的帧内编码:支持利用基于上下文的自适应的算术编码(CABAC: Contex-based Adaptive Binary Arithmetic Coding)。
主要用于数字广播电视与数字视频存储。
(3)扩展档次:支持码流之间有效地切换(SP和sI片)、改进误码性能(数据分割),但不支持隔行视频和CABAC,主要应用于流媒体当中。
各个档次具有不同功能,可见扩展档次包括了基本档次的所有功能,而不包括主要档次的全部功能,每一档次设置不同的参数(如取样速率、图像尺寸、编码比特率等),得到对应的编解码器性能的不同等级。
2.4 H.264标准的关键技术
(1)帧内预测编码
帧内编码用来缩减图像的空间冗余。
为了提高H.264帧内编码的效率,在给定帧中充分利用相邻宏块的空间相关性,相邻的宏块通常含有相似的属性。
因此,
在对一给定宏块编码时,首先可以根据周围的宏块预测(典型的是根据左边和上边的宏块,因为这些宏块已经被编码处理),然后对预测值与实际值的差值进行编码,这样,相对于直接对该帧编码而言,可以大大减小码率。
(2)帧间预测编码
帧间预测编码利用连续帧中的时间冗余来进行运动估计和补偿。
H.264的运动补偿支持以往的视频编码标准中的大部分关键特性,而且灵活地添加了更多的功能,除了支持P帧、B帧外,H.264还支持一种新的流间传送帧--SP帧,码流中包含SP帧后,能在有类似内容但有不同码率的码流之间快速切换,同时支持随机接入和快速回放模式。
(3)高精度的亚像素运动补偿
在 H.263中采用的是半像素精度的运动估计,而在H.264中可以采用1/4或者1/8像素精度的运动估值。
在要求相同精度的情况下,H.264使用1 /4或者1/8像素精度的运动估计后的残差要比H.263采用半像素精度运动估计后的残差来得小。
这样在相同精度下,H.264在帧间编码中所需的码率更小。
(4)多帧预测
H.264提供可选的多帧预测功能,在帧间编码时,可选5个不同的参考帧,提供了更好的纠错性能,这样更可以改善视频图像质量。
这一特性主要应用于以下场合:周期性的运动、平移运动、在两个不同的场景之间来回变换摄像机的镜头。
(5)去块滤波器
H.264定义了自适应去除块效应的滤波器,这可以处理预测环路中的水平和垂直块边缘,大大减少了方块效应。
(6)整数变换
在变换方面,H.264使用了基于4×4像素块的类似于DCT的变换,但使用的是以整数为基础的空间变换,不存在反变换因为取舍而存在误差的问题。
与浮点运算相比,整数DCT变换会引起一些额外的误差,但因为DCT变换后的量化也存在量化误差,与之相比,整数DCT变换引起的量化误差影响并不大。
此外,整数 DCT变换还具有减少运算量和复杂度,有利于向定点DSP移植的优点。
(7)量化
H.264 中可选32种不同的量化步长,这与H.263中有31个量化步长很相似,但是在H.264中,步长是以12.5%的复合率递进的,而不是一个固定常数。
在H.264中,变换系数的读出方式也有两种:之字形(Zigzag)扫描和双扫描。
大多数情况下使用简单的之字形扫描;双扫描仅用于使用较小量化级的块内,有助于提高编码效率。
(8)熵编码
视频编码处理的最后一步就是熵编码,在H.264中采用了两种不同的熵编码方法:通用可变长编码(UVLC)和基于文本的自适应二进制算术编码 (CABAC)。
在H.263等标准中,根据要编码的数据类型如变换系数、运动矢量等,采用不同的VLC码表。
H.264中的UVLC码表提供了一个简单的方法,不管符号表述什么类型的数据,都使用统一变字长编码表。
其优点是简单;缺点是单一的码表是从概率统计分布模型得出的,没有考虑编码符号间的相关性,在中高码率时效果不是很好。
因此,H.264中还提供了可选的CABAC方法。
算术编码使编码和解码两边都能使用所有句法元素(变换系数、运动矢量)的概率模型。
为了提高算术编码的效率,通过内容建模的过程,使基本概率模型能适应随视频帧而改变的统计特性。
内容建模提供了编码符号的条件概率估计,利用合适的内容模型,存在于符号间的相关性可以通过选择目前要编码符号邻近的已编码符号的相应概率模型来去除,不同的句法元素通常保持不同的模型。
2.5 H.264视频编码标准的结构框架
H.264标准是基于块的混合编码,基本算法是通过帧间预测和运动补偿消除时域冗余,经过变换编码消除频域冗余,同时定义了编码视频比特流的语法及解码此比特流的方法。
编码器包含两个数据流路径,一个前向路径(从左至右)及一个重建路径(从右至左)。
前向路径为:一个输入帧或场Fn以宏块为单位。
每一个宏块被编码成帧间或帧内模式,并且对于宏块中的每一个块,构建一个基于重建图像样点的预测图像,如图2.2中标记的“P”。
在帧内模式中,P形成于当前片的样点,这一
片己经编码解码及重建过(图中
'
n
uF:注意未滤波的样点用来形成预测图像).在
帧间模式中,P的形成是通过从一幅或两辐参考图像的运动补偿预测.这些图像
从参考图像中选择出.在图中.参考图像显示为前编码图像'1n F ,但是对于每一
个宏块分割(在帧间模式)的预测参考可能从过去或是未来图像中选择.这些图像己经经过了编码、重组和滤波。
预测图像P 减去当前块来产生一个残差块
'n D .'n D 利用块变换并且吸化产生一组给定的系数x ,再经过嫡编码,连同在宏块中的要求解码的每一个块的信息如:预测模式、最化参数、运动向里信息等,形成了压缩的比特流,该比特流为了传输和存储而传送到网络提取层(NAL:Net Adaptation Layer).为了提供进一步的预测用的参考图像,编码器必须具有重
建图像的功能。
因此必须使残差图像经过反量化、反变化后的得到的'n D .与预
测值P 相加,得'n uF 为了取出编码解码环路中产生的嗓声,提高参考帧的图像质
量,从而提高压缩图像的性能,设置了一个环路涟波器,滤波后的输出n F 。
为建重图像,可用作参考图像。
3 H.264编码器分析及优化
3.1 H.264编码基于硬件的算法
上图是关于一帧图像的帧内预测间预测的算法框图。
如果采用帧内预测,帧间预测部分将不进行判断! 在进行帧间预测时,会使用多帧预测和可变块大小的运动估计。
编码模式选择部分在所有的预测模式中选择一个最佳的预测模式。
预测之后用原始的输入帧和预测帧相减,得到残差数据块。
对于亮度残差块做4*4 整数DCT 变换. 对于色度残差块的DC 系数则进行2*2 的整数DCT 变换! 对变换后的系数做扫描和量化处理后,再对量化后的系数进行熵编码, 最终成
为输出的码流。
编码模式通过模式表,也会输入到熵编码器中。
重建的循环过程包括反量化、反DCT 变换和反块滤波。
最后,将重建帧写入到帧缓冲器中,准备在以后运动估计中使用。
因为在空间预测和时间预测上几乎花费了所有的计算能力,所以在JM4.0法改进主要是在这两部分上.实现过程中# 这两部分通过硬件实现,所以要针对硬件进行优化.现编码器所用的硬件系统是基于宏块,就是说编码器是对一个个连续的宏块进行操作.整个编码系统可以看作一个宏块的流水线,所以有可能在开始编码下一个宏块时,一个宏块重建过程还没有完成,这就影响了流水线的进行.很多基于宏块的商用编码器正是采用这种硬件实现模式. 所以处理好这个问题很重要
3.2H.264编码流程
自H.264标准推出以来,目前有三大开源编码器:JM、x264和T264。
JM是H.264的官方测试源码;X264是由网上自由组织联合开发的编码器,输出码流与H.264标准兼容,与JM相比,x264更注重实用,在不明显降低编码性能的前提下,大大降低了编码的计算复杂度,因而成为主流的开源代码;T264是山中国视T264与X264相比,T264在高质量模式下其编码性能不如X264,编码速度也不如X264。
因此木文的参考模型选用X264编码器。
3.2.1 编码的主流程
H.264编码器主要由帧内预测、帧间预测、DCT变换(Discrete CosineTransform)、量化、嫡编码、去块滤波器等模块构成。
H.264编码主流程的任务主要是定义编码过程中要用到的一些全局结构体变量:完成图像参数集和序列参数集的初始化;分配视频图像数据的存储空间,包括配置原始图像的存储空间、重建图像的存储空间以及参考帧的存储空间等,判断图像序列的编码是否结束,如果没有结束就循环调用encode_frame()或函数进行帧编码。
H.264编码器编码主流程下如图3所示。
3.2.2 帧编码流程
帧编码(encode_frame)流程如图3.2所示。
H.264的编码格式分为视频编码层和网络提取层.故帧编码过程主要分为两个层次.首先,函数x264_encoder_enode()进行视频编码层(vcL)编码;其次,函数X264_nal_encode()进行网络提取层(NAL)层编码:在完成上述两个过程的基础上,最后调用函数而write_nal_bsf()将已编码的NAL单元写入最终将输出的符合H.264格式的文件中。
至此,完成了对一帧图像数据的编码过程。
VCL层编码过程中,首先函数x264_frame_get()获取新的一帧图像,其数据格
式为YUV4:2:0。
然后判断当前图像的编码类型,即该帧图像是I帧或P帧。
其次对该帧进行分片处理,可以将当前顿分成多个片,也可只分成一个片,并且由X264_slicetype_decide()函数判断当前片的类型.在本论文中,规定一帧图像为一个片组,即将一帧图像按一个片来进行编码。
经过以上步骤后,一帧图像中所有宏块均属于同一片.接着由x264_reference_build_list()构建参考帧序列List0和Listl, x264_slice_init()初始化片,x264_slice_write()对片进行编码,x264_reference_update()更新参考帧列表,最后由x264_frame_put()将编码好的帧存储起来并返回。
3.2.3 宏块编码流程
宏块编码(x264_macroblock_encode)的流程如图3.3所示。
在对一个宏块进行编码前,首先要获得其邻近已编码宏块的信息,如像素值分割方式、运动矢量等.然后根据当前编码帧的类型(I帧或P帧)对宏块进行不同的预侧。
其中,关键问题是判断当前宏块采用何种编码方式:帧内(Intra)编码方式还是顿间(Inter)编码方式。
在本论文设计的编码器中,图像类型仅有I帧图和P帧图像两种·在I帧图像中宏块仅进行帧内(Intra)编码·而在
P帧图像中,宏块仅进行帧间(Inter)编码。
其次,将获得的残差系数进行变换和量化,量化后的系数分两个方向进行处理,一个是送到嫡编码部分进行CAVLC编码,另外一个是送入逆量化和逆变换部分,还原出当前编码的宏块,从而构建出和解码端相同的宏块.由于逆量化的粗糙性和运动补偿的偏差性,使逆变换和逆量化后的图像产生方块效应。
为了抵消这种不良影响,需要在逆量化之后插入一个去块滤波过程,通过不同的滤波强度来消除不同程度的方块效应。
图为H.264宏块编码流程
4 H.264编码系统的硬件实现
对于视频图像编码技术来说,由于要处理的数据量大,计算复杂,它对处理器的处理能力有比较高的要求,普通计算机的CPU无法达到这样的要求。
因此.往往需要专门的数字信号处理芯片来实时处理多媒体信息。
因此需要选择合适的DSP芯片。
本设计选用TMs320DM642 DSP芯片为核心的硬件平台来实现H.264视。