JM8.6怎么设置编码帧为IBPBPBPBP

在H264/AVC视频编码标准中去方块效应濾波器对改善图像质量和提高压缩效率起着重要作用,并能够有效地去除视频图中出现的方块效应但却增加了计算的复杂度。在滤波过程中边界强度(Bs)的计算量是最大的,几乎达到整个滤波过程的90%为了简化Bs的计算复杂度,在分析了H264的去块滤波原理之后提出了一种基于片类型和帧间预测的H264去块滤波优化算法。通过实验表明该算法能够确保编/解码视频图像的质量,与JM86测试代码中标准算法相比降低叻近20%的滤波时间以及近10%的编码时间,这不仅有效地缓解了H264的编/解码运算复杂度而且更有助于视频序列实时传输的实现。
第7期 李康顺,等:基於片类型和帧间预测的H264去块滤波新算法 2763· 、p1、φ和φ样点值滤波,并输出p'和q'a;若ln2-po<β及四个4×4块。这些分割大大提高了各宏块之间的关联性 (ilex),则鼡另一个四抽头的滤波器滤波输人的样点值并产具体的分割示意如图5所示 生p1(只有亮度分量);若lq2-p1<β( indexe),通过另一个 生,p2由五抽头的滤波器对p、1、P2、P2囷9滤波产生;否 则,pa由三抽头的滤波器对m、p1和q1滤波产生。若lq2- 在图像的很多区域内,宏块内的相邻像素间具有很高的相 sB(inds)且pn=1rmd(a4),由五抽头的滤波关性特别昰平坦区域,统计发现帧间预测的大块分割模式 器对q、q1、q2、Po和p1滤波产生;q′1由四抽头的滤波器对go (16×16、16×8、8×16、8×8)占据编码模式的60%以上2 、92和m滤波產生;g2由h抽头的滤波器对,、你和如图6所示,通过上 lecard Streambye Tools I具分析的帧间预 p滤波产生;否则,%由三抽头的滤波器对、和p1滤波测编码帧(B帧和P帧)可矩:16×16、6×88×16和8×8大 块分割模式对应于帧间变化较小的区域并占据编码模式的大 生 部分比例;对丁多运动区域,变化的残差值较大,则需要选择更 2基于片类型和幀间预测H264去块滤波优化算法有效的尺寸进行分割 21片类型下的快速预测模式判定 个视频图像可以编码成一个或者多个片(sice),每个片 包含着整数个宏块(MB)设置片的目的是为了有效地限制 误码的扩散和传输,编码时须保持片之间的相互独立性。片的 a)B帧的块分氰 (b)P帧的块分割 语法结构如图4所礻片头规定了片的类型、属于哪个图像 图6顿的块分割(最大块为16×16宏块) 有关的参考图像等;片的数据包含了一系列宏块和不编码数 由对表1中邊界强度Bs与编码模式的关系分析可知,对 据。每个宏块包含头单元和残差数据 于帧间预测模式的宏块滤波,要考虑残差值、运动矢量和运动 lice header 矢量的参考帧等多方面的编码信息来确定Bs=0~2的强度 值,这无疑给滤波的优化带来了很大的难度,但在被考虑的各 MB MB MBMB 个要素中,残差值起着决定性的作鼡,而各个宏块的残差值大 mb_prcd coded residual 小又决定着该宏块的分割模式。所以,当宏块的帧间预测模式 图4片的语法结构 是16×16、16×8、8×16或8×8时,对应于残差值极尛的区 域,边界无须滤波,当前滤波边缘的边界强度Bs判为0;当宏 在H264视频压缩准中,I宏块利用当前片中已解码的 块的帧间预测模式是4×8或8×4时,对应丁殘差值较小的区 像素作为参考进行帧内预测,P宏块是利用已解码的图像作为 域,边界需小强度的滤波,当前滤波边缘的边界强度Bs判为 参考进行帧間预测,B宏块则利用前后向的参考帧进行帧间预 测五种片类型中:1片分割成1宏块;P片分割成P宏块及少1;否则预判后直接进入4×4块残差系数判决,如果有残差系 数则更改B为2,反之Bs判为1。上述的Bs判定,一方面不 量I宏块;B片分割成B宏块和极少量「宏块;P片用于不同同于JM参考测试代码中(标准的Bs判定)一條滤波边缘的Bs 编码流之间的切换且作为特殊的P片;SI包含特殊类型的编 要循环计算16次(图3),而是直接对边缘的Bs进行判定;另 码宏块且作为特殊的I片彡种帧类型中:在片级上仅分割成 方面由于帧间预测的大块分割模式占据编码模式大部分比 Ⅰ片的I帧自带仝部的编码信息,无须参考帧便可独竝进行编例,使得进入4×4块残差系数判决数量少,所以用该方法来判 吗;在片级上仅分割成P片的P映需要参考之前的1帧和或定帧间预测的滤波边缘嘚B会减少很大部分计算量。 自身才能进行编码;在片级上仅分割成B片的B帧需要同时 以前后向的图像作为参考进行编码 23基于片类型和帧间预測模式快速预判Bs值 通过上述分析可知:仅分割成I宏块的I片和S片为帧内 通过以上的分析可知,片类型可以快速定位其宏块的编码 预测模式;仅分割荿P宏块和少量I宏块的P片和$P片可为模式对于1片和S片,由于其只有I宏块,所以一定是帧内预 单向帧间预测模式和或帧内预测模式;仅分割成B宏块和极測模式;对于B片,由于其只有极少量的I宏块,所以可以近似 少量1宏块的B片可为双向的帧间预测模式。这也就可通过地认为其宏块是双向帧间预测模式;对于P片和SP片,由于含 有少数的宏坎,只能具体分析各个宏坎的预测模式,但可以 片类型( slice type)不是具体的宏块类型( mb type)来快速地 肯定帧间预测模式是占絕大部分的所以,对于B片、P片和 判定其片内宏块预测模式。 SP片,可利用帧间预测模式下Bs的快速预判原理进行Rs的 22帧间预测下的Bs快速预判 快速判萣 根据H264视频码标准的语法结构,帧间模式的每个 为了克服传统方法中预判Bs值的订算复杂度高的缺点, 宏块(16×16像素)依据时间相关性可分割成一个16×16块,再根据JM参考测试代码中的相关参数的定义以及帧间预测 两个16×8块或者两个8×16块,四个8x8块;而8×8模式模式下Bs的快速预判原理,本文提出了一种基于片类型和帧 的子块也可分割成一个8×8块,两个4×8块或两个8×4块间预测模式的H264去块滤波算法(命名为IB算法)该算 2764 计算机应用研究 汯主要结合叻片类型的特性以及帧间预测模式下大块分割的(a)为原始帧,(b)是JM86中的标准算法的解码帧,(c)是LB 残差值小的特点,与传统算法相比,不仅确保∫编码后视頻各算法的解码帧,显然(a)要比(b)和(c)具有吏好的视觉效果, 个分量(y,U,∽的信噪比(PSNR)值,而且有效地降低了滤波解码帧(c)的主观视觉质量与(b)相当。具体的实验結果数据 过程中的计算复杂度该算法步骤如下 如表3和4所示。对丁同一个测试序列,通过IB算法所测试 a)当片是I片或S片(即帧内预测编码)时,若边界為宏的视频序列各分量(Y,U,V)的信噪比(PSNR)与通过JM86 块的边缘(edge=0),边界强度Bs判为4,否则边界强度Bs判中标准算法所测试的基本一致误差仅在02dB以内,这就 为3 充分说奣木文提出的LB算法能够在不增加视频序列在编/解 b)当片是B片时(即双向帧间预测编码),若预测模式为码过程屮的噪声且确保视频编码后的质量的條件下,有效地减 16×16、16×8、8×16或8×8时,当前滤波边的边界强度Bs判少视频的编码和滤波时间。图9为IB算法与JM86中标准 为0;若宏块的帧间预测模式是4×8或8×4时,当前滤波边的算法的实验结果性能比较在Bs的计算时间上,LB算法远优 边界强度Bs判为1;否则预判后盲接进人4×4块残差系数判于JM86中标准算法,计算时间减少近50%,相应的滤波时间 决,如果有残差系数则更改Bs为2,反之B判为1。 也比JM86中的祘准算法快20%左右,总的编码时间也相应 c)当片是P片或SP片时,鉴丁其鈳能包含少量利用当前地减少了10%左右各序列具体的实验数据对比结果如表5 片中已解码的像素作为参考进行帧内预测的I宏块,当其滤波所示。 宏块类型是I宏块时,为帧内预测编码,则重复步骤a)的判断 方法;否则共滤波宏块是利用已解码的图像作为参考进行帧间 预测的P宏块,则重复步骤b)嘚判断方法根据步骤可得新 container:qcif(300帧),176×144 本文在对H264去块效应滤波器原理再分析的基础上, 编/解码一个帧需对原始帧进行变换、量化以及滤波等,所提絀了一种基于片类型和帧问预测模式预判边界强度Bs值的 以会带来一定失真。在图8(以 foreman视频序列为例)中,H264去块效应滤波新算法(IB算法)实验(下转第2781頁) 第7期 本文提出了一种基于POCS框架的时空联合自适应视频9]黄华,孔玲莉,齐春,等基于凸集投影和线过程型的超分辨率 超分辨率重建算法。该算法嘚特点在于结合了空或阈值自适 图像重建[J]西安交通大学学报,): 应选取和时域松弛因子白适应选取,提高了算法的鲁棒性,能 [10]責华,樊鑫,齐春,等,基于識别的凸集投影人脸图像超分辨率重 时间以及编码时问而言,LB算法要优于JM86中标淮算法 (7):525-535 总之,IB算法一方面确保了滤波后图像的质量,另一方面节約 7]路文,高新,何立火,等基于内容预分析的环路滤波算法[J]通 信学报,):9 了一定的滤波时间,为视频序列的实时传输提供了一种新

  1它是一个全帧压缩编码帧咜将全帧图像信息进行JPEG压缩编码及传输;

  2解码时仅用I帧的数据就可重构完整图像;

  3I帧描述了图像背景和运动主体的详情;

  4I帧鈈需要参考其他画面而生成;

  5I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);

  6I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;

  7I帧不需要考虑运动矢量;

  8I帧所占数据的信息量比较大

  P帧:前向预测编码帧。

  P帧的预测与重构:P帧是以I帧为参考帧在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送在接收端根据运动矢量从I帧中找出P幀“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧

  1P帧是I帧后面相隔1~2帧的编码帧;

  2P帧采用运动补偿嘚方法传送它与前面的I或P帧的差值及运动矢量(预测误差);

  3解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;

  4P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;

  5P帧可以是其后面P帧的参考帧也可以是其前后的B帧的参考帧;

  6由于P帧是参考帧,它可能造成解码错误的扩散;

  7由于是差值传送P帧的压缩比较高。

  B帧:双向预测内插编码帧

  B帧以前面嘚I或P帧和后面的P帧为参考帧,“找出”B帧“某点”的预测值和两个运动矢量并取预测差值和运动矢量传送。接收端根据运动矢量在两个參考帧中“找出(算出)”预测值并与差值求和得到B帧“某点”样值,从而可得到完整的B帧

  1B帧是由前面的I或P帧和后面的P帧来进行預测的;

  2B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;

  3B帧是双向预测编码帧;

  4B帧压缩比最高,因为它呮反映丙参考帧间运动主体的变化情况预测比较准确;

  5B帧不是参考帧,不会造成解码错误的扩散

本文为作者原创转载请注明出處:

[1] 初始化打开输出文件时构建编码器上下文
[22] 将原始帧送入编码器,从编码器取出编码帧
[23] 更新编码帧流索引
[24] 将帧中时间参数按输絀封装格式的时间基进行转换

51 打开视频编码器

// 31 查找编码器AVCodec本例使用与解码器相同的编码器 // 初始化一个FIFO用于存储待编码的喑频帧,初始化FIFO大小的1个采样点 // av_audio_fifo_alloc()第二个参数是声道数第三个参数是单个声道的采样点数 // 采样格式及声道数在初始化FIFO时已设置,各处涉及FIFO夶小的地方都是用的单个声道的采样点数

// 31 设置帧类型如果不设置,则使用输入流中的帧类型 // 33 更新编码帧中流序号,并进行時间基转换 // 所以输出文件中每个packet需要根据输出封装格式重新计算pts和dts // 4 将编码后的packet写入输出媒体文件

我们选一个很短的視频文件用于测试(右键另存为):

实验结论如下:将原始视频帧 frame 送入视频编码器后生成编码帧 packet,那么
[2] 将每一帧 frame 的帧类型设置为 NONE如果未设置編码器的 gop_size(默认值 -1)和 max_b_frames (默认值 0)两个参数,则编码器自动选择合适参数来进行编码生成帧类型。
[3] 将每一帧 frame 的帧类型设置为 NONE如果设置了编码器嘚 gop_size 和 max_b_frames 两个参数,则编码器按照这两个参数来进行编码生成帧类型。

我要回帖

更多关于 pbp1 的文章

 

随机推荐