您的当前位置:首页正文

视频编码标准H.264及其快速实现算法q

来源:汇意旅游网
摘要    H.264/AVC是由ITU-T的VCEG(视频编码专家组)和ISO的MPEG(运动图像专家组)共同制定的新的视频编码标准。H.264使用很多先进的视频编码方法,与现有标准相比,它可以获得更高的压缩性能,同时由于其结构上合理的设计,使得H.264具有良好的网络适配性,因此H.264在无线和IP信道上能够得到更广泛的应用。然而在实际应用中,特别是当H.    264应用在一些实时多媒体业务〔如VOD>流媒体)时,由于H.264压缩性能高,导致算法运算复杂度较高,这样对其应用产生很大影响。为了使H.264能够更好地应用于实时多媒体通信,就必须使用多种降低视频编码运算复杂度的快速算法。本文在详细研究了H.    264视频编码特点的基础上,分析了H.264帧内编码及变换、量化技术的原理及特点,提出了多种降低视频编码复杂度的算法,这些技术包括一种新颖实用的帧内预测快速算法,整数变换和量化过程中零块的预先判决算法,以及使用SIMD(单指令多数据流)技术来提高H.264帧内编码的速度等。    帧内预测快速算法通过充分利用视频信号时间及空间上的相关性,减少帧内预测的候选模式的个数;整数变换零块预先判决算法通过计算SAD值来判断是否为零块,减少了DCT变换和量化的次数,并且提前终止了位移估值;SIMD技术提高了帧内编码程序的并行运行能力。实验表明,通过使用本文提出的帧内预测J决速算法和零块预先判决等方法可使得H.264编码速度获得显著的提高。关键词:H.264/AVC帧内预测整数变换零块预先判决SIMD(单指令多数据流)AbstractH.    264/AVC is the newest video coding standard of the ITU-T Video CodingExperts Group (VCEG) and the ISO/IEC Moving Picture Experts Group (MPEG),Themain goals of the H.264/AVC standardization efforth ave been enhanced compressionperformance and provision of a "network-friendly" video representation addressing"conversational" (video telephony) and "nonconversational" (storage, broadcast, orstreaming) applications. H.264/AVC has achieved a significant improvement inrate-distortion efficiency relative to existing standards. But the high complexity comeswith the high compression, which makes H.264 hardly applied in the real timeservices.(like Video on Demand, Streaming Media)Thi    s atricle provides an overview of the technical features of H.264/AVC,describes the theory of intra prediction, transform and quantization in detail, andproposes a novel fast algorithm of intra prediction and an algorithm about decision ofall-zero blocks before integer transform and quantization. Moreover, we also provide amethod using SIMD(single insturction multiple data) to increase the speed of intraprediction coding.Expe    rimental results show that the speed of coding is obviously improved whenusing proposed techniques.Keyword: H.264/AVC  Intra prediction  integer transform  SIMDY 695368创新性声明    本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人己经发表或撰写过的研究成果;也不包含为获得西安电子科技大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均己在论文中做了明确的说明并表示了谢意。申请学位论文与资料若有不实之处,本人承担一切相关责任。    本人签名.司和份)005. I加。期.关于论文使用授权的说明本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究生    在校攻读学位期间,论文工作的知识产权单位属西安电子科技大学。本人保证毕业离校后,发表论文或使用论文工作成果时署名单位仍为西安电子科技大学。学校有权保留送交论文的复印件,允许查阅和借阅论文:学校可以公布论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存论文。(保密的论文在解密后遵守此规定)本人签名:导师签名:.习宁J匕J酒.脚口期日叙珠oo了.mz.期日第一章绪论第一章绪论1.1引言随着信息技术的发展和社会的进步,人们对信息的需求越来越丰富。人们希    望无论何时何地都能够方便、快捷、灵活地通过语音、数据、图像与视频等多种方式进行通信。视觉信息给人们直观、生动的形象,图像/视频的传输更受到人们广泛地关注。超大规模集成电路(VLSI)技术和宽带数字网技术的发展,使人们对数字视频业务如可视电话、视频会议、视频监控、高清晰度电视(HDTV)、视频点播(VOD)、远程教学和远程购物等产生了越来越浓厚韵兴趣。数字化视频信息数据量庞大,给存储器的存储容量、通信信道的传输率(    带宽)以及计算机的处理速度增加了极大的压力。解决这个问题单纯用增加存储器容量和通信信道的带宽及提高计算机的运算速度等办法是不经济也是不现实的。视频数据压缩编码技术是行之有效的方法。采用先进的数字视频压缩技术将数字化的视频信息的数据量压缩,既节省了存储空间,又提高了通信的传输效率,使得视频及其通信业务成为可能。    图像压缩编码从1948年电视信号数字化提出以来,已有五十多年的历史,不仅在理论研究上取得了重大进步,而且在实际应用中也获得了很大成果。近十年来,图像编解码技术得到了迅速发展和广泛应用,并且日臻成熟,其标志就是多个关于图像编解码的国际标准的制定,即国际标准化组织ISO和国际电工委员会IEC关于静止图像的编码标准JPEG/JPEG2000,关于运动图像的编码标准MPEG-I, MPEG-2, MPEG-4等,以及国际电信联盟ITU-T制定的视频编码标准H.26X系列。这些标准采用的图像编码算法融合了各种性能优良的图像编码方法,代表了目前图像编解码的发展水平。而由ITU-T和ISO/IEC两个组织共同完成的新的视频编码标准H.264/AVC更是结合了许多种视频编码的先进技术(11121,从而获得了比以往各种编码标准效果更好的性能,因而必将获得更加广泛的应用。H.    264/AVC提出了许多新的先进技术,例如:H.264将视频编码结构上分为两个独立的层:视频编码层VCL(video coding layer)和网络适配层NAL(networkabstraction layer)。视频编码层的主要任务是用高效的方式表述视频数据,也就是进行视频数据的压缩;网络适配层则根据网络的特性对数据进行封装打包,使其适于网络传输;H.264仍然采用基于块的运动补偿和变换编码,但它采用了一些先进的编码技术来提高了压缩效率,例如:运动矢量具有亚像素精度,对于亮度信号来说可以达到1/4像素精度。运动补偿使用了块大小可变的运动补偿,允许西安电了科技大学硕士学位论文视频编码标准11.264及其快速实现算法q(究使用多个参考帧,帧内编码使用帧内预测,自适应环路滤波,还有自适应于内容的算术编码和变长编码,这些编码算法大大提高了11.264的编码效率。然而,这些高效的视频编码技术也使得1    1.264的编码复杂度大大增加,这对现在的硬件设备提出了巨大的考验,尤其是对实时性要求特别高的应用(如实时会话业务),11.264的高复杂度将影响其在这些领域的应用。为此需要使用一些快速实现算法,在不明显降低11.264编码性能下,降低11.264的编码复杂度。1.2论文的研究工作1.2. 1论文所完成的研究工作本文主要做了以下几点研究工作:》详细介绍了11.264的编码结构、技术特点及性能复杂度等;》深入研究了11.264帧内编码的特点,在此基础上提出了一种新颖实用的帧内预测编码快速算法。并使用并行指令技术提高帧内编码速度;》在深入研究11.264整数变换的基础上,提出了一种提前判断零块来提高编码速度的方法1.2.2论文所使用的开发平台本论文在配置为Pent    ium IV 2.OGHz / Windows2000的PC平台下,分别使用MicrosoftVi sual C++6.0和Intel C++ Compiler 8.0作为开发和编译平台,改进和优化的性能分析使用了Intel VTuneTM Performance Analyzer 7.0,并使用自主开发的1.264视频编解码器。1.2.3论文各章节安排本论文的各章节内容安排如下:        第二章首先介绍11.264视频编码标准的基本结构及主要算法特点,然后详细给出11.264的网络适配层和视频编码层的特点,并给出其性能和复杂度,最后实验比较了11.264与11.263+的性能差别。第三章首先详细讨论1    1.264帧内预测编码算法,然后提出了一种快速帧内预测快速算法,最后给出快速算法的实验结果。第四章首先介绍了1    1.264帧间预测以及整数变换的特点,然后结合这些特点提出了一种预先判决零块的方法,最后给出快速算法的实验结果。第二章H. 264视频编码标准第二章H. 264视频编码标准2. 1 H. 264标准简介H.    264/AV C是最新的国际视频编码标准,它的制定过程最早是从1998年开始的。当时,ITU-T第16研究小组在对H.263不断改进的同时,还启动了另一个研究项目H.26L,目标是制定一个新的数字视频编码标准,使其编码效率能够比当时已投入使用的标准提高一倍。这个项目是由视频编码专家组(VCEG一ITU-TSG16 Q.6)负责,2001年12月,运动图像专家组(MPEG)也加入进来,成立了联合视频小组(Joint Video Team: JVT),共同来完成了标准的制订工作。2003年3月,标准的最终草案公布并改名为H.264,由于H.264是由两个组织共同创建完成,所以它分别被称为ITU-T建议H.264和ISO/IEC国际标准14496-10(  MPEG-4第十部分)AV C(先进视频编码)。最终标准于2003年5月发布111H.    264编码的标准化范围如图2.1所示:1标准适用范围图2.                            1视频编码标准化范围图2.    1给出一个典型的视频编码/解码系统流程,和以前的ITU-T和MPEG所制定的编码标准一样,只有视频的解码部分被标准化。通过影响和限制比特流和语法,定义视频解码过程的语法单元,所有符合标准的解码器在给定一段编码后的码流经过解码后都会有相同的结果输出。标准的这种范围限制最大可能地提高了使用各自最适合的方式进行性能优化的自由度。与以前的视频编码标准不同,H.    264在结构上分为两层(如图2.2所示):一个规定视频编码算法的视频编码层(VCL)和一个规定网络传输规范的网络抽象层〔NAL)。视频编码层的主要任务是用高效的方式表述视频数据,也就是进行视频数据的压缩;网络适配层则根据网络的特性对数据进行封装打包,使其适于网络传输。西安电子科技人学硕士学位论文:视频编码标准H.264及其快速实现算法研究___ ̄[视频编码层(VCL)  蒸(:4:1(RVmACLf)一P 2网络抽象层:L64-NA背LIA票粤别网络抽象层(    NAL)(NAL)          告传输层}噢一HH.2.634 20or覃〕覃鸳延一MPH.2E64 Gt-o2H.264 toH.324/MH[L.T2ifP4 /IPto罗,”薰“,・图2.                          2 H.264的结构和传输环境    H.264/AVC标准在制定时其努力的目标就是针对“会话业务”(视频电话等)和“非会话业务”(存储媒体,广播和流媒体等)的应用,提高压缩性能并提供友好的网络接口,这使得H.264的应用变得非常广泛。H.264可以被广泛应用在以下几个方面:》在电缆、卫星、DSL等不同信道上的广播业务;》交互式的或连续的光介质或磁介质存储媒体(如DVD等);》在ISDN、以太网、局域网、DSL、无线网络等不同网络上的会话业务;》在ISDN、以太网、局域网、DSL、无线网络等不同网络上的视频点播和流媒体业务;》在ISDN、以太网、局域网、DSL、无线网络等不同网络上的多媒体短信业务(MMS)a2. 2 H. 264编码的设计特点    H.264与以前的视频编码标准相比性能获得了很大的提高,但它仍采用的是传统的混合编码框架,H.264编码效率的提高也不是其中某一种新的编码技术所产生的决定性的结果,而是多种新算法结合而产生积累效果而致。相对于以前的视频编码标准,H.264具有如下主要特点:1.提高预测编码部分能力(MC/ME)的设计:》具有更小的块并且块大小可变的运动补偿:H.264标准与己往任何标准相比在运动补偿块的大小和形状上的选择都更为灵活。其亮度运动补偿块大小最小可以是4X4大小。》四分之一像素精度的运动补偿:以前大多数的标准最多支持运动矢量精确到第二章H. 264视频编码标准二分之一象素。而H.264标准中通过使用四分之一像素精度的运动矢量,使得运动补偿更为精确。D可超越图像边界的运动矢量:MPEG-2及其以前的标准,运动矢量只允许指向己解码的参考图像内的点。图像边界外延技术,首先被H.263作为一个可选项而采用,在H.264中也被包含进来,这使得H.264的运动矢量可以指向超出图像边界的点。》多参考帧运动补偿:在MPEG一及其以前的编码方案中,预测帧(称为P帧)只允许用前一帧图像来预测下一帧的图像。而H.264扩展了H.263十+中的参考帧选择技术,允许编码器根据运动补偿原则在大量的己解码并存储在解码器的图像中选择参考帧,来达到高效编码的目的。H.264中同样也对双向预测参考帧的参考能力根据双向运动补偿作了扩展。》去除显示图像顺序和参考图像顺序的辐合性:在以前的标准中,运动补偿的参考帧使用顺序严格依赖于图像播放的顺序。H.264标准彻底去除了这些限制,允许编码器灵活选择参考图像的顺序和播放图像的顺序,其灵活性只受到存储器的总容量必须确保解码能力的限制。同时,这些限制的去除也消除了以前由双向预测编码带来的附加延时。》去除图像参考能力和图像表示方法的相关性:在以前的标准中,使用某些编码方法生成的图像(如:双向预测编码帧)不能用作预测视频序列中其它图像的参考帧。去掉这一限制后,新标准的编码器更为灵活,而且在很多情况下,可以选择与待编码图像更接近的某一幅图像作为参考帧。》权重预测:H.264中的又一个创新是允许编码器对运动补偿预测信号加权。这使得包含淡入淡出效果的图像和其它一些图像在编码效率上有很大提高。》改进的“skipped”和“direct”模式推断:在以前的标准中,己编码图像中模式为“skipped”的图像区域的场景内容不能运动,这对包含整体运动的图像是有害的。所以H.264对“skipped”区域进行运动推断。对双向预测编码区域(Bslices), H.264还包含增强的运动推断方法:"direct”模式的运动补偿,它进一步改善了H.263+和MPEG-4 Visual中“direct”预测的设计。》帧内编码中不同方向的空间预测:在帧内编码的图像中使用了新的空间预测技术,将当前图像中己编码的部分预先解码,将解码区域边缘的象素用于帧内编码区域的空间预测。这一技术增强了预测图像的质量,并允许由邻近区域中非帧内编码的图像预测当前图像。》环路去方块滤波:基于块的视频编码所产生的效应就是块效应,这是源于预测和重构是在解码过程中是不同阶段。自适应去方块滤波的应用是一种为人所熟知的改进图像质量的方法,如果设计得当,它对图像的主观和客观质量都有改进。与H.263+的选项中的去方块滤波不同的是,H.264的这一设计是在运动补偿预测西安电子科技大学硕士学位论文:视频编码标准H.264及其快速实现算法研究环路中提出的,所以它对图像质量的改善也可应用于帧间预测,进而增强预测其它图像的能力。2.提高变换和编码部分效率的设计:》小的块变换:以前所有主要的视频编码标准都使用大小为8X8的块进行变换,而新的H.264的设计主要是采用4X4的变换。这使编码器可以更好的根据当时的场景来表现信号,有效减少了振铃(ringing)效应。》块大小灵活可变:在大多数情况下,使用大小为4X4的较小的块进行变换就可以了。但有一些信号的相关性很强,这种情况下的变换就可以使用更长的基函数。H.264标准对这种情况的处理有两种方法:一是通过使用分级变换来扩充有效的块大小,对频率较低的色度信号,将其组成8X8的数组;二是通过允许编码器在帧内编码时选择特殊的编码类型,使得对频率较低的亮度信号的变换长度扩充到16 X 16的块大小,这与色度信号的处理方法很类似。》短整型字长的变换:所有以前标准的编解码器对变换的计算的设计中,处理都较为复杂,所以以前的标准中都采用32比特的处理,而在H.264中仅要求16比特的计算。》精确匹配的逆变换:在以前的视频编码标准中,用于表现视频的变换通常被限定在误差允许的范围内,因为得到精确匹配的理想的逆变换是不现实的。所以,不同的解码器设计解得的视频图像有微小的差异,产生编解码器所表现的视频信号的“漂移”,使视频质量下降。H.264是第一个达到解码的视频内容精确等价于编码质量的标准。》算术嫡编码:H.264包含了一种先进的嫡编码方法一算术编码。算术编码作为H.263的可选项出现过,H.264中更为有效地利用了这一技术,提出了功能非常强大的嫡编码算法一CABAC(基于内容的自适应算术编码)。》基于内容的自适应嫡编码:H.264中的两种嫡编码方法分别是:CAVLC〔基于内容的自适应变长编码)和CABAC,它们都是用基于内容的自适应手段来提高编码效率。3.提高抗误码/丢包以及增强在不同网络环境下操作的灵活性的设计:》参数集结构:参数集的设计为头信息的鲁棒性和高效安全性提供了保障。在以前的标准中如果关键信息丢失了几个比特(比如序列的头或图像的头信息)可能严重影响解码过程,在H.264中对这些关键信息用更为灵活的方法单独处理。》NAL单元语法结构:H.264的每个语法结构都按逻辑数据打包,称为NAL单元。与以前的视频标准强制系统使用特定的比特流接口不同,H.264的NAL单元语法结构允许根据特定的网络自定义合适的方法来传送视频内容。》灵活的slice大小:与MPEG-2中定义的固定的slice结构不同,H.264中的第二章H.264视频编码标准slice大小与早些的MPEG-1一样是非常灵活的。》灵活的宏块顺序(FMO ):提出了一种将图像划分成被称为sli。组的新方法,slice组中的每一个slice都可以作为一个单独的解码单位。有效利用了这一点,灵活的宏块顺序就可以显著增强抗数据丢失的鲁棒性。》任意的slice顺序(ASO):因为编码图像的每一个slice基本都可以与图像中的其他slice独立地进行解码,所以在H.264的设计中,可以以任意顺序发送和接收图像中的slice。这种能力可以改善实时应用中端到端的延时,尤其是乱序发送的网络。》冗余图像:为了增强抗数据丢失的鲁棒性,H.264的设计中允许编码器发送图像某些区域的冗余表示,这样当基本表现部分在传输过程中丢失时,仍可以表现图像的某些区域。》数据分割:在表现视频内容时,某些编码信息比别的信息更为重要或更有价值〔如运动矢量或其它预测信息),因此,H.264允许每个slice的语法可以按语法元素的范畴被分为三个不同的部分进行传输。D  SP/Si同步彻换帧:SP/SI帧是H.264设计的两种新的图像类型,通过使用SP/Si帧就可以在解码端做到与其他解码器正在产生的视频流精确同步,而无需对所有解码器都传送一个I帧而造成效率下降。这就使得解码器可以在以不同的数据传输速率播放的视频内容间进行切换,以及抗数据丢失和数据错误,并且能够使用tirck模式(如快进、快倒等)。2. 3 H. 264网络适配层(NAL)网络适配层被设计成提供“友好”网络,使得对于不同的传输系统能够简单    有效的组织和使用视频编码的数据。网络适配层能够方便地将H.264视频编码层的数据影射到不同类型的传输层上(如图2.1所示),例如:》任何种类实时的有线和无线I    nternet业务的RTP/IP传输协议层。》文件格式,例如,I    SO用于存储的MP4和MMS等。应用于有线和无线会话业务的H.32Xe卜卜用于广播业务的MPEG-2系统等。2. 3. 1 NAL单元编码以后的数据以NAL单元的形式组织起来,每一个NAL单元可以是一个    有效的包含整数个字节的分组。每一个NAL单元的第一个字节包含了对NAL单元中数据类型的指示,而剩下的字节包含了相应类型的有效载荷数据。西安电子科技大学硕上学位论文视频编码标准H.264及其快速实现算法研究在NAL单元中的数据为了避免与可能加入到NAL单元前面的开始码前缀冲    突加入了冲突避免字节,通过加入特定的字节NAL单元中的数据就不会出现与开始码前缀一样的码子了。NAL单元结构定义说明了一个一般的格式,它可以被使用在面向数据分组和    面向比特流传输的两种不同的系统。一系列由编码器产生的NAL单元就形成了NAL单元流。2. 3. 2 NAL单元以字节流格式使用一些系统(如H.    320和MPEG-2/H.222.0系统)需要将整个或者部分NAL单元以有顺序的字节流或比特流的形式进行发送,在这些NAL单元之间的边界位置就必须通过这些编码后的数据本身来进行识别。为了在这种系统中进行应用,H.    264专门定义了一个字节流格式。在字节流格式中,每个NAL单元前面放上了3个字节的开始码前缀。这样NAL单元的边界就可以通过在码流中寻找独一无二的开始码前缀部分来识别。通过使用冲突避免字节(emulation prevetion bytes)保证了开始码前缀在每一个NAL单元中是可以被独一无二地识别的。2. 3. 3 NAL单元以分组传输系统使用而在一些系统里(如使用I    P/RTP协议的系统),编码后的数据按照系统传输层协议以分组的形式进行传输,并且在这样的系统里NAL单元的边界的不使用开始码就可以被识别。因此,为了减少数据冗余,在这样的系统中NAL单元没有加入开始码前缀。2.3.4 VCL-NAL单元和非VCL-NAL单元    NAL单元可以被分为VCL-NAL单元和非VCL-NAL单元。VCL-NAL单元包含了表示视频图像的采样数据,而非VCL-NAL单元包含任何与附加信息相关的数据,如参数集(可以被应用到大量VCL-NAL单元的重要头信息)和附加信息域(如时间信息或者是别的附加信息)。2.3. 5参数集参数集就是包含了一些很少改变的并且被应用到很多VCL-NAL单元进行解第二章H. 264视频编码标准码的一些信息数据。参数集分为两种:》序列参数集:序列参数集被应用在一系列连续的编码后的视频序列中。》图像参数集:图像参数集被应用在一个视频编码序列中一个或更多个图像中。序列参数集和图像参数集这种机制使得将一些不经常改变的信息的传输与编    码后的表示视频图像采样值信息的数据的传输分离开来。每个VCL-NAL单元包含一个标识用来说明参考相关图像参数集的内容,而每一个图像参数集又包含一个标识用来说明对相关序列参数集内容的参考。用这种方法,一些少量的数据就可以用来对大量信息的参考而不用在每个VCL-NAL单元中重复传输这些信息。    序列参数集和图像参数集可以发送在需要使用的VCL-NAL单元之前。为了增强抵抗丢失数据的健壮性,序列参数集和图像参数集可以被重复发送。在一些应用中,参数集可以与发送视频数据的信道一同传输,而在另一些应用中,参数集还可以通过比发送视频数据所用的信道更可靠的信道进行传输。2.3.6 Access单元    一组以指定的形式组合的NAL单元被称为Access单元。通过对每个Access单元的解码就可以解出一帧的图像数据。每一个Access单元的格式如图2.3所示图2.                          3 Access单元结构    每个Access单元包含了一组VCL甲NAL单元所组成的基本编码图像,而在基本编码图像前面可以加入一个Access单元分隔符用来帮助定位Access单元的起始位置。在附加信息域中包含了一些诸如图像时间信息等一些可能用于对基本编码图像进行处理的附加信息西安电子科技大学硕士学位论文:视频编码标准H264及其快速实现算法研究基本编码图像包含了一组VCL-    NAI单元,而这些VCL-NAL单元又包含了表示视频图像采样的slice和slice数据分割。    在基本编码图像后面可以是一些附加的冗余的编码后图像数据的VCL-NAL单元,当解码端数据丢失或者基本编码图像解码失败后即可以使用这些冗余编码图像    最后如果编码图像是序列中最后一个图像,那么一个序列结束NAL单元就可以被加入其中;如果编码图像在一个完整的NAL单元流中是最后一个编码图像,那么一个流结束NAL单元可以被加入其中来说明整个码流的结束。2.3.7编码后的视频序列    一个编码后的视频序列包含一系列的由连续NAL单元组成的Access单元,并且只使用一个序列参数集。每个编码后的视频序列在给定必要的参数集后可以独立于任何别的视频序列进行解码。在每个编码视频序列的开始是一个立即解码刷新(IDR) Access单元,一个IDR Access单元包含一个帧内编码帧。一个NAL单元流可以包含一个或者多个视频编码序列。    2. 4 H. 264视频编码层(VCL)    视频编码层被用来高效的表示视频数据。自H.261标准制定以来,所有以前的ITU-T和ISO/IEC JTC1视频编码标准中,视频编码的设计都采用基于块的混合视频编码方法,每幅编码图像都以宏块为单位表示。其基本的编码算法思想是通过帧间图像预测来减少时间统计相关性:通过对预测残差信号进行变换编码来减少空间统计相关。虽然H.264的每一项新技术没有大幅提高编码效率,但是,诸多小改进组合起来就使H.264在性能上获得了显著的提高。    图2.4说明了H.264中基于块的VCL结构,从图中可以看出一个宏块的所有的亮度和色度采样都进行了空间上的预测和时间上的预测,并且预测残余信号被使用变换来进行编码,为了变换的目的,每个预测残余信号被分割成更小的4x4块。每个块使用整数变换,并且对变换后的系数进行量化后使用嫡编码。西安电子科技大学硕士学位论文:视频编码标准H.264及其快速实现算法研究2. 4. 3图像的划分Slice和slice group当不使用FMO(    lfexible macroblock ordering)时,由一系列宏块按光栅扫描顺序组成的宏块序列即为slice。一个图像可以被分成一个或几个slice(如图2.5所示)。因此在H.264中一个图像是一个或多个slice的组合。给定有效序列和图像参数集,slice就可以从比特流中解析出语法元素,继而对slice表示的图像区域的采样值正确解码,而无需使用其它slice提供的数据。但Slice边界的去方块滤波可能需要其它slice的一些信息。曰口门门下「门下「「门曰弓1li曰口门口巴口]F门门门习o-I口口口口-r-r门门门尸门门口口口口[口-7}一曰li曰1口口口口口口r]门门F门}]口门曰尸-「门曰口口口口口口口口口口口l1曰网」图2.                      5将图像分成slice(未使用FMO)    FMO通过使用slice group的概念改变了把图像分成很多的slice和很多的宏块的方式。每个:lice group是根据宏块到slice group的映射图而定义的一组宏块,它是由图像参数集的内容和slice头中说明的一些信息指定的。宏块到slice group映射图对图像中的每一个宏块都分配一个slice group标志数字,标识宏块所属的slice group。每个slice group又可以分成一个或多个slice,这样一个slice就是在同一slice group中的一组宏块,而这些宏块在一个特定的slice group中是按光栅扫描的顺序被处理的。(不使用FMO的情况可被看作是整个图像只包含一个slicegroup的特殊情况。)不考虑是否使用FMO,每个s    lice可以使用如下不同的编码方式进行编码:    I slice: slice内的所有宏块都使用帧内预测进行编码。P     slice:除了有I slice的编码方式外,P slice中的一些宏块还可以使用最多有一个运动补偿预测信号的帧间预测进行编码。B     slice:除了具有P slice可使用的编码方式的外,B slice中的一些宏块还可以使用有两个运动补偿预测信号的帧间预测。以上的三种编码模式除了对参考图像的使用有所不同外与以前的标准十分相    似。以下是两种新的slice的编码模式:SP和SI Slice.SP     slice:切换P slice,目的是为了在不引起类似于插入I-Slice所带来的比特率开销的情况下,进行码流间的切换。它的使用可使不同预测编码图像之间的高效切换成为可能。第二章H. 264视频编码标准SI     slice:切换I slice,和SP-Slice的用途一样,所不同的是SI-Slice的预测使用帧内预测而不是运动补偿,因此它主要用于从一个码流切换到另一个完全不同的码流,在这种情况下,因为两个序列之间没有相关性,所以运动补偿将没有帧内预测的效率高。它可被应用于随机访问和错误掩盖。2.4.4帧内预测    如果一个宏块以帧内编码模式进行编码,则可根据已编码重建的块来形成一个预测块,从而进行帧内预测。就亮度信号来说,预测块可以是16X 16的块,或是4X4的块。对于16X16的块有4个可选的预测模式,而对于4X4的亮度块则有9个可选的预测模式。根据s    lice编码类型的不同,每个宏块都可以以几种编码类型中的一种进行传输。在所有slice编码类型中,8264支持以下类型的帧内编码:亮度帧内4X4预测模式、亮度帧内16X 16预测模式、色度帧内8X8预测模式和I PCM四种预测模式。亮度帧内4x4预测模式对每个4X4亮度块都单独进行预测,它对图像部分    区域的细节描述效果很好。亮度帧内16X 16预测模式则对整个16X 16的亮度块进行预测,它更适合于图像中平滑区域的编码。作为帧内亮度16X 16预测模式和帧内亮度4X4预测模式的替代,I PCM编码模式允许编码器简单的避免预AJ和变换编码过程,直接传输编码采样值。使用I一CM模式具有以下几个目的:1)允许编码器精确表达采样值:2)为精确表示不规则图像内容提供了方法,且数据量没有显著增加;3)可以给解码器在处理一个宏块时必须处理的比特数作一个硬性限制而不损失编码效率。        以前的视频编码标准中帧内预测通常在变换域进行,而在H.264中,预测通常用己进行编码的相邻块的采样点预测(一般是预测块的上方或左方的块),在空间域进行。在存在传输错误并导致帧间编码宏块出错的环境,这种做法可能导致错误扩散。在这种情况下,可以采取严格的帧内编码模式,要求参与预测的相邻宏块必须是以帧内模式编码的。亮度4X4预测模式根据不同的预测方向共分为9种预测模式,他们是:模    式。:垂直预测模式,模式1:水平预测模式,模式2: DC预测模式,模式3:左斜下预测模式,模式4:右斜下预测模式,模式5:垂直偏右预测模式,模式6:水平偏下预测模式,模式7:垂直偏左预测模式,模式8:水平偏上预测模式。亮度帧内16 X 16预测模式支持四种预测模式。模式0:垂直预测模式,模式1:水西安电子科技大学硕上学位论文:视频编码标准H.264及其快速实现算法研究平预测模式,模式2: DC预测模式,模式3: Plane预测模式。由于色度信号通常在很大范围内都很平滑,宏块中的色度采样点的预测使用与帧内亮度16 X 16预测模式相似的预测技术,其预测模式也是4种分别为:模式0: DC预测、模式1:水平预测、模式2:垂直预测、模式3:平面预测。(在第三章本文将进行更详细的讨论)为了保证所有s    lice之间相互独立,当跨越边界时不使用帧内预测(及所有其它形式的预测)。2.4.7帧间预测I, P Slice的帧间预测    在P Slice中的宏块除了帧内宏块的编码类型外,还有帧间编码类型的宏块一P宏块。对P宏块类型还定义了各种帧间预测或运动补偿编码类型。每个P宏块类型都对应了一种宏块的划分方式,划分出的块可用于运动补偿预测。语法定义支持亮度信号的每一个宏块(16X 16)可以有四种划分形式(如图2.6): 16X16,16X8, 8X16和8X8。当选择8X8的块时还要传送一个附加的语法元素,这个语法单元说明这个8X8的块是否进行了进一步的划分。如果采用8X8模式,则每一个块还可以进一步的划分为(如图2.6): 8x8, 8X4, 4X8或4X4.16x16                                           16x8             8x16 08x80l宏块划分12300l亚宏块划分l23图2.                            6宏块、亚宏块划分采取这样的宏块划分和亚宏块划分,在每一宏块内可以为运动预测提供多种    可选的块组合方式。在H.264标准中是采用率失真优化的方式来进行划分的,一般来说,对于帧内较平滑的区域选择比较大的块,而对于细节部分则应选择较小的块。每个预测编码的MXN亮度块的预测信号通过置换参考图像的相应区域得    到,它由可译的运动矢量和一个图像参考索引详细说明。这样,如果宏块使用四个8X8的块进行编码,每个8X8的块又进一步分成四个4X4的块,对一个P第二章H. 264视频编码标准宏块最多要传送一共16个运动矢量。H.    264中的运动矢量具有亚像素精度(不同于H.263中的半像素精度),对于亮度信号来说可以达到1/4像素精度。亚像素精度比整像素精度的性能要好得多,但它增加了运算复杂度。当运动矢量指向一个整数采样位置时,预测信号由参考图像的相应采样点组成,否则预测值将通过使用内插法产生非整数位置而得到。二分之一位置的采样信号的预测值是通过应用一维的水平和垂直六阶FIR滤波器得到的。四分之一位置的采样信号的预测值是通过将整数和二分之一采样位置的采样点插值得到的。口                口囚aa,,国口口口回画回口口口沉国圃回口一图口口回回口国国口    图2.7说明了采样点a一k,”一,的分数采样内插方法。要得到二分之一采样点b和h,先是通过六阶滤波器分别计算中间值b1, hl,如下式所示:b和h的最后预测值再经过如下计算,并将结果限制在0到255.    在位置1处的二分之一采样点是通过下式得到的:    .f}的中间值的得到方法与hl类似。最后的预测值其中标为cc, dd, ee, mi,并限制其范围在。到255。两种方法都可以得到Jl1的计算是1= (Ji十512)>>10,图同一国口口口口口              口口画回口图2.                        7分像素精度运动补偿的滤波b                    , = (E一5F + 20G + 20H一51 + J)               (2-1)h,                     = (A一5C + 20G + 20M一5R + T)               (2-2)b=(                       b, +16)>>5                  (2-3)h=(                        权+16) > 5          (2-4)J, =cc一5dd + 204 + 20m,一5ee+ f               (2-5)西安电子科技大学硕上学位论文:视频编码标准H.264及其快速实现算法研究这说明在生成这一位置的1/2像素时,滤波操作确实是可分离的。四分之一采样点a, c, d, n,不i, k, q是通过平均两个最近的整数和二分之一采样点得到的。a=(G+b+l)>>1(2-6)四分之一采样点。,9,P,;是通过平均对角线上两个最近的二分之一采样点得到的。e=(b+h+l)>>(         2-7)色度分量的预测值通常是通过双向线性内插得到的。因为色度信号的采样分辨率比亮度分量低,色度信号位移矢量的精度是八分之一像素。使用整像素、1    /2像素、1/4像素精度的运动预测与过去的标准相比取得了显著的进步,原因如下:1.最显著的原因是运动估值/    运动补偿更精确。    2.另一个原因是预测滤波器更为灵活。整像素、1/2像素、1/4像素精度预测,表示了不同的f氏通滤波程度,它由运动估计过程自动选择。六阶滤波器既有效进行了预测环路的滤波,又能够保存预测环路中的高频内容。语法允许所谓的运动矢量超出图像边界,即运动矢量指向了图像区域之外。    在这种情况下,参考帧通过将边界采样点在内插前复制而进行扩边。运动矢量的各分量采用差分编码,预测值通过对相邻块进行中值预测或方向    预测而得到。所有运动矢量成分的预测(或其它任何预测)都不会超出slice边界。语法支持多参考图像的运动补偿预测以提高编码效率。这样编码时可作使用    以前编码后重建的一帧或一帧以上图像作为参考进行运动预测补偿。这在自然场景周期变换和两个场景交替转换等很多场合尤其有效。多参考帧运动补偿预测要求编解码器都在多图像缓存中存储用于帧间预测的    参考图像。解码器根据比特流中定义的存储器管理控制操作,复制编码器的多图像缓存。除非多帧图像缓存的大小被设置成一帧图像,否则必须指明多帧图像缓存中参考图像的索引(index)。对每个进行运动补偿的16X16, 16x8, 8x16, 8X8亮度块都必须传送参考索引参数。运动补偿预测区域小于8X8时在整个8X8区域内使用相同的参考索引。除了上面所讲的运动补偿宏块模式,P宏块还可以按所谓的P     skip类型进行编码。对这种编码类型,既不传输量化后的预测误差信号,也不传送运动矢量以及参考索引参数。重建信号的获得方法与在多图像缓存中索引为。的P_ 16 X 16宏块类型参考图像的预测信号相似。重建P Skip宏块所需的运动矢量与16X 16块的运动矢量预测类似。P_ Skip编码类型的定义适用于没有变化或连续运动的较第二章H. 264视频编码标准大区域,比如缓慢的镜头移动用很少的比特就可以表示。2,     B Slice的帧间预测与以前的视频编码标准相比,H.    264提出了B slice的新概念。其它图像在进行运动补偿预测时可以参考含有B slice的图像,这取决于多帧图像缓存的存储器管理控制操作。这样B slice和P slice的真正区别在于,B slice的编码中有些宏块或块可以对两个截然不同的运动补偿预测值进行加权平均得到预测信号。B slice使用两个不同的参考图像列表,它们分别被称为第一参考图像列表((list 0)和第二参考图像列表〔list 1)。究竟是哪幅图像存放在每个参考图像列表中,是多帧图像缓存控制和操作的问题。B     slice支持四种不同的帧间图像预测:list 0, list 1,双向预测和直接预测。对双向预测模式,预测信号是由运动补偿list 0和list 1预测信号加权平均得到的。直接预测模式是由以前传输的语法元素推得的,既可以是list 0或list 1预测,也可以是双向预测。B     slice的宏块划分方式与P slice类似。除了P 16X16, P 16X8, P 8x16,P-8 X8和帧内编码模式,B slice还支持双向预测和另一种被称为直接预测的预测方式。每个16X16, 16X8, 8X16, 8X8区域可以独立选择预测方法(list 0, listI,双向预测)。B宏块中的8X8区域也可以使用直接模式编码。如果直接宏块模式没有传送预测误差信号,它也可被称为B _Skip模式,其编码与P slice中的P _Skip模式相似,效率也很高。运动矢量编码方法与P slice相似,并针对B slice的相邻块可以使用不同的预测模式而作了改进。2.4.8变换和量化    与以前的视频编码标准相似,H.264对预测残留信号进行变换编码。在H.264中,是对4X4的块进行变换,并且用与4 X 4 DCT特征类似的可分离的整数变换替代了8x8离散余弦变换(DCT )。因为其逆变换也被定义为精确的整数运算,所以避免了逆变换不匹配问题。基本变换编码过程与以前的标准类似。    前面己经提到帧内16X 16亮度预测模式和8X8色度帧内模式用于对平滑区域的编码。因此DC系数要进行二次变换,得到的变换系数覆盖整个宏块。对每四个4X4块色度分量的DC系数也要再进行一个2X2的变换。平滑内容的二维变换采样点的相关性接近1。在这种情况下重建精度与一维变    换的大小成反比。因此对很平滑的区域,8X8块变换的重建误差与4X4块变换相比减半。二次变换的原理与之相似。使用较小变换的原因如下:    1.当前标准的主要改进之一就是帧内预测和帧间预测。因此残留信号的空间    西安电子科技大学硕士学位论文:视频编码标准H.264及其快速实现算法研究相关性减小。这意味着变换对去相关性的贡献减少。这也意味着4X4变换与较大的变换在去除统计相关性上的效率基本相同。2.客观压缩能力差不多时,较小的4X4变换在边界处的视觉噪声更小(称    作“蚊子噪声”或“振铃(ringing)效应”)3.较小变换的计算更少,处理字长更小。因为H.    264中的变换过程只包含加法和位移,这就避免了编解码器的不匹配〔而在早期的8X8DCT变换中就存在着个问题)。H.    264/AV C使用量化参数来决定变换系数的量化值。量化参数可以取52个值,量化参数被设置为每增加一对应量化步长增加12%〔也就是说量化参数每增加6量化步长增加一倍)。而量化步长每增加12%也就意味着码流大概减少12%.量化后的变换系数被以‘    Z’字形扫描并经嫡编码后传输。在H.264/AVC中所有的变换、反变换操作可以只使用16位的加法和移位操作,量化也只使用了乘法避免了除法。2.4.9嫡编码    H.264/AVC使用两种可相互替换的嫡编码方法:一个是低复杂度基于内容的自适应变长编码叫作CAVLC,而另一种是更复杂的基于内容自适应的算术编码。这两种方法与使用在以前的视频编码标准上的传统统计编码技术相比有了很显著的改进。H.264对于Slice层以上的数据采用Exp-Golomb码,这是一种没有自适应能力的VLC。而对于Slice层以下的数据,如果是残差信号,H.264有两种嫡编码的方式:基于上下文的自适应变长码(CAVLC)和基于上下文的自适应二进制算术编码((CABAC);如果不是残差信号,H.264采用Exp-Golomb码或CABAC编码,视编码器的设置而定。    CAVLC: VLC的基本思想就是对出现频率大的符号使用较短的码字,而出现频率小的符号采用较长的码字。这样可以使得平均码长最小。在CAVLC中,H.264采用若干VLC码表,不同的码表对应不同的概率模型。编码器能够根据上下文,如周围块的非零系数数或系数的绝对值大小,在这些码表中自动地选择,最大可能地与当前数据的概率模型匹配,从而实现了上下文自适应的功能。CABAC:算术编码是一种高效的嫡编码方案,其每个符号所对应的码长被认    为是分数。由于对每一个符号的编码都与以前编码的结果有关,所以它考虑的是信源符号序列整体的概率特性,而不是单个符号的概率特性,因而它能够更大程度地逼近信源的极限嫡,从而降低码率。为了绕开算术编码中无限精度小数的表示问题以及对信源符号概率进行估计,现代的算术编码多以有限状态机的方式实现,H.264的CABAC便是一个例子,其他的例子还有JPEG2000。在CABAC中,第二章H. 264视频编码标准每编码一个二进制符号,编码器就会自动调整对信源概率模型(用一个“状态”来表示)的估计,随后的二进制符号就在这个更新了的概率模型基础上进行编码。这样的编码器不需要信源统计特性的先验知识,而是在编码过程中自适应地估计。显然,与CAVLC编码中预先设定好若千概率模型的方法比较起来,CA¥AC有更大的灵活性,可以获得更好的编码性能。2.4. 10环路去方块滤波基于块进行编码的一个缺点就是会产生可见的块结构。重建的块边界比内部    图像的精确度低,“分块化”通常被看作是当前压缩方法最显著的特征之一。正因为如此,H.264定义了一种自适应的环路去方块滤波,其滤波的强度由几个语法元素的值控制。H.    264中使用一个环路滤波器对16X 16宏块和4X4块的边界进行去方块滤波。在编码端反变换后,也就是在此宏块重建和存储用于预测其它宏块之前,应用去方块滤波:在解码端,在重建和显示此宏块之前也要应用去方块滤波。对16X16宏块进行去方块滤波主要针对的是由于相邻宏块之间的编码方式不同(运动补偿或是帧内编码)以及量化步长不同而引起的块效应;而对4X4宏块进行的去方块滤波主要针对的是由于相邻块之间的变换、量化和运动矢量不同而引起的方块效应。去方块滤波有两个优点:平滑了块边界,尤其是在高压缩率的情况下,可以    获得非常可观的主观质量改进;经过滤波后的宏块用于运动补偿预测可以使预测后的差值信号减少。4X4块的边界      图2.8去方块滤波原理4。及Pi、9,是否需要滤波取决于图2.    8表示去方块滤波的原理。采样点Po,。这样P。和9。的滤波只有当下列由量化参数(QP)决定的门限a(QP)和AQP)条件满足时才进行。1)IP。一。。卜a(QP)西安电了科技大学硕士学位论文视频编码标准H.264及其快速实现算法研究2) Ip、一Po卜16(QP)3) Ig,一Ro卜f (QP)(2-8)其中f(QP)比“(QP)小得多。因此当下述条件满足时,对P,或4,滤波。(              P2一PoI <,6(QP)或192一。oI < Q(Qp)              (2-9)其基本思想是如果测出块边缘附近的采样点间的差的绝对值相对较大,则很    有可能产生方块效应。然而如果差得很多,而且这个差值不可能是由于编码中的量化噪声所产生,则这个边缘更有可能是反映了源图像真实的情况,不应滤波。方块效应减小了,而轮廓清晰度基本没有改变。因此图像的主观质量大为改    盖2. 5 H. 264的性能与复杂度    H.264的视频编码层采用了多种新技术,这些技术单独使用效果并不明显,但是融合在一起以后带来了编码效率的显著提高。各种编码技术对H.264性能及复杂度的影响如下所示:    1)可变块大小:帧间预测支持模式选择,即可以选择不同的预测块形状。使用较小的块在细节情况下,尤其是高比特率的时候效果较好。使用可变块大小可以节省4%-20%比特率,但模式的增加将使得复杂度将呈线性增长,大约每增加一种模式复杂度增加2.5%02)     RDO(率失真优化):通过使用率失真优化可以使得图像的PSNR提高0.35dB并且比特率节省9%。但使用率失真优化将会极大地增加编码复杂度,当使用一个参考帧16x16块大小运动补偿时,率失真优化将使得复杂度提升40%.3)     B帧:使用B帧最多可以使得比特率节省10%.4)     CABAC; CAVLC与CABAC相比,具有运算较简单,易于实现的特点。但与CAVLC相比,是CABAC较之可以提高5%^-10%的编码效率;    5)亚像素精度运动补偿:114象素精度不仅增加了运算复杂度,并且产生了大量的开销,但是预测更加准确,预测误差更小,适用于高分辨率视频的情况。使用亚象素空间精度与使用整数象素空间精度相比,在高分辨下能节省大于30%的比特率,但因此带来的时间开销将增加10%.6)多参考帧预测:多参考帧预测的性能取决于视频的内容,对于低码率视频,    多参考帧预测平均可以节省大约2%的比特率,而对于高码率的视频多参考帧将节省14%的比特率;每增加一个参考帧运算复杂度将提高25%.    7)环路滤波:使用环路去方块滤波,除了获得一定的客观信噪比提高外,还能获得非常可观的主观质量改进。使用环路滤波使比特率降低大约5-10%0第止章H. 264视频编码标准2.6实验结果实验对H.    264与H.263十性能进行比较,图像序列选取CIF格式的forntan图像序列和container图像序列。H.264编码器使用JM8.5参考程序,使用baselineprofile,设定帧率为30Hz,编300帧,参考帧为一帧,搜索范围为16个像素点,不使用B帧;H.263+使用baseline profile。实验结果如下所示:坛色n.们口F                 7M白。团!一们.仁下3口日砚率下H.264比H.263+提高了2-3dB,而在相同的信噪比下H.264比H.263+节省了50%的码率。编码层两方面进行了讨论,然后分析了H.264各种编码方法的性能及编码复杂度,最后通过实验比较了H.264与H.263十性能。从实验结果可以充分说明H.264视频编码标准与以前的视频编码标准H.263+相比性能有了显著的提高,从中可以看出H.264视频编码标准有着广泛的应用前景。犯们幼毖M幻30(国  7, 望 少 理 侧 帐         从实验结果可以看出H.    264与H.263+性能有了非常明显的提高,在相同的码本章详细的介绍了H.    264视频编码标准,主要从H.264的网络适配层和视频厂扩,11卜....r‘1一一一JI|||门|||JlllT||「一一—一‘一_L    一十司川||「|月llT|十十we刁esse之__一聋(.可蕊d分华侧锹  洲胡习老汀__,一卜一已H7W"}150幻口口筑3BF',,L____立--一比特串I}unlL_T J'刁U比口一                t卫n们濡I                            t特甲仁‘抽抽)图2.                            9 H.264与H.263+性能比较2.7小结西安电子科技大学硕士学位论文:视频编码标准H.264及其快速实现算法研究第三章H. 264帧内编码及快速实现3. 1引言1    1.264标准的帧内预测算法充分利用图像的空间相关性,使用帧内块周围的像素来进行帧内宏块的预测,提高了编码效率,从而减少了编码输出码率。然而,高效的帧内预测算法也大大增加了编码器的运算复杂度。这是因为在H. 264标准中,无论是预测帧((P帧或B帧)还是帧内帧(I帧),编码时对每一个宏块都需要做帧内预测,预测模式包括:对亮度信号既要做4x4预测((9种模式)还要做16x16预测(4种模式),还有4种8x8色度预测模式。另外,这么多种模式势必加大模式选择所耗费的时间,特别当使用RDO(率失真优化)模式时,帧内预测的编码时间还要成倍增加。因此,为了满足实时视频通信的要求,必须提高帧内预测编码的速度。一般来说,提高编码运算速度的方法主要有两种:一是优化算法,这是依靠    使用各种快速算法从算法结构本身来降低程序的运算复杂度,这种方法是最显著有效的;二是采用多媒体增强指令集技术,提高程序的并行处理能力,从而在同样的硬件环境中显著提高程序的运行速度。文中将分别使用这两种方法来实现H.264的快速帧内预测编码。3. 2 H. 264的帧内预测    以往的视频编码标准对帧内宏块编码时直接进行变换、量化和墒编码,这样没有充分利用帧内宏块的空间冗余信息,造成编码输出码率较大。为了提高帧内宏块的编码效率,H.264利用相邻宏块的空间相关性来进行帧内预测编码:对于亮度分量,H.264对包含较多空间细节信息的宏块采用4X4预测,而对图像变化较平坦的区域采用16X 16的预测模式;对于色度分量,使用8X8的预测模式。其中亮度4X4预测模式共有9种,亮度16X 16预测模式共有4种,色度8x8预测模式共有4种。下面详细给出所有这些帧内预测模式。3.2.1 4X4亮度预测模式    在4x4亮度预测模式中,H.264把16X 16的宏块划分成16个4X4的子块,每个子块用与其相邻的上面和左面己经编码并重建后的像素点来进行预测,如图第二章H.264帧内编码快速算法3.1所示,子块的a, b,,P等像素的预测值通过相邻的A, B,...,M等像素的值进行一定的计算后得到。一:7         0   s图3.            1子块像素点的位置分布图3.2 4X4亮度预测模式    H.264中4X4亮度预测依据预测方向的不同共有9种预测模式,如图3.2所示。在亮度4x4帧内预测时,其中DC预测(模式2)、垂直预测(模式0)和水平预测(模式U总是被认为有效的,即使在编码块上面像素或左边像素不可用的情况下(这时候上面像素或左边像素的值就使用128这个值来代替),而其它模式仅当所有需要利用的预测象素点都可用的情况下才可以使用(如果E, F, G,H不可用,可以用D的值来代替)。这儿所说的像素点可用(available)是指此像素所在的子块存在并且与当前编码的子块属于同一个slice。具体这9种预测模式如图3.3所示:0(垂直)I(水平)XI^IBIC(IDDCI)e!FIGIH3〔左斜下)4(右斜下)5(垂直偏右)6〔水平偏下)7(垂直偏左)8〔水平偏上)图3.3  9种亮度4x4帧内预测模式1.模式0(垂直预测模式):使用上面相邻子块的像素点A, B. C, D分别来预测各像素所对应列的像素的值。西安电子科技大学硕士学位论文视频编码标准H.2“及其快速实现算法研究2.模式1(水平预测模式):使用左边相邻子块的像素点I    , J, k, L分别来预测各像素所对应行的像素的值。3.模式2     (DC预测模式):使用上面相邻子块的像素点A, B, C, D和左边相邻子块的像素点1, J,K,L对这8个像素点值相加求平均后的值来作为当前块中所有像素的预测值。    4.模式3(左斜下预测模式):使用上面相邻子块的像素点A, B, C, D, E,F, G, H进行线性插值后对当前块相应方向上的像素进行预测。5.模式4(右斜下预测模式):使用上面相邻子块的像素点A,     B, C, D, 1,J, K, L, X进行线性插值后对当前块相应方向上的像素进行预测。    6模式5(垂直偏右预测模式):使用上面相邻子块的像素点A, B, C, D,1, J, K, L, X进行线性插值后对当前块相应方向上的像素进行预测。7。模式6〔水平偏下预测模式):使用上面相邻子块的像素点A,     B, C, D,I, J, K, L, X进行线性插值后对当前块相应方向上的像素进行预测。8.模式7(垂直偏左预测模式):使用上面相邻子块的像素点A,     B, C, D,E, F,G,H进行线性插值后对当前块相应方向上的像素进行预测。9.模式8(水平偏上预测模式):使用上面相邻子块的像素点1    , J, K, L进行线性插值后对当前块相应方向上的像素进行预测。3.2.2  16X16亮度预测模式和8X8色度预测模式在图像变化比较平坦的区域,整个宏块的亮度分量将作为一个整体来预测,共有4中不同的预测模式:Mode 0垂直预测、Mode 1水平预测、Mode 2 DC预测、Mode 3平面预测块为单位预测,它与16 X 16亮度预测类似,也有4种预测色度分量以8X8    模式,只是预测模式的顺序不同:模式0: DC预测、模式1:水平预测、模式2:垂直预测、模式3:平面预测。相同位置的两个色度块Cy, C,具有相同的最佳预狈iI模式。一1,模式0(垂直预测模式):利用与宏块上方相邻的像素H来分别对当前编码块V图3.                      4  4种亮度16X 16帧内预测模式第三章H. 264帧内编码快速算法相应的列上的像素进行预测。2,模式1(水平预测模式):利用与宏块左方相邻的像素V来分别对当前编码块相应的行上的像素进行预测。3。模式2 (DC预测模式):对宏块左边像素和上面像素求平均后的值对当前编码的整个宏块的像素进行预测。4.模式3 (plane预测模式):利用一个线性平面函数对上方和左方的像素进行外插后对编码宏块相应像素进行预测。3.2.3模式选择在H.    264帧内编码中,每个宏块亮度信号都要完成9种4x4预测模式和4种16x16预测模式,然后通过预测模式选择,得出一种最佳预测模式使得编码后的图像在码流和图像质量两者权衡后的获得一个最佳。H.264中模式选择方法有两种:1、使用率失真优化(RDO)模式选择。使用这种RDO方式的模式选择过程如下:1)在给定最后解码的帧及宏块的量化因子QP后,计算拉格朗日因子:    2)在帧内亮度4x4预测的9种预测模式中,通过计算下面的函数使得其值最小,从中选择最佳的帧内亮度4x4预测模式。  J(            s, c, m I QP, Xm )=SSD(s, c, m I QP)+X.-R(s,c,mIQP)    (3-2)X.=0                      .85 .2Q0"                  (3-1)式中QP是宏块的量化参数,丸是(  3-1)中的拉格朗日因子,SSD是原始的亮度块s与预测模式为m的重建块‘的平方差的和,R表示与选择模式m相关联的  比特数,包括模式编帧内模式及DCT系数所需的比特数。    3)在帧内16x16预测模式中,通过计算4种16x16宏块的SATD(绝对变换差和)使得其值最小来确定最佳1  6x16亮度帧内预测模式。  4)通过比较一个宏块使用4x4预测模式时计算的RD代价值与使用16x16帧内预测模式时计算得到的最小代价值,选取代价最小的作为最佳预测模式。  2、基于SAD(或SATD)和速率估计的模式选择方法。对于这种模式选择方法,其亮度4x4预测模式的代价函数的计算方法如下所示:Cos            t. =S AD4,4 + 4Ra.(妙少(3-3)式中从印)是印的指数函数,4R是对使用某种预测模式后比特数的估计,R根据当前模式是否为最有可能的模式取值为0或1。式中SAD,,,(绝对差值和)计算的差值是预测值与图像像素值的差值,为了更准确的比较每种模式的〔'ost,x,西安电子科技大学硕士学位论文:视频编码标准H.264及其快速实现算法研究值,H.264还对这些差值进行Hadamard变换,将差值(这些值最后要变换到频域进行编码)变换到频域求绝对差值和,这样计算得到的值叫作绝对变换差和(SATD)。这里使用Hadamard变换而不是使用DCT变换主要考虑到Hadamard变换比较简单,而又比较接近DCT变换。在计算4x4块的每一种模式的〔'ost󰀀、值后,将〔'os标,值最小的模式判决为最佳亮度4x4预测模式。对于亮度信号的16x1    6模式选择,其开销计算函数如下所示:Cos                  t,6,6 =SATD,6,6                        (3-4)式中的SATD,6=r。也是绝对变换差和,其计算时也是将预测值与图像像素值的差值通过使用Hadamard变换,变换到频率域后求和    最后比较一个宏块做一次16xl6预测后的开销值Cost,6,‘和做16次4x4预测后Cost󰀀、值相加得到的总的开销值Cost的大小,选取Cost最小的作为最后宏块的预测模式。如果Cost值相同4x4预测模式将被优先选取,而如果9种4x4预测模式或4种4x4预测模式中出现相同Cost值时,序号较小的预测模式将被选为最佳预测模式。    比较两种模式选择方法可以看出,在RDO模式中,R值被精确地计算出,从而使得其模式选择的准确度大大提高,但为了计算R值需要非常复杂的计算,从而使得其运算复杂度很高;而基于SAD的模式选择由于R值是一个估计值避免了复杂的计算,所以速度大大提高,但选择的准确度也会下降。使用RDO模式选择的方法与使用基于SAD的模式选择方法相比,基于SAD的模式选择计算复杂度平均为RDO模式选择的7%,但与使用RDO模式选择相比基于SAD的模式选择方法PSNR平均降低。A7dB e由上面的讨论可知,对于亮度信号既要做9种4x4预测还要做4种1    6x16预测,而且还要对这么多种模式进行模式选择,因此,必须使用快速帧内预测算法,来降低H.264编码器的运算复杂度,满足实时视频通信的要求。3.3自适应帧内预测快速算法在H.    264中,除了编码帧内帧时对每个宏块要做帧内预测外,在帧间预测帧也需要对每个宏块进行帧内预测来完成帧间编码模式的选择。另外,由前面的讨论可知,对于亮度信号既要做4x4预测还要做16x16预测。因此,必须使用快速帧内预测算法,来降低H.264编码器的运算复杂度,满足实时视频通信的要求。    实现快速帧内预测算法的关键是尽可能减少每个宏块帧内预测模式的数量,但又尽量不降低预测的准确度。本文提出的快速算法的主要思想是:利用前一帧和当前帧对应位置宏块的帧内预测模式来预测,从而减少当前宏块的预测模式数量,降低编码复杂度,如图3.5所示。第三章H. 264帧内编码快速算法第N-1帧到}MN¥jrq图3.5帧内预测模式的选择过程    图3.5给出了第N帧中的一个块Mo(可以是亮度4x4块、亮度16x16块或色度8x8块)的帧内预测模式的选择过程:通过第N-I帧的块Mo'. M犷,、・一、MS-,和第N帧的块M、M2、M;的最佳预测模式来进行预测。这样,对第N帧的M忿所做的帧内预测模式要远少于9种或4种,从而大大提高了帧内预测的速度。为了方便后面叙述,我们将M;,、M扩一,、MZ'. M竺一,、m,,-,,  M穿,、M"6  `-'M2-'、M8-,和M;、M2、M;称为Mo的预测块。3. 3. 1亮度4x4预测由于序列图像的相邻帧之间存在很大的相关性(时间相关),而且当前帧相邻    宏块间也存在相关性(空间相关)。因此,本文对当前帧的一个4x4块Mo的最佳预测模式与前一帧对应的4x4块mg一,、相邻块m尸、M}2}1、mg一,、m牙一,、m;一,、M 6 - ' 1 M7、m舒,以及当前帧相邻块M'.、M,和m璧的最佳预测模式进行统计比较,并给出与mg的相关性,如表3.1所示。这里所说的相关性是指预测块(M吕一,、M黔・・…)的最佳预测模式与M忿最佳预测模式的相同概率。表3                    .1不同预测块与M:的相关性比较图像序列foremanclairenewsM054乡%74.9%80.1Mr月33.9%54.6%46.5%MT`34.9%55.7%M3"-'35.6%M"4-'38.4%52.0%M "5-'297%40.6%35乡%49.7%47.5%47.7%48.5%图像序列foremanclairenewsM"-6-'27.7%42.8%M罕‘,27力%41.7%36.9%M"-'327%43.8%M0-42.1%M母46.4%58.4%51.8%M望34.9%45.0%373%62.4%49.6%36.7%37石%    由表3.1可以看出,M忿的最佳预测模式与M:一,的相关性最大,其次是Mr、M翌,再次是Mr一,、M全一,、M盆一,、M二一,,相关性较小的是M梦一,、M忿一,、M号一,、Mg-'和M;。因此为了利用图像在空间和时间上的相关性,减少预测模式的数量,本文选取下面5个块的最佳帧内模式来预测M召的帧内预测模式(见图3.5中阴影西安电子科技大学硕士学位论文视频编码标准H.264及其快速实现算法研究宏块):.前一帧对应的4x4块M;,及其相邻右块M又一,和相邻下块M宝一‘.当前帧的相邻上块M;和当前帧的相邻左块Mz由于所选择的5个块的最佳预测模式很大程度上存在有相同的预测模式,因    此实际中Mo的帧内预测模式将少于5种。表3.1给出了使用这种算法后,预测的准确度及平均所需做的预测模式个数。3.3.2亮度16x16预测和8X8色度预测与亮度4x4预测相比,亮度16x16预测和色度8x8预测的预测模式个数减少了一半多,所以对于亮度16x16预测和色度8x8预测,只选取M孟一,、M;和M盆块的最佳预测模式作为候选预测模式进行帧内预测。帧内预测的准确度及平均所需做的预测模式个数如表3.2所示:                    表3.2预测准确度和平均预测模式个数的比较图像序列预测准确度平均预测模式个数(QCIF) Qp--28亮度4x4亮度16x16色度8x8亮度4x4亮度16x16色度8x8foreman85.7%93.2%88.8%2.792.592.58claire94.3%95.2%94.4%2.272.472.52news93.5%97滩%95.2%2.542.442.52由表3.2可以看出使用快速算法的预测准确度非常高,而平均预测模式个数    与未使用快速算法相比也减少了很多,特别是亮度4x4预测,预测模式个数由原来的9种减少为2.5种左右。另外,在进行帧内预测时,不能对所有的编码帧都使用上述快速算法,为了    保证帧内预测的准确性,本文使用下列方法:    首先,对第一帧图像不能使用帧内预测快速算法,必须将4x4预测和16x16预测的所有模式都完整做一遍,以便后续帧的预测更加准确。其次,由于快速算法的预测不能保证完全准确,这就必然导致接下来的编码    帧存在预测误差积累。为了保证快速算法的准确性,需要每隔一定的帧数N后加入一帧F_,对F使用各种帧内预测模式来彻底去除帧内预测误差。对于N值的计算将在下一节中详细说明。3.3.3基于量化因子的自适应快速算法H.    264中量化因子((QP)对帧内预测快速算法会产生一定影响,特别当QP比较大时,影响更为明显。其影响表现为,当QP较小时,使用快速算法后PSNR下降较少,码流增加不多,而当QP较大时,由于图像信息丢失较多,不同预测模第三章H. 264帧内编码快速算法式重建出来的块差值变化较大,从而当使用快速算法后PSNR下降变大,码流增加变多。为了减少QP对FI    PA算法的影响,本文在FIPA算法的基础上,采用自适应帧内预测快速算法(AFIPA ),即通过自适应改变上一节中提到的N值的大小和候选预测块的数量,来减少QP对FIPA算法性能的影响。I)根据QP选择N值由前面讨论可知当QP增大时,FI    PA算法性能变差,此时可以减小N值来提高预测的准确度,反之,当QP减少时,可以增大N值以获得快速编码的性能。本文对大量标准图像序列和实时采集的图像序列进行编码统计后,使用下式来选择N值:N=No                       ''I(QP)                      (3-5)式中A(QP)     = 0.25 X 2-12P-121/6从为QP等于0时N的取值。2)根据QP选择预测块由前面的讨论可知,当QP较小时,快速算法的码流及信噪比下降不大,可    以在快速算法的基础上再减少几个预测块;而当QP较大时,快速算法的码流及信噪比变化较大,就要在原来算法的基础上再增加几个预测块。本文将预测块Mo-', M;"', MZ-', M雪一,、M犷,、M尹、Mz进行分组,m,",- , M、Mz分为一组记作E,M犷,和M军一,分为一组记为乓,M护一,和M璧一,分为一组记作只。表3.3给出根据QP选择预测块的方法。表3.                        3不同QP下预测块的选择方法预测模式Qp<八F,F,戊<Qp<几F, +F2F,Qp>几量度4x4F,十F2+FsF,+FZ量度16x16、色度8x83.4使用并行指令技术提高帧内编码速度3. 4. 1 SIMD(单指令多数据流)技术S工    MD(单指令多数据流)技术可由一条单一指令完成多条操作,这种并行技术使运算速度得到显著提高。工ntel公司推出多项S工MD技术,包括MMX(MultimediaExtensions), SSE(Streaming SIMD Extensions). SSE2等。其中,SSE技术是Intel Pentium III处理器(将体系结构扩展至128位)推出后对最初的SIMD运算体系的加强,SSE具有浮点运算能力,大大提高了运算精度,而Pentium 4处理器的SSE2技术又进一步增强了处理器的并行处理能力。西安电子科技大学硕士学位论文:视频编码标准H.264及其快速实现算法研究3.4.2帧内预测的快速实现在帧内预测时,亮度预测模式有9种4x4预测模式和4种16x16预测模式,    除此之外每个色度块又有4种预测模式,因此对这些预测模式的快速实现能很大程度上提高帧内编码的速度,从而整体上提高H264编码的速度。下面,对帧内预测中运算量较大的部分使用上一节介绍的SIMD技术来实现快速预测。对于亮度1    6x16预测,因为SSE寄存器是128位刚好能放下16个编码块上边或者左边的16个预测值,于是就可以使用SSE提供的指令PSADBW进行优化,指令PSADBW是完成求绝对差值和的功能,通过指令PSADBW xmm0,xmml,可以将xmm0与xmm 1对应字节相减求绝对值后相加。在进行DC预测模式时,只要将xmm I置零再与xmm0做绝对差和,就可以完成xmm0中前8个像素值和后8个像素值的相加功能,在经过一些操作(如移位操作),最终即可完成对所有用来预测的像素求平均值的功能。在亮度1    6x16预测中,还有一种运算量较大的预测模式那就是Plane(平面)预测模式    其预测的计算公式如下:尸r        ed[x,y]一clip] ((a+b(x-7)+c(y-乃十16)/32)a=16(        p【一],15]+p[15,一]])b=(5H+32y64 c=(5V+32y64H一艺(x'+1)(p[8 + x',-]]一,[‘一x',-1])V=艺(  y'+1) (p[-1, 8+ y']- p[一],6 y'])                  (3-6)Y0口              式中Pr    ed[x,y]是指像素点((x, y)的预测值,clip]表示钳位到0-255的范围内,p[x'.一门(x'=-1,0,…15)是宏块上方用来预测的像素值,而PI-41 (Y'=0,1, ... ,15)表示宏块左边用来预测的像素值。显然对H. V的计算可以对其展开后使用并行指令来优化,只要使用一个并行减法(PSUBW)和一个并行乘法(PMULLW)以及PSADBW进行求和即可完成。另外,Pred[x刃可以逐行计算,每一行用一个SSE寄存器来表示,从而快速完成预测值的计算。对于色度信号的帧内预测,可以使用与亮度1    6x16预测类似的方法进行优化。3.4.3 Hadamard变换的快速实现    在H.264中,Hadamard变换用于亮度16x16块变换后的16个DC系数和色度8x8块变换后的4个DC系数的去相关性计算,以及在模式选择时Cost值的计第二章H.264帧内编码快速算法算项。其中对4x4亮度预测和8x8色度预测的帧内模式选择Hadamard变换是可选,而16x16亮度预测中Hadamard变换是必需项。使用Hadamard变换后,峰值信噪比(PSNR)大约能提高0.03dB到0.1 dB,码流将节省2%到5%。一维Hadamard变换的公式为:X[k][n](_1)E'-_"-b;'b ,(k),n一0,1,一,N- 1=骊I写X(3-7)式中N=2'.     b;(z)表示z的二进制表示的第i位值,指数位置上的加法使用模二加。Hadamard变换还可以写成矩阵形势,例如对于4x4的二维Hadamard变换可以写成如下形式:-!1.ee-les卫..esesesesesesesesesJ一一曰布+X, +毛+X,111二1-1W󰀀    H.264中计算SAD时所用的Hadamard变换就是式(3-8)给出的二维的Hadamard变换。矩阵的二维的Hadamard变换可以看作是由一维的列变换和一维的行变换叠加而成,对于每一列或一行的一维Hadamard变换都可以用蝶形运算来完成,具体算法如下所示:耳XJ兀    由图3.6可知,对4x4矩阵的二维hadamard变换可以用以下方法快速实现:首先,将16个16比特数据分成两组,分别存放在两个xmm0寄存器和xmm 1寄存器中;然后,将xmm0与xmm 1的和存放在xmm2中,xmm0与xmml的差放到xmm3中,一次可同时完成8组数据的蝶形运算;接下来,调整数据在寄存器中的顺序后,继续做上述操作即可实现对4x4矩阵的列变换。使用相同的方法同样可以完成对4x4矩阵的行变换。      几(3-8)          --.esesIL二1-LXo十x,一Xa -X,Xo -X, -X2十x3Xo -Xi十Xz一从Xo+X3+Xi+Xi(3-9)兀Xo一X3+Xi一XZXo+ X3一Xi一X2Xo一X〕一X, +X,图3.                          6蝶形变换西安电子科技大学硕士学位论文:视频编码标准H.264及其快速实现算法研究另外,由于需要对数据存放位置的调整,这儿可以使用PUNPCKHWD,PUNPCKLWD, PSHUFD等指令来完成。3.4.4绝对误差和(SAD)计算的快速实现SAD的计算是对两组数据对应相减后求绝对值相加,如下式所示:SAD(i, j) =翼翼lY(一,+n)-YR‘一‘,,+二,)I(3-10)由于程序中有多种预测模式,而每种预测模式选择时都要计算SAD,因此,    对SAD计算的快速实现显得非常重要。例如,使用vtune软件测试,对于QCIF图像序列,平均每做一次帧内编码,大约要调用10000多次SAD的计算。    本文使用SSE指令PSADBW快速完成SAD的计算。这条指令既能对64位的mmx (x代表0-7)寄存器操作,也可以对128位的xnunx(最后的x代表0-7)寄存器操作。当对mmx寄存器操作时,PSADBW指令将两个MM寄存器的对应为8比特数相减求绝对值后放入第一个mmx寄存器的低16位,其余高位均置零,而对xmmx寄存器操作时,相当于对两组mmx寄存器的操作。由式(3-10)可知,完成8x8的矩阵的SAD需要64次减法,64次加法,以及64次的条件判断(求绝对值)。而使用PSADBW指令后,只需要8次指令操作就可以了,大大提高了程序的运行速度。3. 5实验结果    实验使用三个具有代表性的QCIF (176x144 Y.U:V是4:2:0)标准图像序列进行研究,一个是低速运动的视频序列”aire",另一个是快速运动的视频序列】'foreman",还有一个是介于两者之间的视频序列"news"。实验平台是PIV 2GHz计算机,和自主开发的H.264软件编解码器,符合日.264日aseline Profile,下面实验中测出的时间均以此开发平台上的时间为准。并使用亮度信号的PSNR和编码输出的比特率作为衡量快速算法性能的测度。3.5. 1使用帧内预测快速算法的试验结果首先,对使用FI    PA算法与使用AFIPA算法的性能进行比较,FIPA算法N值固定使用20, AFIPA算法N使用式((3-5)来计算获得。另外,式(3-5)中的N。取值为200,表3.3中乃、八的取值分别为12. 36。测试结果如图3.7所示。第三章H. 264帧内编码快速算法犷j任于一使用F中A耳法z-一使用AFIPA肺拿法比特甲Ck卜.图3.                    7. FIPA算法与使用AFIPA算法性能比较    由图3.7中的实验结果可知,当QP较大时AFIPA算法与FIPA算法相比,在相同码率下比FIPA算法提高了O.1dB左右,从而弥补了FIPA算法在QP较大时J性能下降较多的缺点,而在QP较小时使得编码性能基本不变的情况下增加了N的值,从而减少了做所有预测模式的F帧的插入,提高了编码速度。从实验结果可以看出AFIPA算法性能要优于FIPA算法。接下来,对采用AFI    PA算法和未采用帧内预测快速算法的H.264编码器进行比较。实验结果见表3.4,其中ORG表示未采用帧内预测快速算法,NEW表示使用了AFIPA算法。表3.              4.未伸用快谏算法与M适应帧内预Ail算注的性能比转图像PSNR(dB)比特率(kbps)编码速度(VS)编码速度序列QpORGNEWORGNEWORGNEW提高(%)1844.19944.1761870.01908.134力39315石foreman283671936.691765.60790.5339夕46.917.53829.89429.852272.45277.0745.549.99.61847.34747.326891.7906.139.745.815.4claire2840.62840.593395.51400.9340.750.123.13833.72933.696153.21155.0445.651.21231845.17345.171171421734.735.040.515.7news2837.52737.519829.57838.8339.446317.53829.83729.835334.20335.5843.749.012.1    从表3.4的实验结果可以看出,使用本文提出的自适应帧内预测快速算法后,在比特数增加小于3%, PSNR下降不到0.04dB的情况下,编码速度提高了10%到20%,大大提高了H.264中帧内宏块的编码速度。3.5.2使用并行指令技术的帧内编码试验结果    实验首先对H.263十帧内编码与H.264帧内编码的性能进行比较(H.263+未使用先进帧内编码模式),图3.8给出使用图像序列foreman和claire的实验结果。西安电子科技大学硕士学位论文:视频编码标准H.264及其快速实现算法研究__止}maocr } gun己1创怕OCIF3旧H理wasFp(田只比2.‘中埋侧帐(旧件毯2刃几中加一侧休必阵七11一  .一叹〔飞飞旧isoa比特串伪切,}  .一.     1fRtW,a3一aiao   zsno 婴    nom         ml「. - :m}nenaui}},‘{比特串压吮自l Jes .111‘.es‘‘1和肠卜一一一一一」1                  图3.8 H.263十与H.264的帧内编码性能进行比较由图中的实验结果可知,在相同的峰值信噪比下H.    264比H.263十节省了大约40%-50%的码流,由此可见H.264的帧内预测显著提高了编码效率。接下来,对使用本文提出的快速算法和未使用快速算法的帧内编码速度进行    比较,其结果如下表所示:图像序列ForemanClaireNewsContainer    由表3.5可以看出,与未使用快速算法相比,使用本文提出的帧内预测快速实现算法后,编码速度提高了17%-30%,大大提高了H.264帧内编码的速度。    H.264通过使用不同方向的帧内预测减少了空间冗余度,提高了编码效率,但这也增加了H.264的编码复杂度。通过使用前一帧以及当前帧周围块的最佳预测模式对当前块的帧内预测模式进行预测,从而减少预测模式的个数从而降低运算复杂度。由实验的结果可知,此算法使得H.264的编码速度提高了10%-20%.很大程度提高了H.264的编码速度,而恢复图像质量的主客观质量基本没有下降。另外,通过使用SIMD技术后,H.264的帧内编码速度也有了显著的提高,帧内帧的编码速度提高了17%-30%。因此,使用本文提出的方法,H.264编码速度得到显著的提高。匕卜匕。西湘                        表3.5 H.264帧内编码速度的比较未使用快速算法(帧砂)使用快速算法(帧砂)编码速度提高(%)70.881.766.870.383.8106.182.182.818.4%29.9%22.9%17.8%3.6小结第四章H. 264整数变换零块的预先判决第四章H. 264整数变换零块的预先判决4. 1引言    H.264使用了许多新的视频编码方法,如编码块大小和形状可变,支持多种预测编码模式选择等,大大提高了H.264的编码效率。但是H.264高效编码算法导致算法复杂、运算量大,其中运动补偿和变换量化部分占整个编码器运算量的70%以上,给其应用于实时视频通信带来困难,成为H.264实时编码的瓶颈。4. 2 H. 264预测帧的编码算法    与目前使用最广泛的H.263十标准相比,H.264视频编码算法有许多提高编码效率的新技术,特别是帧间预测编码时,H.264的编码块大小和形状可变,有多个可选参考帧用于预测,位移估值具有1/4像素精度等。为了讨论预测帧中预先判决零块快速算法,下面再简要给出H.264中有关算法。》1/4像素精度:H.264使用了1/4像素精度的位移估值和运动补偿算法,与H.263+的1/2像素精度相比可得到2dB编码增益,具体算法是:使用一个6阶滤波器((1,-5,20, 20,-5, 1)计算得到1/2像素的值,再使用整像素和半像素的线性插值得到1/4像素位置的亮度预测值。》多参考帧编码:在H.264中,支持采用多个参考帧进行帧间预测,这在场景交替切换等情况下,可以提高编码效率。》多种预测编码模式:H.264支持7种大小和形状的编码块:16X16, 16X8,8X16, 8X8, 8X4, 4X8, 4X4,如图4.1所示。根据采用块大小的不同,宏块的编码模式分为4种:P16X16, P16X8, P8X16和P8X8。其中,在P 8X8模式下,每个宏块又被分为4个8X8子块,而每个子块又有4种可能的预测模式:PS 8x8, PS 8X4, PS 4X8和PS 4X4. H.264采用尺寸可变块编码,大大提高宏块位移估值的准确性,从而提高编码效率。西安电子科技大学硕士学位论文:视频编码标准H.264及其快速实现算法研究P 16x16        P 16x8P 8x16P凡.8PS 8x8     PS 8x4      PS 4x8 PS 4x4图4.                      1 H.264中大小和形状可变的编码块》整数变换和量化:H.264使用4x4整数变换,避免了由于浮点运算引起变换和反变换之间的误差。并且该变换算法的计算过程避免了乘法,只需要加法和移位即可实现。另外,通过使用表格,H.264的量化过程只使用乘法,避免了除法运算。H.264的整数变换和量化降低了运算复杂度,且对PSNR的影响小于0.02dB.在H.    264预测帧中,每个宏块都要对图4.1给出的4种预测模式以及4种子预测模式预运行一遍,然后选择编码效率最佳的模式,其运算量非常大,影响实时视频通信。本文根据整数变换和量化的特点,优化H.264多种帧间预测编码模式的选择过程,提高H.264的实时编码能力。4. 3 H. 264整数变换零块的预先判决算法在H.    263等基于块的视频编码标准中,使用变换性能较好的DCT(离散余弦变换),但是DCT的变换矩阵元素有些是无理数,如果采用浮点运算就会引起变换和反变换之间的误差。因此H.263要求DCT变换和反变换都要有足够的精度,来保证解码图像的恢复精度,同时DCT变换和反变换的运算量也都较大。而H.264与以前的视频编码标准相比一个显著的特点就是引入了4x4整数变换。4. 3. 1 H. 264的整数变化和量化H.    264根据差值信号的种类采用三种类型的变换:第一种类型是应用于所有的帧间预测残差块和帧内预测残差块包括亮度块和色度块的DCT变换,块的大小为4x4;第二种类型是使用在帧内16X 16预测模式的宏块,其每个4x4块经过DCT变换后,所有亮度直流系数DC形成了一个4X4的矩阵,对它所进行的Hadamard变换;最后一种是对所有色度信号经过4x4块DCT变换后的直流系数组成的两个2x2矩阵进行的Hadamard变换;第四章H. 264整数变换零块的预先判决H.    264中使用较小的块进行变换,减轻了块效应的影响,下面将以4X4残差信号的DCT变换为例详细说明H.264中的变换和量化过程。4.3.1.1 H.264中的DCT变换根据DCT变换的定义可以得出输入数据X的4     X 4 DCT变换的矩阵表示形式为:a--ba--ca a  ab  a  c    Xb  c -ca一a一ac -a -b-c -a b-b a -c其中a    厅,二、厅37c,2’0一V2 cost百),“=V百cost了,‘干r...lesesesesesesesesesesL飞!.!上式的矩阵乘法等价于:矿ab十矿abL1  1P=(CXCr)公ECXCT是二维变换的核心部分。E是伸缩因子矩阵,符号⑧表示(    CXCT)的每个元素都与矩阵E内相同位置的伸缩因子相乘。常数a和b同上,d定义为c/b(约等于0.414).为简化变换的执行,取d=0.    5。为确保变换保持正交性,b也作相应的修正,因此:。一工,。二。厄, d=生。2            丫5         2矩阵C的第二和第四行,己的第二和第四列都乘了伸缩因子2,为了保证等    式成立,由矩阵E对其进行补偿。这样一来就避免了核心变换CXCT中有1/2的乘法,以避免整数运算带来的精度损失。将d值代入(4-2)式中可得如下结果:洲          一工(4-1)c-bb1--d--l1,..月..,.1.IlllJ1--11书,.1.......!1‘IJ一少ab矿abd--11 ,口 l  1  1  ,乃a    X21d1 d一11 -1d一11一d一1(4-2)      ⑧1-11-d11胜lesJ.hZah干1魂2--l;:1    12  1a`   ab12  a`   ab12-1 -2-1 11 -1ab12 b'/4 a6/2 b'14as   a612  a'   ab12ab12 6'14 ab/2 b2 l4    X(4-3)lesesesesesesesesL由于因子d和b的变化,式(    4-3)中的变换己不是真正的DCT变换了,而是4X 4 DCT变换的近似,因此变换后的输出与原来的4X4 DCT变换后的输出是不同的。伸缩因子矩阵E所要做的乘法运算最后被并入到后面的量化过程中。这样    CXC      O-1一I-2 1IJ-2 2-1西安电子科技大学硕士学位论文:视频编码标准H.264及其快速实现算法研究H.264中的4x4块DCT变换就变为下面非常简洁的式子了:厂卫.lesesesesesesesesesL门lesesesesesesesesesesesesesJrllL门leseseseseseseseseseseseseses  1.J1 I I  12  1  11 -1 -2    X飞..月Y = (CXC2 1一1 -21一1 -1 1(4-4),.Jl..月-1一1 2-2 1一11一22-1根据式((4-3)可得H.264的反DCT变换表示为:1     1  1/2 l厂 esesesesesesesesesesesesesL矛一.t、 『. 胜‘!......IJ一a2 ab al abab扩ab护a' ab了ab                    2 l门 esesesesesesesesesesesesesJ1/2--I--1I      l      YX'=吓(Y(9E,)C,1/2 -1一1-1/2 -1  1-1/2一】-1     11一1/2  (4-5)        公‘!-1  1 -1/2ab夕a6护和H.264的DCT变换一样,伸缩因子双也被并入到反量化后H.264的反DCT变换就转化为:厂一‘L1/2--l--1  且1气.去1     1  1/2    YI      1-1/2 -1-1   11 -1/2X I =叮 (Y)CI          一l1/2一1一1-1/2 -1 1-1   1一1/2(4-6)    通过式(4-4)和式(4-6)可以看出,由于矩阵中的乘上2与除上2可以通过可以通过左移和右移实现,所以H.264的4x4DCT变换只需要加法和移位操作即可完成不仅保证了精度还降低了变换的复杂度。4. 3. 1. 1 H. 264中的量化过程基本的量化过程可以表示为Z(    i, j) = round (Y(i, j) l Qstep),其中Y(i. j)是式(4-3)变换后的系数,Qstep是量化步长,Z(i,j)是量化后的系数。标准中Qs    tep共有52个值,它们以量化系数QP为索引,它们的对应关系如表4.1所示。QP每增加6,  Qstep加倍;QP每增加1,Qstep增加12.5。量化步长较宽的范围使得编码器可以精确而灵活的兼顾比特率和质量。量化步长12.5%的变化也意味着比特率约12.5%的下降。亮度和色度信号的QP值可以不同,二者的参数范围都是在0-51之间。QP0123413051.125.‘胜1.1.LJl咭..表4.                            1 Qp与Qstep关系61.253640                  271.37581.625428091.75102512246875}0.6250.Qstep1QP}12.250.81250.875185Qstep20H.264将变换中的伸缩因子集成到了量化过程中。首先,输入X经过变换,yCT。接下来每一个系数W 得到了未经量化的系数:W=已,(i,力在同一步中完成第四章H. 264整数变换零块的预先判决‘,缩‘口量化,良。:Z(i,j)一“ ( W(i,j) )・其中,当“4x‘块中的位置PF(i, j)Qstep为(0,0), (2,0),(0,2)或(2,2)时,PF(i, j)=a2;当在4x4块中的位置为(1,1), (1,3),(3,1)或((3,3)时PF(i, j)一叹;在其它位置PF(i, j)一咧。在H.264参考模型中,因子(PF(i, j)/Qstep)被乘性因子MF(Qp, i, j)及右移运算代替,以避免除法。所以量化过程可表示为:Z(i, j) =round(W(i, j) MF(2Qgbpie,i, j))其中MF(QP id)计算如下式所示:尸F(i, j)MF(Qp, i j)=2gbicc,gbits=15 + jloor(QP l6)。Qstep(4-7)(4-8)在运算过程中,式(4-7)被执行为:Z(    i, j) = sign(W (i> j))(! W (i, j)卜MF(Qp,i, j) + f .2ql,l,) >g bits (4-9)其中>>表示二进制右移。在参考模型中,MF(QP, i j)的最初6个值可以根据QP和系数的位置(动通过式(4-8)计算得到,其具体的值如表4.2所示。当QP>5时,MF(QP i j)的值保持不变,但每当QP增加6,除数2gbi“就乘以2。对帧内模式f是1/3,对帧间模式f是16/6 [4 1QP0123451310711916                        表4.2乘性因子MF(Qp, f t)的取值}洁W'..,,。。、,。,、,。。、}其他位置M}\u,uhl}Nh\0>0l>l}>0I位置(1, 1),(1,3),(3,1),(3,3)52434660419436473355289380667490655410082936281927282582552434559    H.264设计的整数变换和量化算法,其运算复杂度低、计算精度准确,且适应H.264编码块大小和形状可变的特点。根据整数变换和量化的特点,下面将给出预测编码模式选择过程中的预先判决零块快速算法。4. 3. 2 P54 X 4预测模式的零块预先判决算法    在H.264预测帧中,为了更加精确的进行帧间预测,每个宏块(MB)都要将图4.1给出的所有预测模式进行预测一遍,然后选择编码效率最佳的预测模式作西安电子科技大学硕士学位论文:视频编码标准H.264及其快速实现算法研究为最佳预测模式。在进行模式选择时,其选择依据是在每种预测模式下,运动补偿后,得到的帧间SAD(绝对差值和)最小。如果预测模式是PS4X4,那么宏块中每个4X4块的SAD值为艺艺}X(i,j)I-o m=0其中X (ij)表示运动补偿后的帧间预测差值。另外,由式(4-4)可以看出,整数变换后Y的直流分量以0,0)为艺艺X(i, j),将以0,0)代入式子(4-8)就可计算出直1                                            =o ;=o流系数的量化值为:2Z。(;0,。_0)=,s,片3iR}Y3 5"X(t,i)}[} Y33YX(i,i)IV'(pQ,0,0)+f.2001 ;Qbitsl  (4-10)在预先判决零块算法中,我们近似认为如果Z(  0,0)为零,则此时Z(i,j) (i,j=0,1,2,3 )中所有值均为零,即整个块的变换系数量化后全为零。由此可以从式(4-10)推出,PS4X4模式下判决4X4块在整数变换系数量化后全为零的条件是:L             mo J=O       J LW=0 ;=o      i                  j」I 1='0j='妇Qo g,0,0)+f .21"" ) >> qbits一继续化简可得:(4-10)1}G3 .}G3.X(t,j)I<(1-f) "2gl,lIW(&,0,0)、飞(4-11)另外,由于}艺艺X (ij艺酬X (i,j小那么式(4-11)全零块的判决条件可,=o ;=o1=o J=o  <用下式替代:YIIX(i,j)l <(1-f).2q",IJbF(9,0,0)一T,4i司 j=o(4-12)由式(    (4-11)可以看出,不等号左边项即为4X4块运动补偿后SAD值。因此,在PS 4X4预测模式选择过程中,可对4X4块进行全零块判决。下面给出算法的具体步骤:    步骤一计算4X4块位移矢量为零的SAD值SADO,o。首先,判断SADO,o否满足式((4-11),如果SADO,o小于判决门限T4x4,则终止当前块的位移估值,录该块的位置L..,, (x. y表示在MB中4X4块位置的行、列坐标),然后执行步骤二;否则,继续完成位移估值,得到最小SAD值,并计算4X4块的帧间预测是记第四章H. 264整数变换零块的预先判决差值后,再执行步骤二。步骤二完成4X4块整数变换和量化。首先判断当前块是否属于Lx  ,Y,如果4X4块是全零块,则对该块不再进行整数变换和量化,直接对4X4块取全零值;否则,对该块帧间预测差值进行整数变换和量化。通过使用基于PS     4X4预测模式的预先判决零块算法,可以大大减少4X4块位移估值时SAD的计算次数,同时还减少了整数变换和量化的运算,且对PS 4X4预测模式的编码性能和效率基本没有影响。4.3. 3其它预测模式的预先判决零块算法由于H.    264支持不同大小和形状的编码块,因此可选预测模式除了PS4 X 4模式以外,还包括图4.1中给出的其它预测模式。为了在预测模式P16X16, P16X8, P8 X 16和P8X8,以及子预测模式PS8X8, PS8X4, PS4X8中,也能使用4.3.2节给出的预先判决零块算法,来提前终止位移估值,减少SAD的计算次数,提高H.264编码速度,具体算法如下:(    1)在所有预测模式和子预测模式中,将不同大小和形状的块一律分为4X4大小,这样就可以对不同预测模式下的每个4X4块使用判决门限毛x4进行预先判决。(    2)计算4X4块位移矢量为零的SAD值SADo,o,如果SAD,,。满足式((4-11),则记录该块的位置L,,y,然后继续计算当前预测模式下的其它4X4块SADo,o,同样使用式((4-11)进行判断,直到所有4X4块全部完成SADo,。的计算。(    3)在计算得到当前预测模式下全部4X4块的SADO,o后,进行全零块的预先判决:如果所有4X4块的SADo,o均满足式(4-11),那么就终止该预测模式下块的位移估值,当前块即为全零块。例如:在P 16X8模式下,如果该模式下8个4X4块的SADO,。均小于判决门限几、;,则16x8块可以提前终止位移估值,即判决该16x8块为全零块。(    4)进行整数变换和量化。为了保证编码效率,只有在最佳预测模式是子预测模式PS8X8, PS8X4, PS4X8和PS 4X4的情况下,才将对应L、二位置的4X4块直接取全零值,即不再进行整数变换和量化,否则,要对所有4X4块的帧间预测差值做整数变换和量化。    本文提出的预先判决零块算法,不仅对PS 4X4预测模式实现全零块判决,而且可用于全部预测模式和子预测模式的全零块判决,有效降低了帧间预测的运算复杂度,便于实时视频通信系统的实现。西安电子科技大学硕士学位论文:视频编码标准8264及其快速实现算法研究4.4实验结果实验使用三个典型的标准图像序列“f    oreman"(运动剧烈、、"news"(中等运动)、"claire"(运动较小)共300帧进行实验研究,它们是QCIF格式,Y:U:V是4:2:0。实验平台是PIV 2GHz计算机和自主开发的H.264软件编解码器,下面实验结果中的数据均以此开发平台上的时间为准。并用恢复图像亮度信号的平均PSNR和编码比特数作为衡量H.264编码性能和效率的测度。在H.264编码器中,帧间预测可以使用图4.1中给出的所有预测编码模式,满足H.264基本框架(Ba  seline Profile)要求。    3给出在PS4X4预测模式下,使用不同量化参数QP时预先判决首先,表4.零块算法的实验结果。从表4.3中可以看出,随着QP的增加,使用4.3.2节中提出的预先判决零块快速算法后,全零4X4块最多可占80%以上,当然全零块所占比例与图像序列的内容和QP的取值相关。另外,这一算法误判率非常低,对H.264编码性能和效率基本没有影响。表4.                    3 PS 4X4预测模式下全零块所占百分比QP1828Claire46.4172.22%NewS23.42%Foreman2.1%48.87%68.29%21.14%引76%3887.35%将预先判决零块算法应用于H.    264的所有预测模式和子预测模式,在表2给出实验结果。表4.4中比较了不使用预判零块算法(NOP)和使用本文提出的预先判决零块算法(DAZA)的编码性能和效率,以及编码速度。表4.                  4比较NOP算法与DAZA算法的实验结果图像序列foremanQP283828PSNR(dB)NOP35.5829.0136.5929.14DAZA编码比特数少its)NOP编码速度(帧砂)编码速度提NOP36名39.945.248.1DAZADAZA高的百分比4石%11.8%22.6%387%47.4%58.4%35.5128.9636.531604880422728835312267944156787243117680564838.544.655.466.771.283.3claire382829.1239.7832.9826368839642420354439.8533.0740900820268848352.6neWS38从表4.    4可以看出,对所有预测编码模式都使用预先判决零块算法后,与不使用预判零块算法相比,编码速度最多可以提高58.4%,当然这与图像序列的内容和QP的取值相关。另外,解码恢复图像的平均PSNR下降不到O.1dB,恢复图像主观质量良好。因此,使用本文提出的预先判决零块算法,在保证编码性能和效率的前提下,大大提高了H.264的编码速度。第四章H. 264整数变换零块的预先判决4.5小结本文基于H.    264整数变换和量化的特点,在选择最佳预测编码模式的过程中,通过判断SAD的值来预先判决变换量化系数全部为零的块,提出了提前终止位移估值的快速算法。实验结果表明,使用零块预先判决快速算法,在基本没有降低H.264编码性能和效率的前提下,显著提高了视频编码的速度,特别对于运动较小的图像序列,在量化因子比较大的时候效果更加明显,大大的提高了H.264的编码速度。结束语结束语H.    264是最新的视频编码标准,它采用多种先进的编码技术,大幅度提高了编码效率,并可以灵活而高效地应用于不同网络类型和应用领域,在技术上体现了很大的进步。由于其优良的性能和巨大的发展潜力,H.264必将在今后的网络多媒体通信和视频传输中广泛应用。因此,对H.264标准的研究具有十分重要的实际意义,它有助于我们进行视频压缩编码、多媒体通信以及网络性能优化等方向的研究。但H.264编码算法的运算复杂度与以前的视频编码标准相比大大增加,这就给视频软件编解码器的实时处理带来了困难。为了达到实时处理视频业务的技术要求,必须研究提高编码速度的方法。这正是本文所研究的重点。本文主要进行了一下几点研究:    1.对H.264视频编码器的原理和实现方法进行了深入研究,特别是对H.264帧内编码、整数变换量化过程进行了详细的研究,并用实验比较了H.    264与    H.263十的性能差别。2.在对H.264帧内编码过程进行了详细的研究的基础上提出了帧内预测快速算法。实验表明,使用帧内预测快速算法使得H.    264的编码速度提高了1    0%-20%。另外,通过使用SIMD技术后,H.264的帧内编码速度也有了显著的提高,帧内帧的编码速度提高了1    7%-30%.3.在对整数变换量化过程进行了详细研究的基础上提出了零块的预先判决算法,实验表明使用零块预先判决算法后H.    264的编码速度甚至提高了58.4%    但使用这些算法后图像质量却并未下降多少。本文对H.    264的帧内预测编码及整数变换提出了快速实现算法,综合使用这些方法将极大的提高了H.264的编码速度。不过本文研究的内容只是H.264高效编码算法的一部分,H.264中还有相当一部分运算复杂度较高编码算法,如多帧预测,1/4像素精度插值等,这些都是今后应该研究的方向。致谢致谢    深深感谢我的导师常义林教授。非常感谢他多年以来无论是在学习上还是在生活上对我的深切关怀和无私帮助,我所取得的每一份成果,都是和常老师的悉心指导和严格要求分不开的。非常感谢宋彬无论是在生活上还是在学习上对我关心和帮助,我所取得的很    多成果也离不开他的帮助。感谢李立中老师、张健康老师给予的帮助和支持。        感谢马林华、张新、艾达、吴炜、沈中、贾杰、万帅、杨福正、潘敏、林磊、林都平、武银枝、武福平、王俊生、马彦卓、屈兴建、任军刚、霍俊彦、胡晓斌、孙方涛、刘砚等师兄、师弟、师姐、师妹们,还有已经毕业的王新岱、张杰、李春林、李国兵、惠惠、李篙泉、石军等师兄、师姐,感谢他们对我的帮助。在实验室这个大集体中,我们相互帮助,相互促进。从他们的身上,我学到了很多的知识。    我还要特别感谢我的家人,我所取得的一切离不开他们一直以来的无私奉献和默默支持。参考文献49参考文献[1] ITU Telecom. Standardization Sector of ITU. Advanced video coding for generica    udiovisual services[S]. ITU-T Recommendation H.264, May. 2003.[2] ThomasWiegand, Gary J. Sullivan. Overview of the H.264/AVC Video CodingSt    andard[J]. IEEE Transactions on Circuits and Systems for Video Technology,2003,    13(7): 560-576.[31 Jorn Ostermann, Jan Bormans, Peter List, et al. Video Coding with H.264/AVC:Tool    s, Performance, and Complexity. IEEE Circuits and System Magazine. FirstQuar    ter 2004.[41 lain E G Richardson. H.264/MPEG-4 Part 10 White Paper. http://www.veodex.com,Oct    ober 2002.[5] T. Wedi. Motion Compensation in H.264/AVC. IEEE Transactions on Circuits andSys    tems for Video Technology, July 2003.[61 Bojun Meng, Oscar C. Au. Fast Intra-Prediction Mode Selection for 4x4 Blocks inH.    264[J]. IEEE Intenartional Conference on Acoustics, Speech, and SignalPr    ocessing, 2003, vol. 3: 389-392[7] Feng PAN, Xiao LIN. Fast Mode Decision for Intra Prediction. JVT-G013, 7`h    Meeting: Pataya II, Thailand, 7-14 March, 2003[8] Henrique S. Malvar, Antti Hallapuro, Marta Karczewicz, et al. Low-ComplexityTr    ansform and Quantization in H.264/AVC [J]. IEEE Trans. On Circuits andSys    tems for Video Tech,2003, 13(7): 598-603.[9] Zhou Xuan, Yu Zhenghua and Yu Songyu. Method for detecting all-zero DCTc    oefficients ahead of discrete cosine transformation and quantisation [J].ELECTRONI    CS LETTERS, 1998,34(19):1839-1840[101周宁兆,宋彬H. 264中帧内编码算法及其快速实现研究中国有线电视2004年第24期杂志    [1l]宋彬,常义林,周宁兆H. 264整数变换零块的预先判决算法西安电子科技大学学报已录用待发表    研究成果研究成果在硕士研究生期间取得的研究成果如下:、参加科研情况1,研究内容:基于H. 263十的可变速率视频解码器优化,国防预研项目:变速率信源编码体制和方法研究2.研究内容:在PNX1300平台上实现H. 263十的视频编解码及音频的编解码,大唐合作项目:大唐音频、视频解决方案3.研究内容:H.264帧内编码实现与优化,源传合作项目:视频编码H.264的实现与优化二、发表论文情况仁1〕周宁兆,宋彬H. 264中帧内编码算法及其快速实现研究中国有线电视已发表在2004年第24期杂志上[2〕宋彬,常义林,周宁兆H. 264整数变换零块的预先判决算法西安电子科技大学学报已录用待发表

因篇幅问题不能全部显示,请点此查看更多更全内容