帧间预测原理及过程函数
- 格式:doc
- 大小:22.50 KB
- 文档页数:4
第1篇一、实验目的1. 了解码流的基本概念和组成。
2. 掌握码流分析的基本方法和工具。
3. 通过实际案例分析,加深对码流特性的理解。
二、实验原理码流是指视频信号在传输过程中经过压缩编码后形成的数字信号。
码流分析是对码流进行分解、统计和评估的过程,旨在了解视频信号在压缩编码过程中的特性,为视频处理和应用提供依据。
码流分析主要包括以下几个方面:1. 码率分析:分析视频信号的码率分布,了解视频质量与码率的关系。
2. 帧内码流分析:分析帧内宏块、子宏块等编码单元的码率分布,了解视频细节信息。
3. 帧间码流分析:分析帧间预测编码的码率分布,了解视频运动信息和帧间相关性。
三、实验设备与环境1. 实验设备:电脑、码流分析软件(如FFmpeg、VLC等)、视频编码器(如H.264、H.265等)。
2. 实验环境:Windows操作系统、实验室网络环境。
四、实验步骤1. 选择视频素材:选择具有代表性的视频素材,如高清电影、体育赛事等。
2. 视频编码:使用视频编码器对视频素材进行压缩编码,生成码流文件。
3. 码流分析:使用码流分析软件对码流文件进行解析,获取码率、帧率、分辨率等参数。
4. 数据统计:对码流分析结果进行统计,分析视频信号在压缩编码过程中的特性。
5. 结果分析:结合视频信号特性,分析视频质量与码率、帧率、分辨率等因素的关系。
五、实验结果与分析1. 码率分析通过码流分析软件,获取视频素材的码率分布如下:- 平均码率:1000 kbps- 码率峰值:2000 kbps- 码率谷值:500 kbps分析:视频素材的平均码率为1000 kbps,峰值码率为2000 kbps,谷值码率为500 kbps。
这说明视频素材在压缩编码过程中,存在一定程度的码率波动。
2. 帧内码流分析通过码流分析软件,获取视频素材帧内宏块的码率分布如下:- 平均码率:600 kbps- 码率峰值:1000 kbps- 码率谷值:300 kbps分析:视频素材帧内宏块的平均码率为600 kbps,峰值码率为1000 kbps,谷值码率为300 kbps。
高性能视频编码帧间预测的单元划分优化算法单娜娜;周巍;段哲民;魏恒璐【摘要】新一代的高性能视频编码(HEVC)通过应用各种先进技术来大幅提高视频编码的性能,然而,这些方法也大大增加了整个编码过程,尤其是预测编码阶段的计算复杂度.该文提出一种应用于高性能视频编码帧间预测的快速单元划分算法.该算法基于HEVC灵活的四叉树结构,根据被编码单元的运动特性来确定所编码信息的阈值,并以此作为单元划分的提前终止条件,从而减少了不必要的单元划分操作和率失真代价的相关计算,达到节省编码时间和降低编码复杂度的目的.实验结果表明,在峰值信噪比(PSNR)损失仅为0.0418 dB的情况下,所提算法可以平均降低46.1%的编码时间.【期刊名称】《电子与信息学报》【年(卷),期】2016(038)005【总页数】8页(P1194-1201)【关键词】高性能视频编码;编码单元;帧间预测;率失真代价【作者】单娜娜;周巍;段哲民;魏恒璐【作者单位】西北工业大学电子信息学院西安 710072;西北工业大学电子信息学院西安 710072;西北工业大学电子信息学院西安 710072;西北工业大学电子信息学院西安 710072【正文语种】中文【中图分类】TN919.811 引言新一代视频编码标准,即高性能视频编码(High Efficiency Video Coding, HEVC)标准,是由VCEG(Video Coding Experts Group)和MPEG(Moving Picture ExpertsGroup)联合成立的视频编码联合组(Joint Collaborative Team on Video Coding, JCT-VC)开发制定的[1]。
HEVC目前已经基本实现了在相同的质量下,压缩率比H.264/AVC提高一倍的目标,但是如何进一步提升编码效率和降低编码复杂度仍然是该领域内极具挑战性的热点问题。
在针对提高编码单元(CU)划分效率的有关问题上,人们进行了大量的研究,文献[2]提出了借助图像梯度信息提前选择CU深度范围的快速选择算法。
视频编码的基本原理视频编码是将视频信号转化为数字数据,以便存储、传输和处理的过程。
基本原理包括以下几个方面:1. 空间域压缩(Spatial Compression):视频信号中的冗余信息主要分为空间冗余和时间冗余。
空间域压缩通过去除空间冗余来减少数据量。
其中,最常用的方法是基于离散余弦变换(Discrete Cosine Transform,DCT)的压缩方法。
DCT将视频分解为一组频率分量,通过保留重要的频率成分,舍弃不重要的频率成分来进行压缩。
2. 时域压缩(Temporal Compression):视频信号中的时间冗余主要源于帧间的冗余信息。
时域压缩通过利用帧间跳动(Inter-frame Prediction)来减少冗余。
常用的方法有帧内预测(Intra-frame Prediction)和帧间预测(Inter-frame Prediction)。
帧内预测利用当前帧的局部像素信息来预测当前帧的像素值,帧间预测利用前后帧之间的相关性来预测当前帧的像素值。
通过将预测误差编码为残差(Residuals),可以进一步减少数据量。
3. 熵编码(Entropy Coding):熵编码主要用于进一步减小数据量,通过统计学原理将频繁出现的信息用较少的比特表示,而将不经常出现的信息用较多的比特表示。
最常用的方法是霍夫曼编码(Huffman Coding),它将出现概率较高的符号用较短的编码表示,出现概率较低的符号用较长的编码表示。
4. 帧率控制(Frame rate control):帧率控制用于调整视频的播放速率和帧率。
通过控制每秒播放的帧数,可以达到节省存储空间和降低传输带宽的目的。
帧率控制方法包括丢帧(Frame Dropping)和插帧(Frame Interpolation)。
丢帧方法根据需要丢弃一些帧,插帧方法则根据需要生成新的帧。
综上所述,视频编码的基本原理包括空间域压缩、时域压缩、熵编码和帧率控制等。
帧间预测模块的静态时序分析
李昕蔓;易清明;石敏
【期刊名称】《微计算机信息》
【年(卷),期】2010(026)017
【摘要】本文基于synopsys公司的静态时序分析软件PrimeTime(PT),介绍了ASIC设计验证的静态时序分析(STA)方法.文中首先介绍了STA的基本原理,PT启动文件的设置和工作条件的选择,最后通过视频解码系统中帧间预测模块设计,阐明了静态时序的具体分析方法及PT的工作流程,并给出模块的静态时序分析报告并由此说明PT工具的有高时序路径分析覆盖率以及帧间预测模块的时序路径满足设计要求.
【总页数】3页(P105-107)
【作者】李昕蔓;易清明;石敏
【作者单位】510632,暨南大学;510632,暨南大学;510632,暨南大学
【正文语种】中文
【中图分类】TN431.2
【相关文献】
1.一种基于时延配置表的FPGA静态时序分析算法 [J], 喻伟;陈恩耀;马海燕;祝周荣;宋雷军;王永孟
2.16nm工艺下的新一代静态时序分析技术SOCV [J], 胡云生;胡越黎;王伟平;承文龙;杨晔晨
3.AVS帧间预测亮度插值模块的VLSI实现 [J], 王亚东;陈咏恩
4.AVS帧间预测亮度插值模块的VLSI实现 [J], 王亚东;陈咏恩
5.一种基于时延配置表的FPGA静态时序分析算法 [J], 喻伟;陈恩耀;马海燕;祝周荣;宋雷军;王永孟;
因版权原因,仅展示原文概要,查看原文内容请购买。
HEVC学习(二)—— HM的整体结构及一些基本概念7个工程1. TAppCommon2. TAppDecoder3. TAppEncoder4. TlibCommon5. TLibDecoder6. TLibEncoder7. TLibVideoIO'T'代表'Test'(这一个的理解可能有误),'App'代表'Application',表明该工程主要包含一些应用函数'Lib'代表'Library',表明该工程主要包含一些库函数。
'Common'表明该工程包含的一些函数是编码器和解码器共用的,'Decoder'表明该工程包含的函数是解码器使用的,而'Encoder'表明该工程包含的函数是编码器使用的。
'VideoIO'工程主要是实现对YUV文件的读写操作。
编码器和解码器的主函数分别在encmain.cpp和decmain.cpp中,相信光看源文件名都能看出来了。
(1)类的命名:(2)变量的命名:(3)函数的命名:HEVC学习(三)——帧内预测系列之一fillReferenceSamples函数(填补当前PU周围相关的样本值)——Void TComPattern::fillReferenceSamples——图像2(左上角为4个像素点,如无强调则以块为单位计算长度等?)PS:此处有两块图像:重建的YUV的大图像1、相对应的专用于预测的PU及其周边的参考样点图像2Pel* piRoiTemp——指向重建Yuv图像1 的位置(临时使用,指向可随意变动)Pel* piRoiOrigin——指向重建Yuv图像1对应于当前PU所在位置的首地址(对当前PU固定)Int* piAdiTemp——图像2 的感兴趣位置(变动的,用于赋值)iPicStride ——重建YUV图像1的宽iNumIntraNeighbor——指示PU周边可用邻块数uiWidth= uiCuWidth*2+1——图像2的宽,uiHeight= uiCuHeight*2+1——图像2的高uiCuWidth ——图像2的CurrentPU部分的宽,uiCuHeight——图像2的CurrentPU部分的高iTotalSamples——总样点数iTotalUnits——以4x4块为单位的块数iUnitSize——块的大小主要功能是在真正进行帧内预测之前,使用重建后的Yuv图像对当前PU(Predict Unit预测单元)的相邻样点进行赋值,为接下来进行的角度预测提供参考样点值。
帧间预测是采用基于块的运动补偿从一个或多个先前编码的图像帧中产生一个预测模型的。H.264与早起标准的主要不同之处在于支持不同的块尺寸(从16×16到4×4)以及支持精细子像素精度的运动矢量(亮度成分是1/4像素精度)
每个宏块(16×16)的亮度分量可以按四种方式划分,即按一个16×16块,或两个16×8块,或两个8×16块,或者4个8×8块的划分进行运动补偿。如果选择8×8模式,宏块中的4个8×8子宏块可以用另一种方式进一步划分,或者作为一个8×8块,或作为两个8×4块,或作为两个4×8块,或者作为四个4×4块。
每个分块或者子宏块都产生一个单独的运动矢量。每个运动矢量均需要编码和传输,同时分块模式信息需要进行编码并放在压缩比特流中。
每个色度块按照与亮度分量同样的分块方式进行划分。 编码每个分块的运动矢量需要大量比特位。由于相邻块的运动矢量高度相关,所以每个块的运动矢量都是从邻近的先前编码块中进行预测得到的。当前运动矢量与预测运动矢量MVp的差值MVD被编码和传输。
MVp的预测规则如下: 假设E是当前宏块、子宏块或子宏块分块,A是E左边的分块或子分块,B是E上边的分块或子分块,C是E右上的分块或子分块。如果E左边的分块数大于1,则最上边的分块被选为A。如果E上边的分块数大于1,则最左边的分块被选为B。
1.除了16×8和8×16两种分块尺寸的其余传输块,MVp是分块A、B、C的运动矢量的中值(不是平均值) 2.对于16×8分块,上边16×8分块的MVp是从B预测得到的,下边16×8分块的MVp是从A预测得到的。 3.对于8×16分块,左边8×16分块的MVp是从A预测得到的,右边8×16分块的MVp是从C预测得到的。 4.对于skip宏块,产生一个16×16块的MVp,和第1种情况一样。MVp的形成规则相应修改。
如果得不到一个或多个先前传输块的话(如,它在当前条带之外),则MVp的形成原则相应修改。
——————————————————————————————————————– Yeah! 又可以看实例了: 这里对foreman_part_qcif.yuv的第二帧中地址为40的宏块(白色框框住,图贴在文章开头)进行分析,关键代码还是在encode_one_macroblock_high中,由于该帧是P帧,所以会进行帧间预测。其中最重要的函数为BlockMotionSearch,该函数为所有大小的分块完成运动搜索的过程,得到最优的MV。 1.进行skip模式,实现函数FindSkipModeMotionVector,该函数只是从周围块的MV来预测当前宏块的MVp,获得MVp的函数GetMotionVectorPredictorNormal。由于skip宏块是没有MVD的,它把MVp作为运动矢量并得到运动补偿宏块。实例中获得的MVp为(-17, 3)
2.16×16模式,也需要先获得MVp(-17, 3),于是将(-16, 4)定为搜索中心(最近的整数像素),在一定的搜索范围(32)之内进行整像素搜索,需要搜索的位置有(32*2+1)*(32*2+1)=4225个。对于每个位置,都要计算一个motion cost(block_sad+mv_cost),最终找到使cost最小(2311)的MV(-16, 8)。然后在该点周围9个点(包括该点)再进行半像素搜索,找到一个cost最小(3639)的MV(-16, 6),这里采用的误差度量不再是SAD(Sum of Absolute Difference),而是SATD(Sum of Absolute Transformed Difference),所以与之前的2311没可比性,这个配置文件里面可以配置,只不过默认的配置是整像素采用SAD,半像素和四分之一像素采用SATD。进行完半像素搜索后,再在cost最小的半象素点周围的9个点进行四分之一像素搜索,最后找到一个cost值最小(3523)的MV(-17, 7)。
3.16×8模式,要对上下两个16×8块进行运动搜索,先是上面的块,MVp为(-17, 5),于是从(-16, 4)开始进行整像素搜索,得到SAD最小的是(-24, 4),半像素搜索(-26, 2),四分之一像素搜索(-27,2),最小cost为1262。然后是下面的块,类似得到最小cost(2020)的MV(-15, 5)。两个cost的和为1262+2020=3282。
4.8×16模式,和16×8的区别就是现在的分块为左右两个,分别得到左块和右块的MV为(-32, 3)和(-15, 5),cost为761+1825=2586。
5.8×8模式,如上面所说,如果选择8×8模式,四个8×8子宏块可以用另外四种方式进行划分,所以需要对4个子宏块进行运动估计和模式选择。需要用RDO技术来选择。
先是第一个8×8子宏块。SMB8x8模式,cost最小(483)的MV(-30, 2),rdcost = 1827.9051343856379;8×4模式,上块和下块最优MV分别为(-32, 2)和(-32, 3),cost为323+146=469,rdcost = 1839.9845446142001;4×8模式rdcost = 2071.8257241570759;4×4模式rdcost = 1906.9051343856379。选择rdcost最小的模式,也就是8×8模式,见图中高亮宏块的左上角8×8块。
第二个8×8子宏块。8X8 rdcost = 2192.8257241570759;8×4 rdcost = 2337.8735125141839; 4×8 rdcost = 1486.6669036999515,左块和右块MV分别为(-21, 5)、(-15, 3),SATD cost = 413;4×4 rdcost = 1927.9051343856379。选择rdcost最小的模式,也就是4×8模式模式,见图中高亮宏块的右上角8×8块。
第三块和第四块采用类似的方法,分别选择了SMB8x8模式和SMB4x4模式。见图中高亮宏块的左下和右上8×8块。
——————————————————————————————————————– 所有帧间预测模式都做完了,下面就是要通过各个模式的rdcost来选择最佳模式了。 skip模式,48032.539705114279 P16x16模式,13120.288152342357 P16x8模式,12449.192575628142 P8x16模式,10033.668325899660 P8x8模式,8257.1286207853791 即使是P帧,也还是要做帧内预测的,下面是帧内模式的rdcost I16x16模式,16021.447683899336 I4x4模式,13026.446972799482 I_PCM模式,105585.41572855003 当然是选rdcost最小的咯,也就是P8x8,而四个8×8子宏块的分块情况也在之前选择好了。 ——————————————————————————————————————— 之后还是把用Elecard StreamEye工具得到的该宏块的信息贴出来研究下: position : 7×3 (112×48) mb_addr : 40 size (in bits) : 146 mb_type : 4 宏块类型,见标准文档表7-13,4表示的宏块类型名称为P_8x8ref0 pmode : 3 预测模式,8×8 mb_type : Inter(P_8x8ref0) slice_number : 0 transform_8x8 : 0 field\frame : frame cbp bits : 0 1100 0 00 0 00 : 0000 00 00 : 0011 : 0001 quant_param : 28 QP pmode : Part_8x8 预测模式名称 sub_pmode : SubPart_8x8 SubPart_4x8 子宏块的分块方式 : SubPart_8x8 SubPart_4x4 sub_pdir : Pred_L0 Pred_L0 ? : Pred_L0 Pred_L0 mvL0 : MV,与之前分析的一致 -30, 2, 0| -30, 2, 0| -21, 5, 0| -15, 3, 0 -30, 2, 0| -30, 2, 0| -21, 5, 0| -15, 3, 0 -33, 3, 0| -33, 3, 0| -26, 2, 0| -10, 3, 0 -33, 3, 0| -33, 3, 0| -26, 2, 0| -20, 43, 0
——————————————————————————————————————— 下面分析码流,相关函数writeMBLayerPSlice 先写入的是一个mb_skip_run语法元素,表示之前有多少个skip宏块,这里为0,因为之前的宏块不是skip空块
再写入MBType,表示宏块类型 然后是4个8×8子宏块的模式 之后写入的是运动矢量信息 再然后写入cbp和DQuant 最后写如的是亮度和色度的残差 该实例中,mb_skip_run占1bit,MBType占5bits,子宏块的模式占10bits,运动矢量信息占82bits,cbp占9bits,DQuant占1bit,亮度残差占38bits,色度残差为空,一共1+5+10+82+9+1+38=146bits,与上面一致,忽忽
其中运动矢量信息的编码函数为write_pslice_motion_info_to_NAL,编码每个块的最佳MV和MVp的差值MVD。
.