H.264编码算法

2024-07-30

H.264编码算法(精选8篇)

H.264编码算法 篇1

摘要:研究一种针对H.264编码的帧间预测块划分视频水印算法, 该算法先对水印图像进行二值处理并经Arnold置乱, 然后在H.264帧间预测编码时根据水印二值序列选择不同的区块划分, 并将水印值嵌入进去。实验结果表明, 该算法具有较好的实时性、鲁棒性, 在B片少量出现的情况下可以达到最佳的效果。

关键词:H.264,视频水印技术,帧间预测,鲁棒性

随着网络和多媒体技术的发展, 数字视频[1]的应用越来越广泛, 视频作品遭到恶意攻击和非法侵权的问题也越来越严重。如何有效地对数字视频进行版权保护, 成为多媒体技术发展中迫切的现实问题。视频水印技术正是为解决这个问题而受到人们越来越多的关注, 成为当前学术领域研究的热点。H.264作为最新一代的视频编码标准, 迫切要求水印技术与其相融合, 提升和改进现有的视频水印算法, 以适应新的应用环境。

在对视频水印技术及H.264标准分析研究的基础上, 研究了一种针对H.264编码的鲁棒视频水印设计算法。

2 算法描述

该算法首先将二值水印图像扫描为序列[2], 然后在H.264帧间预测编码阶段根据水印序列选择不同的区块划分范围, H.264中帧间预测块的划分方式有4种, 分别是16×16、两个16×8、两个8×16、四个8×8[3], 其运动补偿也相应地有四种。在进行帧间预测时, 本算法首先跳过对16×8区块的预测, 如果预测算法所决定的区块划分大小为16×16, 算法将根据水印比特序列中的不同值决定是否将此16×16的区块划分成16×8的区块;如果预测算法所决定的区块划分大小不是16×16, 则直接进行熵编码和码流生成。此算法如图1所示。

2 算法实施步骤

2.1 水印图像二值化

水印图像先行进行二值处理[4], 使水印图像的数据中只包含0和1两种, 以方便进行嵌入处理。为了得到理想的二值图像, 一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阈值的像素被判定为属于特定物体, 其灰度值以255表示, 否则这些像素点被排除在物体区域以外, 灰度值为0, 表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值, 并且某处在一个具有其他等级灰度值的均匀背景下, 使用阈值法就可以得到比较好分割效果。如果物体同背景的差别表现不在灰度值上 (比如纹理不同) , 可以将这个差别特征转换为灰度的差别, 然后利用阈值选取技术来分割该图像。动态调节阈值实现图像的二值化可动态观察其分割图像的具体结果。其二值化处理的流程图如图2。

所采用的水印图像如图3

图3 (a) 中的图像经过二值变换后得到的16进制代码如下。

2.2 水印图像的Arnold置乱

Arnold置乱[5]是V.J.Arnold在遍历理论研究中提出的一种变换, 俗称猫脸变换, 其原意为 cat mapping。目前, Arnold变换多作为数字图像置乱的一种技巧。Arnold变换公式如下[1,2]:

(x'y') =[ (1112) (xy) ] (mod1)

置乱操作在MATLAB中实现。

Arnold变换具有周期性, 而且周期就是迭代到某一步时, 将重新得到原始图像的迭代次数。Dyson和Falk给出了离散Arnold变换的周期性, 对任意的N (N>2) , Arnold变换的周期为TNN2/2。图3 (b) 经过Arnold置乱后得到的图像如图4。

2.3 水印嵌入

算法通过在编码模式上的强行选择来进行信息的隐藏, 具体的实现如图5所示。

嵌入水印前, 残差帧宏块划分如图6。

可以发现在残差帧中图像变化平坦的区域, 宏块的选择都是16×16, 在嵌入水印后可以发现部分宏块被划分成了更小的块 (图7) , 这种嵌入算法对视频效果的影响可以忽略, 因为此算法不会修改任何帧像素的值, 可以达到更高的保真度。

图 (7) 中用粗线条框住的就是嵌入水印的位置, 按照上图所示, 嵌入的数据为:01010101100000000000000101。

根据上例, 定义水印与宏块划分的关系如下

{V (i) 16×16m[j]=0V (i) 16×8m[j]=1

3.4 水印提取

根据H.264压缩编码的语法标准[8], 16×16宏块在I片、P片、B片中都存在, 但是本算法使用到的16×16宏块, 仅仅为帧间预测中的16×16宏块, 所以在提取水印时首先要跳过对I片中宏块的检测, 然后对B片和P片中的16×16宏块及16×8宏块进行检测, 并得出水印序列 (图8) 。

m[j]={0, V (i) 16×161, V (i) 16×8

4 实验结果

本算法的实施环境为:CPU:奔腾E2160, 内存:3 G。为了对算法进行仿真和性能测试, 采用C语言和Matlab语言结合编程的方式, 运用VisualC-6.0和Matlab R2009a的编程平台, 对算法进行了程序上的实现。其中对水印图像的预处理方面由Matlab语言实现, 并将处理后的水印序列保存在一个图像文件中, 以便用C语言进行水印的嵌入。同样, 在水印提取时是将提取出的水印序列保存在一个图像文件中, 然后用Matlab语言对其进行后期处理, 并恢复为水印图像。H.264编解码模型采用的是H.264官方的参考软件JM86版, 实验所用QP=28[6]。

实验所用视频序列为标准视频序列, 如表1所示。

算法在JM代码中实现, 嵌入水印在encode_one_macroblock () 函数中实现, 提取水印在read_one_macroblock () 函数中实现, 水印添加后的码率的变化情况如表2。可以看到水印前后码率的变化并不大, 冗余率 ( (含水印视频码率一原视频码率) /原视频码率) 为2.4%~0.16%, 在保证图像清晰度的条件下可以忽略, 满足码率稳定的要求。

根据表3数据显示, I片的数据量在嵌入水印前后没有变化, B片的数据量在嵌入水印后变化较大, 例如在foreman视频中B片的数据量较大, 嵌入水印后所产生的冗余度在三次实验中也是最大的, 而P片在承担了大量的水印嵌入数据时也不会产生大量的冗余数据, 所以本算法在B片少量出现的情况下可以达到最佳的效果。

4.1 水印不可见性

不可见性[7]主要有主观和客观之分。主观性主要根据个人对视频图像的观察来判定, 效果如表4所示。

用客观数据PSNR[8]作为客观评价的标准, 图9是利用水印图像b经过置乱后嵌入akiyo视频素材, 提取后的PSNR值的对比情况。

从图9可以看出PSNR值的变化非常小, 基本上在0.1以内。说明本算法对图像质量的影响非常小。

水印的提取情况如表5。

4.2 抗噪声攻击

噪声攻击[9]是常见的数字水印攻击方式, 但噪声攻击的对象一般为视频中的亮度或者色彩分量, 本算法的水印嵌入位于控制域, 加入噪声攻击无法对其水印信息造成破坏。

4.3 帧截取攻击

由于H.264视频压缩标准中帧截取的攻击实现非常困难, 本次攻击采用的是在提取水印时放弃第二帧的水印信息提取, 攻击后水印图像的情况如表7。

总结:通过以上几种攻击方式可以看出:控制域水印嵌入对噪声攻击等面向图像的攻击手段不敏感, 但是在帧截取的攻击下对水印图像造成了一定的破坏。

4.4 实时性分析

实时性分析主要是针对编解码的时间是否增加, 对程序的实时性的测试, 本算法主要在帧间预测阶段实现水印嵌入, 对编码的时间影响非常小, 甚至能减少编码时间, 提高编码算法的实时性, 现将实验时各帧编码时所花费的时间进行对比, 就能分析出本算法对编码时间的影响。

表8是嵌入水印前后时间的比较, 可以看出, 由于水印算法跳过了对16×8模式的运算, 在大多数帧的编码时间比原编码程序的时间要短, 这说明了本算法在实时性上是明显的。

5 结束语

数字视频水印有健壮性、透明性、盲检测等基本要求, 如何使水印嵌入算法既有较好的透明性又能抵抗有意或无意的攻击, 是数字视频水印研究的主要课题之一。

探讨的主要是基于H.264标准的鲁棒视频水印技术, 主要工作如下。

1) 本算法对视频图像中的图像数据不做任何修改, 只针对宏块的划分模式做修改, 所以本水印算法对视频图像的质量没有影响, 只需要考虑压缩算法对图像的影响。

2) 本算法的水印提取算法相对简单, 有利于实时实现。

视频水印技术研究涉及众多科学领域, 内容繁多, 成熟实用的水印算法设计仍有较大的难度, 而H.264编解码过程又较为复杂, 更优的算法现仍在研究之中。

参考文献

[1]唐松生, 董颖.数字视频水印技术综述.计算机安全, 2007; (9) :31—33

[2]王向阳, 杨红颖, 赵红.一种新的自适应量化数字音频水印算法.声学技术, 2004;3:117—120

[3]毕厚杰, 新一代视频压缩编码标准H.264/AVC.北京:人民邮电出版社, 2005:84—91

[4]吴锐, 黄剑华, 唐降龙, 等.基于硬度直方图谱象类的文本图像二值化方法, 电子与信息学报, 2009; (10) :2460—2464

[5]冯茂岩, 冯波, 浓春林.基于分块DCT变换和Awod置乱的自适应图像水印算法.计算机应用, 2008; (1) :171—173

[6]余小军, 英玮, 范科峰, 等.一种抚H.264压缩的低比特率视频水印算法.计算机工程, 2008; (2) :171—173

[7]钟伟, 马希俊, 余松煌.一种使用Legendre阵列的图像水印.通信学报, 2001;22 (1) :1—63

[8]郑振东, 王沛, 陈胜.基于运动矢量区域特征的视频水印方案.中国图象图形学报2008, 10 (13) :1926—1929

[9]单承赣, 孙德辉.基于H.264/AVC低比特率视频流的双水印算法.计算机应用, 2007;27 (8) :1922—1925

[10]张琼.基于H.264的视频数字水印算法研究.计算机应用, 2008; (9) :31—34

H.264编码算法 篇2

关键词:H.264;帧间预测;模式选择

中图分类号:TN919.81 文献标识码:A文章编号:1007-9599 (2011) 07-0000-02

Fast Inter Prediction Mode Selection Algorithm Based on H.264

Chen Zhaojun1,2,Wang Yan1,Wang Ying1

(1.Shenyang Ligong University,Shenyang110168,China;2.Xi’an SICONG Co.,Ltd.,Xi’an710043,China)

Abstract:The author studies classical inter mode selection of algorithm of H.264 and proposes a mode selection algorithm which bases on the analysis of the coded macroblock.Do simple cluster analysis of coded macroblocks around the current coding macroblock by taking advantage of correlation between macroblocks and then according to the result of the analysis choose corresponding encoding.As result,reduce the complexity of the algorithm,and improve the efficiency.

Keywords:H.264;Inter prediction;Mode selection

H.264是新一代的高性能编解码标准,它采用基于混合编码结构,在宏块编码时采用率失真优化策略,使编码效率达到最佳效果。H.264采用了包括四分之一像素精度的运动估计,树状运动补偿,多参考帧模式,整数DCT变换,熵编码和去块效应滤波等技术使编码效率大大提高,但是带来了巨大的编码运算复杂度,这样导致了编码计算复杂度成倍增加,编码时间大大增大,所以需要需要通过降低码率,提高视频序列质量。本文运用一种快速帧间预测模式选择算法,在不明显降低视频序列的质量下,提高编码的效率,降低算法的复杂度。

一、H.264帧间模式选择算法算法原理

H.264在进行帧间编码时,分别对帧内模式(9种帧内4×4模式和4种帧内16乘16模式)进行帧内预测和对帧间模式(Skip、16×16、16×8、8×16、8×8、8×4、4×8和4×4)进行运动估计。宏块的子块采用小块的模式时,对运动的细节表述的就越精确,对图像残差进行编码需要的比特数就越小,但是用来描述其它参数(如分割模式、运动矢量和参考帧等)的比特数就会变大,这样就需要再描述图像残差的比特数和描述运动矢量比特数做出平衡,选取综合起来比特数最小的分割模式作为最终编码模式。通过编码控制模型计算各个模式的代价函数,选择代价最小的模式作为最终编码方式。最终模式下不仅图像残差进行编码需要的比特数较少,而且编码模式,运动矢量和参考帧这些信息的编码比特综合一起最小。

二、模式选择算法流程

模式选择算法流程如下:

1.对宏块进行模式16×16、16×8和8×16运动估计,然后计算出RDO;

2.对宏块每个8×8子块(4个)进行模式8×8、8×4、4×8和4×4运动估计,并计算RDO,选择最小的模式作为该子块的模式。依次进行完4个8×8子块之后统计,得出总的RDO;

3.计算Skip模式的RDO;

4.计算帧内模式的RDO;

5.从帧内模式和帧间模式中选择RDO最小的作为该宏块最终编码模式。

三、算法步骤

具体步骤如下:

Step1针对当前宏块周围的4个宏块,对其每一个4×4子块(共64个子块)的运动向量进行分析,找出64个运动矢量中不同的个数m,m<2则执行Step2,如果2≥m<7则执行Step3,如果m≥7,则执行Step4;

Step2选择模式1和Skip模式,跳转到Step5;

Step3选择模式1,模式2,模式3,模式4和Skip模式,跳转到Step5;

Step4对64个运动矢量进行简单聚类分析,根据最终聚类数n进行如下模式选择;

1.如果n<7时,选择Skip模式,模式1,模式2,模式3,模式4;

2.如果7≤n<≡18时,采用模式4,模式5,模式6和模式7;

3.其余情况下选择模式7。

Step5据选定的模式进行运动搜索,然后选取他们的最优结果。

四、实验结果

对CIF(352×288)格式的标准视频序列akiyo,stefan,news,mother,mobile,foreman,container分别在编码器JM10进行编码实验。采用baseline模式,I-P-P-P帧的顺序,参考帧为一帧。JM10帧间只采用16×16、16×8、8×16、8×8、8×4、4×8、4×4和Skip模式,与本文算法进行对比实验。

对图像进行客观评价,统计每个序列在QP为28、32、36、40的亮度PSNR值、P帧码率和P帧编码时间。

表1列出了本算法与JM10的性能比较结果,其中:

(1)

表示本算法相对于JM10亮度PSNR的下降值;

(2)

表示本算法相对于JM10亮度P帧码率的上升值。

表1.本算法与JM10的性能比较结果(△BT即△Bitrate)

QP=28QP=32QP=36QP=40平均值

视频序列△PSNR△BT△PSNR△BT△PSNR△BT△PSNR△BT△PSNR△BT

akiyo0.041.10.0700.060.160.080.350.060.4

stefan0.11.40.110.960.091.120.041.110.091.15

news0.126.80.135.30.094.40.042.050.14.64

mother0.040.890.020.560.040.380.011.060.030.72

mobile0.131.660.111.590.092.140.061.940.11.83

foreman0.082.960.033.750.0320160.011.740.042.65

container0.061.810.072.030.071.250.050.790.061.47

平均值0.082.370.082.030.071.660.041.290.071.84

从表1可以看出,对于不同序列△PSNR平均损失为0.07dB,而p帧码率平均上升为1.84%,基本没有对编码性能造成影响。

表2列出了本算法和JM10的编码时间比较结果,表中列出的数据表示不同的序列相对于JM10的编码时间下降的百分比。

表2.本算法和JM10的编码时间比较结果

视频序列QP=28QP=32QP=36QP=40

akiyo23.8620.1215.857.35

stefan36.7733.8531.0927.37

news30.7625.3521.4416.27

mother35.1129.8720.007.80

mobile45.2644.7644.3443.68

foreman39.1234.6930.3021.78

container43.7134.7727.0120.71

平均值36.3731.9227.1520.71

五、结论

本算法利用宏块之间的相关性,对当前编码宏块周围已编码宏块的运动矢量进行聚类分析,然后进行相应的模式选择。实验结果表明在信噪比平均损失为0.07dB,而码率平均上升为1.84%基础上,图像质量没有发生主观上的变化,编码时间平均下降20.71%-36.37%。明显降低了编码复杂度,提高了编码效率。

参考文献:

[1]郭再荣,喻占武,游韵.H.264帧间块模式选择与快速运动估计算法[J].计算机工程与应用,2006,6:30-32

H.264编码算法 篇3

关键词:运动估计,运动复杂度,PSNR

H.264是ITU-T和ISO/IEC联合制定的视频编码新标准。H.264的优越的性能主要体现在同样的重建图像质量下, 它能提供比MPEG-4, H.263标准更高的压缩性能, 使图像的数据量减少50%。但H.264卓越的编码性能是以提高编码复杂度为代价。在编码过程中消耗时间主要集中在运动估计部分, 因此, 研究快速运动估计算法成为提高编码速度的一个重要途径。

1 运动估计技术

视频编码中, 将图像序列的每一帧分成多个大小为M*N的宏块, 再对各块独立进行编码, 运动估计就是在帧间预测时, 找到当前帧的像素是从上一帧图像的什么位置移动过来的。

块匹配法是目前最常用的运动估计方法, 主要思想是对当前每一帧中的每一块根据一定的匹配准则在参考帧某一给定搜索范围内找出与当前块最相似的块, 即匹配块。由匹配块与当前块的相对位置算出运动位移, 即运动矢量。

块匹配准则, 是影响图像质量的一个重要因素。本文采用RD代价函数J (m, λMOTION) 。

是两个块的绝对误差和, s, c分别表示原始图像和参考图像, B1, B2为块尺寸。MV_COST (m, MOTION) MOTION.R (m p) 表示用于编码运动矢量的比特数, m (m x, my) T, p (px, py) T分别是实际矢量和预测矢量, λMOTION为拉格朗日乘数因子, R (m-p) 为运动信息。J (m, λMOTION) 兼顾了图像质量和编码速率这两个方面的要求, 将这两个要求的折中而不是其他匹配准则仅顾及图像内容的匹配程度, 这有助于提高编码的整体性能。

2 H.264参考模型运动估计优化方案

典型的快速运动搜索方法主要有:三步搜索算法、新三步法、六边形搜索法、钻石形搜索法等等。这些快速搜索算法都以性能不同程度的下降来换取处理速度的大幅提高。但搜索范围小、运动平缓的时候, 效果较好。

而现在预测运动估计算法在视频编码中已经越来越得到广泛的应用。这类算法主要是以对几个可能性较大的矢量来预测最佳运动矢量以及可提前终止搜索来提高效率。

2.1 UMHexagon S算法

UMHexagon S算法包含四种搜索模式:即不对称的十字交叉搜索;非均匀多层次六边形格点搜索;六边形搜索;小钻石搜索。算法要点如下:

2.1.1 预测矢量

该算法集定义了一个矢量集, 分别是中值矢量, 上层模式的运动矢量和时间域邻近参考帧的运动矢量。

H264采用的分块模式如图1所示, 各模式之间的上下层关系如下:

2.1.2 搜索路径

采用非对称十字搜索, 步骤2中水平和垂直搜索范围为W和W/2, 两个搜索点的距离为2。该步骤得到的最佳矢量点可精确作为下一步的开始搜索点。

2.2 基于速度的三步搜索算法

2.2.1 基于速度的三步搜索算法的提出

通过上面的研究, 发现如果先根据图像的相关性对搜索块的运动范围提前加以判断并进行更优针对性的搜索则可以减少进一步计算冗余, 提高搜索效率。在这个基础上提出了基于速度的搜索算法, 这种算法增加了阈值判决机制, 即通过设定帧序列中物体的运动速度阈值, 将运动块分为微量运动块、中等运动块、大运动块, 分别采用菱形搜索算法、六边形搜索算法、UMHexagon S搜索算法, 使得在保持编码器的性能的前提下提高编码速度。

2.2.2 基于速度的搜索算法的过程

Step 0:计算可能性较大的预测矢量点和零矢量点;

Step1:若J (m, λMOTION) 最小点为零矢量点, 则以菱形搜索得到最佳运动矢量;

Step2:若不满足step1, 由阈值判定为中等运动块, 则以六边形和菱形搜索相结合来检测最佳运动矢量;

Step3:若不满足step2, 由阈值判定为大运动块, 则以UMHexagon S算法结合中等运动算法一起检测最佳运动。

2.2.3 算法特点分析

搜索点数的多少是评价算法运算复杂度的一个重要指标。图2所示的UMHexagon S算法的主要部分使用了六边形搜索算法, 其中非均匀多层次六边形格点搜索点数为N1=16*4=64, 扩展的六边形格点的搜索点数为N2=7+3*n+4。而菱形格点的搜索点数N3=9+n (3, 5) +4。可见相比UMHexagon S算法菱形搜索的搜索点数较少。

3 实验结果比较及分析

首先在VC6.0的平台上将改进算法用C语言实现, 将其集成到H.264标准测试软件JM10.1中。程序配置如下:编码帧结构为IPPP…, 以30帧为一个帧组, 总帧数为100帧。搜索范围为 (-16, 16) , 量化值为28。试验用Carphone序列属于低运动复杂度的序列, Foreman序列和Coast序列分别属于中和高运动复杂度的序列。实验统计数据见表1。

(1) PSNR是评价图像的客观标准, 本算法在PSNR方面相对于全搜索法降低约0.04d B左右, 这对于人肉眼观察, 可以忽略;而在编码速度方面则各类视频序列对FS算法和UMHexagon S算法平均节省分别为83.6%和40.5%左右。可以看出本算法可以在图像质量基本不变的前提下, 大大提高了编码的时间。

(2) 本算法对于序列细节变化的剧烈程度比较敏感。而且可以从表中看出, 本算法对各类序列的编码速度都有较大提高, 适应性很好。

(3) 其中Foreman序列, UMHexagon S算法的PSNR比全搜索法的高出0.02d B左右, 这是由匹配准则所决定的, 该准则是编码速率和图像匹配程度程度的综合反映, 但是PSNR反映的是图像匹配度, 所以全搜索法的最好但是可以看出PSNR稍差了一些。

4 结论

H264在有效提高编码效率的同时, 使运动估计模块的计算复杂度随之成块增加, 极大增加了H264的计算量, 本文对H264中运动估计UMHexagon S算法进行了分析, 然后在此基础上提出了基于块运动范围分类搜索的运动估计算法。并且通过几个典型序列的实验可知, 本算法对不同运动复杂度的视频序列在保持图像恢复质量基本不变的前提下都能具有较高程度的编码速度提高, 具有良好的实用性和适应性。

参考文献

[1]白世军, 吴晓军, 卢文涛.基于H.264视频编码的运动估计算法优化[J].电子学报, 2009, 37:1-6.

[2]毕厚杰.新一代视频压缩编码标准——H.264/AVC[S].北京:人民邮电出版社, 2005.

H.264编码算法 篇4

在大多数的自然视频序列中都存在较大面积的时域或颜色一致的运动区域, 这些区域中的宏块不存在表观运协, 通常称为静止宏块。静止宏块采用较大块尺寸的运动补偿即可获得准确的预测, 省略对较小块尺寸编码模式的测试并不影响编码性能。此外, 若宏块处于运动一致性强的物体内部区域, 采用一个运动矢量可以精确地描述其运动, 变换系数经量化后可全部为零, 此类宏块称为DCT[1]系数为零块。DCT系数为零块的运动补偿预测较精确, 预测残差能量较小, 采用更小块尺寸的编码模式、尝试更多的参考帧并不会进一步提高编码性能。运动物体边缘常引起遮挡和背景显露, 对于包含此类像素的宏块, 采用较多参考帧可能获得更好的预测效果。因此, 本文针对图像序列中这两个特征, 提出了在保证静止宏块的有效检测的前提下, 如何根据视频序列的统计特征, 设计快速的编码模式选择算法, 以提高编码的速率。

1 基于图像差值的编码算法原理

图像序列中静止块的寻找原则是利用相邻帧间的差值绝对值来判别。比如, 在运动物体边缘或纹理复杂的运动物体内部区域, 差值较大。在静止区域颜色一致性强的运动区域, 图像序列中静止块的寻找原则是利用相邻帧间的差值绝对值来判别。比如, 在运动物体边缘或纹理复杂的运动物体内部区域, 差值较大。在静止区域或颜色一致性强的运动区域, 差值较小。目前, 比较常见的方法有计算宏块内绝对差值和, 然后与预设的阈值[2]相比较以检测此类宏块, 但是该阈值往往是基于统计规律的, 难以准确地确定, 判别的可靠性不够高。还有通过比较宏块的平均绝对差值与整帧的平均绝对差值检测静止宏块, 避免了阈值选择问题。显然, 当宏块跨越运动物体与静止背景的便捷时, 仅有小部分像素入4×4小块处差值较大, 上述方法采用整个宏块内绝对差值的累加和很容易误检测为静止的。为了解决上述问题, 本文根据宏块内差值较大的像素的数目检测此类宏块。

假设当前与前一帧 (原始图像而不是重建图像]在像素点 (x, y) 处的灰度值分别为C (x, y) 和P (x, y) , 则绝对差值阈值化后所得二值图为:

其中, T-p为阈值, M (x, y) 为1 表示此像未属于运动区域。阈值的选择需要在编码效率与算法的运算速度之间做适当的折衷, 通过实验确定阈值为11 。在二值图内, 统计宏块内活动像表点的总数, 若总教不大于阈值T-SB , 则判断为静止宏块。在避免噪声影响的同时, 能检测出运动物体边缘引起的小面积像素块, 阈值T-SB 选取为8 (最小块4×4 的一半) 比较合理。

2 快速选择算法分析

以Foreman视频序列中的图像帧为例, 采用上述方法检测的静止宏块[3] (图中全黑色的宏块] 如图1所示, 图2 为基于率失真优化[4]的全模式所得的结果, 叠加在图像上的线框代表了选择的编码模式对应的块分裂方式。可见, 尽管由千摄像机晃动引起背景区域的轻微运动, 仍然有大量的静止宏块。此外, 在运动明显但颜色一致的帽子内部区域, 宏块为静止的。对于静止宏块, 大多采用了大块尺寸的编玛漠式。

图1给出了Foreman 序列中一帧的位移差值图像, 采用了16 ×16 块运动补偿, 灰度中值代表零值, 亮灰色表示正值, 深灰色表示负值。在运动物体头部、 眼睛及左肩的边缘, 位移差值较大而静止宏块或运动一致性好的区域, 位移差值较小;当宏块残差值量化后所得系数全为零时, 不能进一步降低编码所需的比特数, 采用更小块尺寸的编码模式或搜索更多的参考帧仅能稍微地增强图像质量。

在图2 中叠加的“×”标记了DCT 系数为零块, 其余宏块对残差的绝对值大于的像素用白色标记, 大致反映了运动复杂的边缘。根据基于率失真优化的全模式选择算法所得的结果, 叠加在位移差值图像上的线框代表了选择的编码模式对应的块分裂方式。可见, 16×16块运动补偿后的DCT 系数为零块极少采用子宏块级编码模式, 对于具有复杂纹理和运动细节的区域, 测试较小尺寸的编码模式有益于提高编码效率。

统计结果表明:第一、平均有47.3%的宏块为非活动的, 对于运动程度较小的图像序列 (News和Silent) 则高达80%左右, 对于运动剧烈, 图像非常复杂的视频序列 (Stefan和Tempete) 与也将近25%。因此, 充分利用静止宏块的特点可以有效地降低计算量。第二、无论序列的内容特征如何, 静止宏块中选择大块尺寸模式为最佳编码模式的概率很高, 不低于90%, 因此可以省略对其他小块尺寸模式的测试。第三、采用大块尺寸16×16运动补偿后为DCT系数全零块, 且最佳参考帧号Ref=0的静止宏块中, 平均有91.7%的视频编码时不需要测试其他模式。第四、对于运动比较复杂或者纹理细节较多的视频序列, 仅有75%左右的静止宏块选择前一帧为最佳参考帧, 因此仅搜索前一帧将不能获得满意的率失真性能。

因此, 利用上述编码模式选择的统计特性, 可以在对编码性能影响较小的前提下, 减少需要测试的候选模式数目。但是如果要省略对提高率失真性能影响很小的参考帧的搜索, 则需要进一步利用其他信息。对静止宏块, 尽管仅搜索前一帧并不充分, 利用对不同块尺寸运动补偿预测有益的参考帧范围的统计结果, 也可以减少参考帧的搜索数目。表1给出了对于静止宏块或DCT值为零的块, 最佳编码模式为P16×8或P8×16时, 最佳参考帧号不大于16×16模式的最佳参考帧号的概率记为:

P1=Prob (Ref_16×16>=max{Ref_16×8, Ref_8×16}) , 从表1中可得, 该值平均可达88%。另外, 实验中也测试了8×4、4×8和4×4块尺寸类型的最佳参考帧号不大于8×8块尺寸类型的最佳参考帧号的概率

P2=Prob (Ref_8×8=max{Ref_8×4, Ref_4×8, Ref_4×4}) , 该值平均值为84%。因此, 根据此分析结果, 可以限制运动估计过程中需要搜索的参考帧的范围。

此外, 对帧内编码模式的统计数据表明P帧宏块中采用帧内编码模式的比例最大约为4%, 平均只有1.5%, 如果最佳帧间模式下的编码系数全为零, 最终选取帧内模式的概率不到0.5%, 因此可以忽略帧内预测及模式选择过程。

3 算祛流程及性能分析

根据本文对视频测试序列的分析结果, 本文提出了一种编码模式[5]快速算法, 算法的主要步骤如下:

(1) 使用静止宏块检测算法对当前编码帧内的宏块分类。

(2) 在所有可选的参考帧内进行块尺寸的运动估计.如果当前宏块为静止的, 跳特第三步, 否则跳转至第五步。

(3) 如果16 × 16 的块运动补偿后为DCT 系数全零块, 且当前最佳参考帧Ref 也为零, 计算SKIP 与16 × 16 模式的率失真复杂度, 选择SKIP 与16 × 16 模式中率失真复杂度最小的为最佳编码模式, 然后转第二步对下一个宏块编码.否则, 转第四步。

(4) 在参考帧号Ref 不大于Ref_16 × 16 的参考帧内, 进行16 × 8 与8 × 16 块尺寸的基于率失真优化的运动估计.计算SKIP 、16 × 16 、16 × 8 、8 × 16 模式下的率失真复杂度, 选取率失真复杂度最小的模式为最佳编码模式, 然后转第二步对下一个宏块编码。

(5) 进行16 × 8 与8 × 16 块尺寸的基于率失真优化的运动估计:若块运动补偿后为DCT 系数余零的块, 仅选择参考帧号Ref 不大于Ref_16 × 16 的参考帧.否则, 选择所有可用的参考帧进行运动估计。

(6) 在所有可用参考帧内进行8 × 8 块尺寸的运动估计.进行8 × 4 、4 × 8 与4 × 4 块尺寸的基于率失真优化的运动估计, 仅选择Ref ≤=Ref_8 × 8 的参考帧.对所有帧间编码[6]模式, 计算率失真复杂度, 并选择最佳帧间编码模式, 若最佳帧间模式下系数全为零, 跳过帧内预测及帧内模式选择过程否则, 进行帧内预测与帧内模式选择, 选取使得率失真复杂度最小的模式为最佳编码模式, 转第二步编码下一个宏块。为测试所提算法的性能, 本文实现了编码模式及参考帧快速选择算法并进行测试。

实验环境如下:采用率失真优化、快速运动估计, 运动估计搜索范围为16 像素, 1/4 像素精度, 参考帧数为5 , 首帧为I帧 (帧内编码) , 其余各帧都为P帧。在量化参数为28 、32 、36 以及40 时, 对典型的视频序列进行编码测试, 以测试不同量化参数下所提算法对编码效率的影响。选择的测试序列具有不同程度的纹理和运动复杂度, 帧率为30 帧/秒, 各100 帧, 充分测试算法的性能.以△ PSNR 代表新算法引起的重建亮度信号的峰值信噪比的提高, 主要用于衡量重建的图像质量, △bit_rate代表采用新算法后所引起的比特率的增加, 主要反映压缩效率的差异, Coding_speed代表采用新算法后运算速度的差异, 表2是对不同测试序列下的测试结果。

从测试中可知, 改进后的算法信噪比上变化不大, 说明采用新算法构建的图像质量并未有太大的下降, 同时在比特率上同样也是保持了较高的比率, 但是在编码速度上, 平均提高了一倍以上, 对于中低复杂度的视频序列甚至编码速度提高了2倍以上。

4 总结

本文提出基于图像差值的编码模式快速选择算法, 相对与全模式的编码算法, 能够较大地提高编码速度, 同时在编码质量和压缩率上保持与全模式相当的性能。但是算法的性能受视频序列内容的影响较大, 对纹理和运动复杂度较高的序列编码复杂度仍然较高, 对编码速度的提高不够明显, 因此这也是本文所提算法的不足之处。

摘要:分析了现有的基于率失真优化的图像帧编码模式选择方法, 指出了该算法运算复杂度高的原因。提出了一种基于图像差值的快速编码算法, 详细介绍了该算法的提出思想和可行性分析。给出了基于该算去编码模式的具体选择方法, 详细介绍了该算法的提出思想和可行性分析。给出了基于该算法编码模式的具体选择方法, 以及其参考帧的选取依据。

关键词:编码模式,H.264,率失真优化,快速算法,差值

参考文献

[1]Lee S Y, Ham Y K, dPark R H.Recognition of human front faces using knowledge, based feature extractionand neuro, fuzzy algorithm.Pattern Recognition, 1996;299 (11) :1863—1876

[2]Turk M, Pentland M.Eigen facesfor Recognition.Journal of Cognitive-NeuroScience, 1991;3 (1) :71—79

[3]Cottrell G W, Fleming M.C.Ategorization of faces using unsu, per-visedFeatureExtraction.In:Proceeding Int Neural Networks Conf, Par-is, 1990; (6) :65—70

[4]井上诚喜.C语言实用数字图像处理1, 白玉林, 译.北京:科学出版社, 2003

[5]Gonzalez C.数字图像处理 (第二版) 。阮秋琦, 等译.北京:电子工业出版社, 2003

H.264编码算法 篇5

提高H.264[1,2]帧间预测运动估计算法效率的主要技术可以归纳为3类:起始搜索点的选择,更高效的块匹配准则,减少搜索点数的搜索策略。以第3类效率最高、使用最多,较典型的算法有交叉法(CSA)[3]、菱形搜索法(DS)[4]、六边形搜索法(HEXBS)以及非对称十字形多六边形搜索法(UMHexagonS)[5]等。这些算法考虑到相邻帧之间的相关性,对最有可能出现匹配位置的区域进行优先搜索,如CSA,DS,HEXBS优先搜索预测中心;UMHexagonS优先搜索中心和水平方向的匹配点。然后根据局部收敛原理,搜索全局最优匹配。

笔者通过研究任意点关系来判断附近点阵是否存在最优匹配和次最优匹配点,并在此基础上提出了新的快速搜索算法。实验表明,该算法在没有视频运动估计模型先验概率的基础上依然有较好的峰值信噪比(PSNR)和比JM提供的快速算法更快的搜索效率。

2 搜索点匹配的方法

每个分割运动矢量(MV)的编码需要相当数目的比特。为减少传输比特数,可利用邻近分割较强的相关性,MV可由邻近已编码分割的MV预测而得。预测矢量差异基于已计算的MV和MVD(预测与当前的差异)。同时传输运动补偿残差也将需要大量的比特[6]。检验搜索算法优劣有3个主要指标:运算时间、PSNR和编码比特数。H.264采用MV编码比特和运动残差求和计算搜索区域各点的编码消耗。由于分割MV编码计算相对简单,H.264对其优先计算。如果某点MV编码消耗大于已经计算的匹配点编码总消耗,该点不是匹配点,就不用进行后续计算。

为便于分析,以4×4大小的待编码图像为例,只考虑各像素点亮度,而忽略色度值,并假定待编码宏块/子宏块图像水平方向灰度变化最慢。某搜索点残差值用SAD(Sum of Absolute Difference)方式编码。匹配点的SAD比非匹配点的大,将消耗更多编码比特。设Bn(x,y)为第n帧图像中的一个待编码宏块,定义Bn(x,y)在4×4帧间编码模式下的SAD为

式中:Y和分别为当前和参考图像的灰度值,(u,v)为宏块的运动矢量。

2.1 待编码宏块纹理方向计算

定义待编码图像水平方向纹理特征值为

式中:B为像素灰度差数目,对4×4水平方向,值为12,竖直和对角方向可类似分析,得到4个方向的纹理特征值。取最小值判断待编码图像纹理方向。如只有一个方向具有最小值,则认为其为该方向纹理。如有两个以上方向有相同最小值,则认为其为不确定方向纹理。4×8,8×4,8×8,16×8,8×16,16×16等分割方式可用类似方法讨论。这样得到5种可能的纹理类型。待编码图像为方向纹理的概率大,为不确定方向纹理的概率小。

如果有参考图像区域的帧内预测模式选择类型数据组,可以设计待编码宏块的加速算法。

2.2 匹配块附近纹理特征

对于4×4待编码图像,假定某点SAD值已预测,有

式(3)为其左侧邻近点的SAD值。比较两值大小,若(x,y)点的SAD大于(x-1,y)点的SAD,则有

不妨设公式(2)值为0,代入公式(4)。由假定,该4×4大小待编码图像为水平方向纹理,则水平方向有最小的TSAD值。在H.264中多细节区域采用小尺寸分割,平坦区域有大分割尺寸。4个方向的TSAD值总和应在均值附近正态分布。水平方向TSAD值最小,则一定有水平方向像素灰度值近似相等。

较小,所以该点的SAD值须进行计算。对于点(u+1,v),则一定有较大SAD值。对于(u+2,v),(u-3,v),(u+3,v)点可同样分析。

继续分析(u,v-1),(u,v+1),若(u,v)SAD值较小,由于待匹配图像为水平方向纹理,则(u,v-1),(u,v+1)一定有较大SAD。对于(u-1,v-1),(u+1,v-1),(u-1,v+1),(u+1,v-1)分析类似。

2.3 该方法特点

用某点和其附近点SAD关系在已知待编码图像的TSAD关系条件下,可以估计附近点SAD较小值点阵区域。由于MV编码对于邻近点变化连续,SAD变化对于小区域运动估计是主要因素,可以用运动估计编码总比特代替SAD比特作为判决条件。

该方法具有一定的误差,但对于快速搜索算法根据局部收敛的原理,搜索全局最优匹配的方法,可以设计出具有较小误差的快速搜索算法。

3 新的搜索算法———CMFS

运动估计时间的长短与搜索点阵的数目和初始搜索位置有关。UMHexagonS的搜索方法是按运动概率模型,对水平运动多搜索,安排了一个非对称初始搜索阵列。然后在最优匹配点附近做2次六边形和1次菱形搜索。由于真实场景水平运动较多,垂直运动少,该初始搜索阵列显然对真实场景有较好的匹配。但对于动画及垂直运动较多的场景就很难搜索到全局最优的匹配点。

3.1 CMFS局部搜索区域点阵

由以上分析,可得到对当前最优匹配位置附近可能出现全局最优匹配位置的局部搜索区域点阵,如图1。

3.2 速度最优的CMFS算法初始点阵

由于初始搜索阵列与实际视频特性有关,需要视频序列的先验概率模型。这里暂时给出基于速度最优的CMFS。根据速度最优原则,各局部搜索区域点阵拼接应能覆盖整个搜索区域。这样得到了速度最优的初始搜索点阵。对于不同的纹理类型有不同的初始点阵。对于水平方向纹理的待编码宏块,搜索范围为16,搜索区域为33×33的参考图像,搜索初始点阵如图2所示。

黑点为中央25个优先搜索点,对于多数视频序列,中央区域出现匹配点的概率很大。所以必须首先搜索。菱形位置为剩余的初始点阵,并且用图1的局部搜索点阵代替菱形位置可以覆盖绝大部分搜索区域。对于不能覆盖覆盖的少量边缘区域的点可以用全搜索处理,也可以不考虑。因为这些位置出现匹配点的概率太低,而且很多针对搜索范围的优化算法减少的正是边缘搜索点数。对于其他3个方向的初始点阵可同理得到。为得到更好的估计效果,可增加更多的初始搜索点。初始点的选取应根据视频序列先验知识得到。

3.3 CMFS的搜索策略

根据初始搜索位置的编码比特情况可以推测局部搜索区域点阵范围的其他位置的编码比特情况,从而得出这个局部范围的编码比特具有相关性。而目前大部分快速搜索算法则是根据参考图像编码比特局部相关的性质进行搜索的。整个CMFS算法步骤概括如下:

1)进行待编码图像纹理方向判断。判断方法可以由参考图像帧内预测模式选择得到,也可以直接用TSAD计算得到最小值进行判断。这大约为4个搜索点的计算量。然后进入步骤2)。

2)根据判断结果选择相应方向的初始搜索点阵。然后进入步骤2)。如果判断结果为不确定方向纹理,则进行全搜索算法或是利用其他的快速搜索算法。出现这种可能的概率非常小,接近零,进入步骤5)。

3)计算初始点阵各点的编码比特。得到最小的3个编码比特位置。进入步骤4)。

4)将相应的局部搜索区域点阵代替这3个最小编码比特位置,对这些位置进行全搜索。得到的最小编码比特位置即为匹配点,相应的MV为对应的运动矢量。进入步骤5)。

5)对不确定方向纹理进行全搜索算法或是利用其他的快速搜索算法。对方向纹理搜索的边缘剩余进行全搜索算法或是利用其他的快速搜索算法。

该算法是自适应的搜索算法,如果具有先验知识还可以进行相应的优化。

4 实验结果

实验采用JVT的JM14.0作为实验平台,主要的编码设置如下:帧格式为4∶2∶0,图像序列以30 f/s(帧/秒)的速度进行编码,量化步长QP值分别为28,28和30,对carphone,coastguard,foreman,grandma,highway,motherdaughter,salesman,silent,suzie共9个QCIF图像序列均用9帧图像进行测试。选取全搜索算法(Full),JM自带快速搜索算法(Fast)与CMFS进行性能对比。CMFS用TSAD判断纹理方向,初始搜索阵列为速度最优阵列,对不确定方向纹理进行全搜索,对搜索剩余位置不予搜索,得到如表1所示数据。

从表1见:CMFS速度优势明显,对9帧图像(其中1帧为I帧)编码效率比全搜索快近2倍,比快速搜索算法快1倍。对于carphone,salesman,suzie序列,CMFS的PSNR值略有降低,编码比特值略有提高。说明参考图像最优匹配点附近有灰度跳变的视频类型用速度最优的初始搜索阵列会有少量的比特率提高和质量下降。应尽量避免待编码宏块纹理数据集中于宏块边缘,根据跳变先验特性增加初始搜索点。对于coastguard,foreman,grandma,mother-daughter,silent序列,CMFS的PSNR值未降低,编码比特也无明显变化。这表明CMFS算法的普适性很好。对特定视频还可设计不同的CMFS算法。

5 结束语

笔者在研究H.264搜索算法的基础上,提出了基于待编码图像纹理分析搜索点是否匹配的方法,进而给出了一种新的快速搜索方法,并对其中速度最优的一种普适算法特例进行了实验研究。实验结果表明,该算法在保证编码质量没有明显下降的同时,运动估计速度有了显著提高;在处理中,算法跳变少,易于硬件实现,是一种综合性能优良的快速运动估计算法。而且该算法具有自适应性,同时能够根据不同视频特性设计不同的CMFS算法,利于商业化应用。

摘要:为减小H.264帧间预测运动估计算法复杂度,提出了一种基于待编码宏块纹理特性以排除部分搜索位置的方法。该方法可以大大减少待搜索位置的数目,缩短帧间预测时间。同时给出了一种基于宏块纹理的自适应快速搜索算法。实验表明,新算法在重建图像质量没有明显下降的前提下,编码速度有所提高。

关键词:H.264标准,视频编码,运动估计,纹理特性,CMFS

参考文献

[1]ITU-T Recommend H.264/ISO/IEC11496-10.Draft ITU-T Rec-ommendation and FinalDraft International Standard of Joint Video Specification(Advanced Video Coding)[S].2003.

[2]WIEGAND T.Overview of the H.264 video coding standard[J].IEEE Trans.Circuits and Systems for Video Technology,2003,13(7):1-19.

[3]GHANBARI M.The cross-search algorithm for motion estimation[J].IEEE Trans.Communication,1990,38(7):950-953.

[4]ZHU Shan,MA Kai-kuang.A new diamond search algorithm for fast block matching motion estimation[J].IEEE Trans.Image Pro-cessing,2000,9(2):287-290.

[5]CHEN Zhi-bo,ZHOU Peng,HE Yun.Fast integer pel and frac-tional pel motion estimation for JVT[C]//JVT-F017:Joint Video Team(JVT)of ISO/IEC MPEG&ITU-T VCEG6th Meeting,Awaji,Island,JP:JVT,2002.

H.264编码算法 篇6

通过大量H.264算法的试验, 人们发现运动估计占整个编码算法全部计算量的60%~80%, 因此研究一种搜索速度快、精度高, 同时便于硬件实现的运动估计搜索算法成为视频编码领域的重点和难点。块匹配算法是最常用的运动估计算法, 算法简洁, 便于硬件实现。通过研究已有的成熟的标准算法, 我们发现运动估计不能仅仅使用某种单一的算法, 需要我们根据优缺点合理组合各种标准算法, 只有这样才能达到更好的编码性能。因此, 本文提出了以六边形搜索为主, 非对称十字搜索算法、全搜索算法和菱形搜索算法配合的一种混合搜索新算法。同时给出了一种并行流水结构在FPGA上实现该算法。

2算法描述

匹配误差准则采用绝对误差和:

本文设计的混合六边形搜索算法示意图如图1所示。步骤如下:

2.1通过运动矢量预测, 首先确定搜索的起始位置。要依据H.264标准的算法进行预测, 然后得到一个起始搜索矢量的集合, 从该集合中选出对应费用函数最小的运动矢量作为起始搜索点。

2.2研究发现, 不同方向上的运动强度是不同的, 水平方向大于垂直方向, 所以通过非对称的十字搜索, 我们可以初步搜索一下最佳运动矢量。以搜索起点为中心, 搜索范围上垂直方向是水平方向的一半, 长度2是搜索点之间的步长, 这样一个非对称十字形就产生了。在此基础上, 找到当前的最佳匹配点, 下一步的搜索中心就是该点。

2.3以正方形方式全搜索当前中心周围3×3的区域, 找到当前的最佳匹配点, 下一步的搜索中心就是该点。

2.4对更大的区域进行搜索, 采用六边形搜索, 该搜索相对于DS算法速度快且准。

2.5以搜索最佳匹配点为目的, 在半径为1的范围内采用小菱形搜索, 搜索到位置点后, 输出该点的SAD值及其坐标。

3硬件结构与FPGA实现

并行结构组成部分有 (1) 四种搜索算法实现器, 主要组成部分有SAD计算器、比较器、计算器和延时器 (2) 两个片上RAM组 (3) 一个控制器, 主要由地址产生器组成。本设计同时用到寄存器、片内RAM和片外SDRAM作为数据存储空间, 保证数据存取量和存取速度。一个片上RAM组存当前块像素数据, 另一个存参考块像素数据, 这是因为片外SDRAM存取速度慢, 达不到运动预测对数据的快速存取要求。一个RAM组由4个片内RAM构成, 从而可以同时读取所有子区域的像素值。结构如图2所示。基于以上设计, 该系统能达到高效实时的性能要求。

设计构架中的四种搜索算法分别对应其处理当前块和参考块。每种算法包含了不同个数的SAD计算器与相对应的比较器、延时器、计数器, 都对应两个片内大小为16×16的RAM和大小为32×32的当前帧。32×32的当前帧由四个宏块组成, 计算一个宏块内点的运动矢量绰绰有余。本设计每搜一步都会重新确定一次搜索地址, 然后再搜下一步。每组片内RAM每次存储搜索数据时, 都采用流水的方式进行。每完成一个算法, 就把坐标点传送给地址产生器, 计算出下一个点搜索所需的数据起始位置, 运动估计的搜索步骤通过起到重要作用的控制器控制。

4仿真验证

本设计中FPGA芯片选用Xilinx公司的Spartan3E系列中的XC3S500E, 系统门数是50万门。采用硬件描述语言Verilog HDL编写该硬件结构, 在开发软件ISE 13.4上进行综合实现与仿真验证。综合结果显示该设计占用的片内block RAM资源为1678 bytes, 同时占用逻辑门数36.9k。将本文的设计与参考文献[4]中的TSS算法, 文献[5]中FS的算法结构进行性能对比, 如表1所示。由表可知, 该设计平均需要1189个时钟周期, 平均到一种搜索算法, 所需要的时钟周期大约只有297个。所以, 每个宏块工作时时钟周期处理速度比TSS和FS算法都要快。本设计的逻辑门资源的占有率跟其他文献相比较, 保持了很低的状态。

TSS-三步搜索算法, FS-全搜索算法。

结语

本文介绍了基于H.264编解码标准的一种运动估计混合搜索算法及其FPGA实现方案, 该设计提高了搜索速度, 保持了较高的搜索精度, 同时逻辑门资源的占用率也很低, 有较高的实用价值。

参考文献

[1]毕厚杰.新一代视频压缩编码标准—H.264/AVC[M].北京:人民邮电出版社, 2005.

[2]吴水明.基于H.264编解码的算法优化研究及FPGA的硬件实现[D].湖南:湖南大学, 2007.

[3]田耘, 徐文波, 胡彬, 等.Xilinx ISE Design Suite 10.x FPGA开发指南-逻辑设计篇[M].北京:人民邮电出版社, 2008.

H.264编码算法 篇7

在当今信息化时代的浪潮中, 多媒体技术和通信技术的融合形成了多媒体通信技术, 数字视频处理以及传输已经成为多媒体领域的一个主要方面被广泛地研究。如进行实时视频监控, 视频电视会议, 视频聊天等, 需要进行数字视频的处理和传输。但是, 一直以来由于视频数据量大, 视频传输技术的应用受到很大制约。因此必须根据视频传输的特点采用合适的编码压缩算法, 才能达到较好的传输效果。

2003年3月, ITU-T/ISO[1]正式公布了H.264[2]视频压缩标准, 由于其相比以往标准的出色性能被人们称为新一代视频编码标准。具体讲, 与H.263或MPEG-4相比, 在同样质量下, 其码率能降低一半左右;或者说在同样码率下, 其信噪比明显提高。

H.264编码的实现有多种方法。在嵌入式系统中实现H.264编码有无可比拟的优越性。采用嵌入式系统代替模拟的和PC机系统。嵌入式系统体积小巧, 功耗较低, 运行稳定且性能强劲, 能够满足各种应用场合和应用领域的需要。目前的嵌入式视频系统中大都采用多媒体DSP处理器作为主要的视频处理器, 其所具有的图像处理性能是以往系统所无法企及的。

在上述视频技术发展的背景下, 本文将对视频系统中的核心技术——视频压缩编码技术进行研究, 基于TI公司最新的媒体处理器Davinci DSP, 对H.264视频编码进行优化。

2、测试平台和移植

这里我们选用开源代码x.264作为研究的代码, 原始的代码并不能直接在PC和DSP环境下运行, 需要进行移植。而如果一开始就移植在DSP平台上, 因为代码未经过优化, 视频编码的速度会非常的缓慢, 调试, 察看运行结果都不方便。所以先将原始代码移植到PC环境下的C语言平台上, 并且在C语言平台上进行C语言级别的优化, 然后移植到达芬奇DM6446的平台环境下, 再在该环境下进行系统级和汇编语言级别的优化。

首先原始代码中不同文件夹里有重名文件, 为了以后可以方便的移植到DSP平台, 将这些重名文件重新命名。

其次将其移植到VS2008平台上。x.264编码器适合在多个平台运行, 针对这些平台, 编码器的开发者对x.264分别进行了优化, 因此, x.264编码程序中包含了几个平台的汇编程序, 这些不同平台的汇编指令在VS2008上是不能运行的, 因此我的首要任务是把x.264编码程序中汇编指令从原来程序中剔除。

然后去掉代码中和MMX (Multimedia eXtensions) 、SSE (MMS的超级指令) 有关的语句。这些指令在DSP平台上并不需要。

最后去掉预编译头文件, 添加HAVE_STDINI_H和__X264__预处理器定义, 设置头文件和其他包含目录。

3、C语言级别优化

经过移植, 代码就可以在VS2008平台上进行运行了。但是未经优化, 即便在PC机上, 其运行速度还是较慢, 达不到要求。C语言优化主要是对代码算法改进, 调整代码结构等。下面我们从几个方面对其进行C语言优化。

3.1 代码精简

由于本文只针对x.264的基本档次级别, 所以只有I帧和P帧两种帧类型, 因此可以将和B帧有关的代码删除。

在帧内预测和帧间预测中, x.264是采用SATD作为判断依据, 由于SATD是残差进行哈达玛变换后所有元素的绝对值相加, 这样做有利于控制码率, 但是会导致计算量的增加;这里采用SAD作为判断依据, SAD是所有元素的绝对值相加, 中间减少了哈达玛变换。减少了运算量, 对最后视频编码效果也不会带来太大的影响。

率失真函数的作用主要是用来控制码率的大小, 在预测过程中, 采用率失真函数的话, 就必须在某一模式下计算残差值在某一个标准下的值, 然后再计算在这种模式下, 所耗费的代价值, 两者相加, 并且取其中结果最优的。而如果不采用率失真函数的话, 我们仅仅只在某一个模式下计算残差值在某一个标准下的值, 而不需要计算在这种模式下所需要的代价值。由于预测过程中经常需要进行多种模式的预测, 调用的次数比较多, 计算量很大, 所以, 我们可以剔除率失真函数。由于率失真函数得到的是最优解, 所以剔除率失真函数后会导致码率的增加, 但是图像的质量并没有下降很多。考虑到可以节省大量的计算量, 所以还是值得的。

在熵编码时, 虽然CABAC的性能比CAVLC要好, 但是CABAC的计算复杂度要比CAVLC要大, 对于基本档次来说, CAVLC已经能满足基本要求, 因此我们采用CAVLC。

其次, 尽量地将那些相对独立的程序模块化, 并调整程序的结构, 调整程序功能模块的实现顺序, 删除多余、重复的代码。

3.2 循环展开

这条优化在VS2008平台上看不出什么效果, 因为PC机的运行速度很快, 但是在DSP平台上就有比较明显的效果。

能使用一层循环的绝不使用双层循环甚至更深层次的循环。循环过程中应减少跳转操作, 如“if…else”操作, 这种分支操作会带来跳转语句, 跳转语句会打破流水, 使程序并行度下降。采用的方法是将判断语句放在循环之外, 或将判断的内容改为零或非零的判断, 这样编译器可以将判断条件作为执行条件, 从而避免跳转操作, 使程序并行度提高。由于H.264的代码是一帧一帧, 一块一块处理数据的, 这就必然带来大量的循环操作, 加之每个循环内部又要对帧或数据块进行一系列的分类判断, 使循环的效率非常低。我们将循环展开, 并且通过提前预测等方法减少循环类对帧或数据块的判断语句, 来提高代码运行的效率。

3.3 帧内预测改进

在帧内预测[3]中, H.264支持的方式为4种Intra16x16和9种Intra4x4帧内亮度预测模式以及4种色度预测模式。帧内预测的过程如图1所示:

这种帧内预测, 我们称之为完全搜索。它的预测过程是这样的:首先, 针对宏块进行预测, 把预测后的帧内残差按照某一个标准计算出最小的代价, 选择最小代价所对应的模式。其次, 我们分别用9种模式对4x4的块进行预测, 对于4x4块的每种模式采用与16x16块中同样的标准计算出最小代价。最后, 把16x16的最小代价与16个4x4块的最小代价和作比较, 并作出最佳模式的选择后保存相应的最佳模式。由上面的分析可知, 完全搜索方法的计算量是非常大的, 对于亮度块而言, 我们需要做4次16x16块的模式预测以及16x9次的4x4块的模式预测 (一般情况) , 对于帧内编码来说, 模式选择耗时占据了极大的比重, 因此我们必须对完全搜索方法进行一定的改变。可以利用提前终止来尽量减少对一些模式的计算。如图2是改变

后一个流程:如图2所示。

其中阈值的选择跟量化参数有关, 不同的量化参数, 阈值也相应变化。在本文中, 我们的QP选取28, 在该条件下, 进行大量实验分析表明, 阈值选取1500是比较合适的, 能够在质量和速度之间获得较好均衡。由于16x16块编码比特要比4x4块编码比特少, 如果16x16块预测后的SAD明显小于1500, 我们就只采用16x16预测模式, 而不再对4x4的模式进行选择计算。这种节省是比较可观的。

除此之外, 针对16x16的4种预测和4x4的9种预测模式, 我们也可以采用提前终止的方法。具体操作是选定一个阈值, 大于该阈值则认为这个模式为最佳, 退出循环。小于该阈值则继续进行下面的模式运算。

3.4 帧间预测改进

H.264利用帧间预测[4]来减少时间冗余, 一共用了7种不同的块尺寸来进行运动估计/补偿 (16x16, 16x8, 8x16, 8x8, 8x4, 4x8, 4x4) 。这些大小不同的块在宏块内部形成了一个两层的树结构, 第一层包括16x16, 16x8, 8x16, 第二层被称为P8x8类型。在P8x8类型中, 每一个8x8块可以被再分为更小的块, 例如8x8, 8x4, 4x8, 4x4。

对于帧间预测, 我们依然采取提前终止的方法。将宏块划分为两大部分, 16x16、16x8、8x16为一部分, 8x8、8x4、4x8为另一部分。首先, 我们需要计算16x16宏块的SAD, 如果小于阈值T1, 则选16x16, 大于阈值T1的话, 在计算8x8宏块SAD, 大于阈值T2, 则进行16x8, 8x16的运算, 小于阈值T2则进行8x4, 4x8, 4x4的运算。具体流程如图3。

在16x16大小的块中, P帧还存在一种SKIP模式, 它没有运动和残留信息可被编码。关于SKIP模式, 在原代码中, SKIP模式是首先要被判定的模式, 因为它的编码量最小, 而统计表明, 在对视频编码时, 各个模式所占用的比例相差很大。其中, 16x16模式的比例平均超过70%。源代码中关于SKIP模式判定是这样的, 依据算法, 只要一个宏块的1个亮度块和2个色度块中有一个不是SKIP, 那么这个宏块就不是SKIP。而根据实验, 亮度块为SKIP, 色度块为非SKIP模式的情况很少, 我们可以在不影响编码质量的前提下, 略去对色度块SKIP的判定。

3.5 数据类型及运算的修改

因为一般图像像素点数值大小为0-255, 这样的数据用unsigned char类型的数据存储即可, 很多函数比如DCT变换, SAD差值计算等针对像素的运算, 就可以将数据类型改为unsigned char型。浮点运算尽量用整型运算代替, 或者改为查表。有些乘除法可以改为移位运算, 移位运算比乘除运算效率要高很多, 尤其是在DSP等一些嵌入式系统中。

3.6 内联函数和函数指针重排

把经常调用的函数改为内联函数, 减少来回寻址的时间。这一条也是在DSP平台上能更好的体现出来。在一个是函数指针的重排, 重排有利于软件流水, 有利于并行执行, 可以减少数据读取所占用的时间。比如做4x4dct变换的函数sub4x4_dct (int 16_t dct[4][4], uint8_t*pix1, int i_pix1, uint8_t*pix2, int i_pix2) , 在DSP平台上, dct[4][4]的首地址存放在寄存器A4中, *pix1的地址存放在寄存器B4中, i_pix1的值存放在寄存器A6中, *pix2的地址存放在寄存器B6中, i_pix2的值存放在寄存器A8中。由于在B数据通路单元只有一个交叉通路, 所以在读入pix1和pix2数据的时候只能依次进行, 无法并行进行, 将接口改为sub4x4_dct (uint8_t*pix1, uint8_t*pix2, int i_pix1, int i_pix2, int16_t dct[4][4]) , 这样函数的接口中的参数*pix的地址放在寄存器A4中, *pix2的地址存放在寄存器B4中, i_pix1的值存放在寄存器A6中, i_pix2的值存放在寄存器B6中, dct[4][4]的首地址存放在寄存器A8中, 这样在读数据的时候, 就可以使得A和B数据通路单元分别进行自己的操作。这样的改进在DCT和SAD等函数中都可以使用, 和后面的汇编语言一起, 能够获得良好的并行效果。

3.7 量化函数和扫描函数合并

在源代码中, 各模块都是相对独立, 这样做虽然可以使代码流程清晰易懂, 但也会频繁的调用函数, 带来不必要的开支。一般来说, 量化以后的数据都要进行Zig Zag[5]扫描, 以方便后面的熵编码。源代码中量化函数和Z扫描是分开进行的, 我们这里将这两个函数合并, 量化完后直接Z扫描, 减少不必要的函数调用, 节约时间。

4、系统级优化

所谓的系统级优化, 是指合理配置系统资源, 来使程序运行达到一种良好的状态。前面C语言优化时, 我们使用的是VS2008的平台, 现在将前述代码移植到DSP上, 所使用的调试环境为CCS平台。

CCS平台本身就提供了很多系统优化的选项以供选择, 不同的选项针对不同的代码有不同的优化效果, 这需要根据自身代码情况合理的选择。经过反复测试, 本程序选取了下面几种优化选项:-03选项, -mh选项和-mt选项。

-03选项可以执行控制流程, 简化用寄存器分配变量, 执行交替循环, 排除未用的代码简化公式和表述, 体通信的蓬勃发展, DSP也越来越多的应用扩大对内联函数的调用, 排除未被调用的函数, 简化返回值没被使用的函数, 让小函数变成内联调用, 保存函数说明, 保存函数说明, 以便主函数被优化时知道被调用品中, 都会找到它的影子。近年来, 随着多媒函数的属性, 识别文件级别的变量的特性。

-mh选项, 去掉流水线的epilog, 减少程序的大小。效果明显, 但是有可能出现读取地址超出有效范围的问题, 所以要在数据段的开始和结尾处增加一些padding, 或者在分配内存时保证数组的前面和后面一段范围内也是有效的地址。

-mt选项, 更积极地安排存储器操作, 表示在程序中没有使用alaising, 这使得编译器可以进行比较好的优化。

除了系统提供的优化选项外, 存储器的配置优化也很关键。将当前帧、参考帧和当前帧的重构都放至片外存储器, 其他数据代码如程序代码、全局变量、vlc码表、各编码模块产生的中间数据等均放至片内, 同时通过profiler分析代码调用频率, 合理安排代码存放位置, 从而提高cache命中率。

合理布置程序代码段和数据段的内存布局也很重要。为防止有效代码、数据在缓冲存储器中相互排挤, 应尽量把顺序执行的代码、同时使用的数据放在相邻的物理空间内;若函数模块和数据包含在同一个循环中, 循环体的大小应尽量与Cache的容量相吻合, 以便能把整个循环体全部放入cache中;为了提高cache中数据的重复利用率, 把数据操作构成的一条数据处理链, 链中的下一级操作直接使用上一级操作留在cache中的数据。

5、汇编级别优化

对于嵌入式系统, 因为自身资源限制, 导致CPU的频率和PC机相比有一定差距。在嵌入式系统中, 汇编语言的运行效率比C语言高的特点能很好的体现出来。这里所考虑的汇编优化主要指线性汇编, 线性汇编语言是为了简化C6000汇编语言程序的开发而设计的。与标准汇编语言相比, 采用线性汇编语言进行编程不需要考虑并行指令的安排、指令延迟和寄存器的使用。

下面以SAD函数来说明线性汇编的方法。SAD的原理就是把当前点和预测点相减, 取绝对值后累加实现。循环体代码如下:

双重循环在DSP上运行的话非常的耗时, 加之这个SAD会依据块的大小来运算, 如4x4块或者16x16块等, 要想将循环展开, 使用汇编语言改写是个很好的选择。H.264中一个像素点的亮度或者色度值用8位存储, 而DM6446存储器是32位的, 可以将4个8位数据一次处理。利用C64x+的汇编指令, 如LDNW无边界调整的字读取指令一次将4个像素点的值读入寄存器中, 可以把当前宏块数值放入A2寄存器, 预测宏块数值放入B2寄存器, 使用不同的功能单元, 这两条读取指令可以并行执行。

SUBABS4指令执行A2寄存器与B2寄存器4个字节相减后取绝对值的操作, 结果放入A2寄存器中。

C64x+并没有提供一个寄存器中4个字节累加的指令, 我们可以借助DOTPU4点积指令。它将两个无符号数相乘后再相加。我们可以预先设定寄存器B0的值为十六进制常数0x01010101, 比如:

通过点积得到的结果就是我们需要的累加值, SAD的循环部分线性汇编如下所示:

6、测试结果

本文的测试结果由两方面组成, 一是在VS2008上进行C语言优化的结果, 还有一个是DSP的CCS平台上的系统级和汇编语言级优化结果。其实VS2008平台的结果用秒来表示视频编码的速度, 而CCS平台上则用CPU周期数来表示视频编码的速度。

在VS2008平台上, 测试结果是在剔除率失真函数以后进行比较的, 剔除率失真会造成码率的增加, 但是信噪比变化不是很大。选取不同的序列, QP统一设置为28的情况下, 结果如表1所示。

由此可见C语言的优化取得了较显著的成果, 剔除率失真函数以后所进行的优化工作可以使速度提高40%, 并且码率变化不是很大, 这在工程应用中是值得的。从结果来看, 上述优化过程对于大序列, 中低等运动量的优化效果较好, 满足一些实时监控系统的要求。

C语言优化到这个地步就可以为移植到DSP上减轻很多工作, 也可以使程序能够较好的在DSP上运行了, 在DSP的CCS平台上, 我们选用foreman这段原始视频, 格式为qcif, 帧数为90, 步长依然为28, 结果如表2所示:

由数据可见, 系统级和汇编优化后, 速度又提高了2.87倍左右。

7、结语

本文主要从三个方面, C语言级别, 系统级别和汇编语言级别对H.264的代码进行了优化, 使H.264视频代码的速度有了较大的提高。C语言级别主要是对一些函数参数, 数据的修改, 重点针对帧内预测和帧间预测做了改动。系统级别主要是通过合理的使用优化选项, 合理的放置数据和程序代码。汇编语言级别主要是通过将耗时较大的函数改写汇编语言。通过上述操作, 达到了对H.264视频编码的优化效果。同时, 对于像foreman这种有90帧的长视频, 如果一开始就在DSP上移植优化, 由于未经优化的代码运行速度非常慢, 大约几分钟甚至几十分钟只能编码一帧, 察看结果十分不方便, 需要大量等待时间, 所以先在PC机的平台上进行C语言级别的优化是个明智的选择, 可以方便随时察看结果, 进行调试。

摘要:随着信息化科技的发展, 多媒体技术越来越渗透到我们生活的方方面面。而其中视频技术是发展最为迅猛的技术之一, 在很多方面都有应用, 如实时监控, 视频会议等。最新的视频编码标准H.264, 相对于以前的标准, 在分层编码、多帧参考、帧内/帧间预测编码、变换编码等技术方面做了巨大的改进。因此, H.264基本档次编码器的移植和优化是非常有实用价值的。加之, 德州仪器公司推出的新型处理器达芬奇DM6446处理器是一款专门针对多媒体应用的处理器, 它将固定功能器件的高效率和可编程器件的灵活性结合在一起, 有着优良的性能。对H.264在达芬奇的平台上优化, 利用DM6446的硬件资源, 能够收到良好的优化效果。

关键词:多媒体通信,视频编码,H.264,帧内预测,帧间预测,整数变换,SAD

参考文献

[1]Thomas Wiegand&Gary Sullivan.Overview of the H.264/AVCvideo coding standard[J].IEEE Transactions on Circuits and Sys-tems for Video Technology, 2003, 13 (7) :560-575.

[2]Richardson I E G.H.264 and MPEG-4 video compression[M].UK:John Wiley&Sons Ltd, 2003.

[3]裴世保, 李厚强, 俞能海.一种快速的H.264/AVC帧内预测模式选择算法[J].计算机工程与应用, 2005, 3 (10) :71-73.

[4]Pan L J&Hoy S.Fast mode decision algorithm for H.264inter-prediction[J].Electronics Letters, 2007, 43 (24) :1351-1353.

H.264编码算法 篇8

H.264是最新的视频编码标准,是目前图像通信研究领域的一个热点,它综合考虑了编码效率和网络传输,吸收了以往各种编码方案的优点,在语法结构、编码预测算法、数据变换等方面进行了很大的改进,使得其在低码率压缩、抗误码性及网络接入等性能上有了巨大的提高,必将成为视频压缩的重要标准。

现有的视频编码标准采用的都是基于变换的混合编码算法,变换将在空间域内以像素值形式表示的图像信息变换到变换域中,以变换系数的形式加以表示。显然,如果变换选择得当,所得的变换系数之间的相关性要明显小于原像素值之间的相关性,从而达到去除图像冗余度的目的。H.264相比于以前的视频编码标准的一个重要区别就是用4×4整数变换算法取代了传统的DCT变换编码算法,整数变换和量化可以通过16位算术加法运算完成,能够在不影响编码性能的前提下,有效地降低计算复杂度,更利于硬件实现,且避免了编码器和解码器间逆变换的失配问题[1,2]。本文详细分析了H.264的变换及量化的原理,并给出具体的实现方法。

二、H.264变换编码

变换编码是视频编码标准的一项最基本技术,用来消除图像的频域冗余[3],在以往的MEPG-1到MEPG-4及H.261,H.263都采用8×8的DCT作为基本变换。DCT的实质是通过线性变换X=H*x,将一个N维向量x变换为变换系数向量X。DCT的变换核H第k行第n列的元素定义为:

其中k=0,1…N-1,n=0,1...N-1,c0=,ck=1。由于DCT是线性正交变换,因此其反变换为x=HT*X。由于DCT的正反变换采用浮点计算,且H(k,n)的计算结果是无理数,因此在正反变换之间存在无法避免的舍入误差,即存在失配问题。而在帧间预测时,这咱由变换失配引起的舍入误差将被不断积累、放大,这将引起编码性能的迅速下降。

H.264不但在帧间编码使用了预测技术,而且帧内编码也使用了预测技术,因而它对预测残差变换前后的精度是非常敏感的。为了解决DCT变换的舍入误差,解决8x8块分割的变换不精确性,H.264协议标中采用的变换方式主要有3种[3]:(1)4×4的残差变换;(2)4×4的亮度直流系数变换;(3)2×2的色度直流系数变换。如图1所示。

2.1 4×4的残差变换

H.264对残差采用基于4×4块的变换编码,并使用了以整数为基础的空间变换,其优点在于:在编码器中和解码器中允许精度相同的变换和反变换,便于使用简单的定点运算方式,避免了浮点运算舍入问题造成的误差,从而避免了正变换和反变换的“失配”问题;变换的单位由原来8×8的块缩减到4×4块,运动物体的划分更为精确,这样,变换块尺寸的减少可明显减少变换引起的块边缘噪声,而且4×4变换核没有乘法操作,只需进行加法和移位运算,同时,变换比例系数被整合到量化器中,大大提高了运算速度。

设A为4×4的变换矩阵,则DCT变换可以表示为:AY=AXAT,其中:A={aij}(i,j=0,1,2,3),A矩阵中的每系数为:

令,并定义运算符“”表示两个矩阵对应系数相乘,则A可表示为:

其中:d=c/b(≈0.414),为了简化计算,取d=1/2,同时为了保持变换的正交性,对了进行修正,取,对矩阵C中第2行和第4行,以及矩阵CT中的第2列和第4列元素乘以2,相应的修改了矩阵E为Ef,以保持上式成立,得到如下变换公式:

这时C为正变换矩阵,Ef为正变换尺度调整矩阵,H.264将变换的Ef部分融合到量化过程中,变换的实际输出为(CXCT),实现过程中,上式的矩阵乘法运算改造成二次一维整数DCT变换,可以先对图像或其残差块的每行进行一维整数DCT,然后对经行变换的声的每列再应用一维整数DCT,每一次一维整数DCT变换可以采用蝶形快速算法,这样只需通过加法、减法及移位运算就可以完成变换过程。

2.2 4×4的亮度直流系数变换

当宏块的编码在16×16帧内模式下,此时整个16×16块的亮度分量是由相邻象素点预测得到。宏块的16个4×4块的直流分量组成一个4×4直流系数矩阵XD,这个矩阵的变换采用离散哈达马变换,即图1所示的变换2,其正变换公式为:

式中ZD是YD量化后的矩阵,在帧内编码的宏块里,大多数的能量都集中在直流系数上,这种变换有利于进一步去除4×4的亮度直流信号的相关性。

2.3 2×2的色度直流系数变换

一个宏块中,每种色度分量都有4个4X4的块。每个4X4的块都可看作4X4的残留变换。变换后的所有4X4块的直流系数组成2X2的块WD要在量化前做一次离散哈达码变换。其变换公式如下:

三、H.264量化实现

量化是在不降低视觉效果的前提下减少图像编码的长度,减少视觉恢复中不必要的信息,达到数据压缩的目的。H.264采用非均匀量化,支持52种量化步长,每个宏块的量化步长由量化参数QP决定,QP增加1,量化步长增加12.5%,QP增加6时,量化步长则增加1倍。H.264在高量化和低量化上进行了扩展,允许更广泛的量化水平,使得精确的量化成为可能,在码率和图像质量间达到折中。其量化公式如下:

Wij是矩阵(CXCT)中的转换系数,Qstep为量化步长,PF是矩阵Ef中的元素是尺度调整矩阵,取值为a2,ab/2,b2/4,其取值随着系数位置(i,j)的变化而变化,当位置为(0,0)、(2,0)、(0,2)、(2,2)是为a2,(1,1)、(1,3)、(3,1)、(3,3)为b2/4,其它位置为ab/2。为了将除法运算变成移位运算,利用量化步长随量化参数每增加6而增加一倍的性质,可以进一步简化。令qbits=15+floor(QP/6),floor(x)的功能是求不大于x的最大整数。MF=PF*2qbits/Qstep,则Zij=round(Wij×MF/2qbits),进而使用右移运算得到的量化公式如下:

其中f为偏移量,其作用是改善恢复图像的视觉效果,对于帧内预测图像f=2qbits/3而帧间编码宏块f=2qbits/6。MF由QP,QPstep及变换PF计算得出,并设置一个三维静态数组存放。

四、结束语

本文详细分析了H.264标准的变换及量化原理。H.264采用4X4的整数变换,消除了因浮点运算造成的漂移,通过加减及移位运算避免了因乘法运算的巨大运算量,提高了运算速度,并将尺度调整融合到量化过程,使得量化和变换具有更好的效果及更高的压缩效率。

参考文献

[1]T.Wiegand,G.J.Sullivan,G.Bjontegaard.etc.Overview of the H.264/AVC Video Coding Standard.IEEE Trans.Circuits Syst.VideoTechnol.,vol.13,pp.560~576,July2003

[2]毕厚杰,新一代视频压缩编码标准-H.264/AVC.北京:人民邮电出版社.2005

上一篇:基于成果的教育下一篇:活动模块论文