帧间、帧内像素块预测

一、像素块预测

H.264/ AVC标准中的基本预测技术是基于块,而不是基于对象的。它的编码器是利用混合的编码方案来提高编码效率,这些方案包括高级的预测技术和有效熵编码技术。在运动预测中它使用不同的块的大小进行预测,以树结构的方式来组织预测模式。其主要的特点也包含在多参考帧预测方式和通用B帧的概念上。H.264像素块预测编码包括帧内块预测和帧间块预测,而帧内块预测在H.264中占有极重要的地位。在图像信号压缩编码中,由于亮度信号和色差信号是分别进行处理的,因此,预测又可分亮度信号预测和色差信号预测。下面就两种不同预测方式分别加以讨论。

1. 帧内预测

在H.264/AVC中采用的预测编码方法与在14496-2标准的MPEG-4视频编码规范不同,帧内预测是在变换编码之前进行的。在 H.264/AVC标准的帧内预测中,当前块的抽样值总是利用邻块的抽样值来获取。这样也许会因为在相邻的帧间编码的宏块的运动补偿误差而引起图像误差的扩散。因此,在图像编码过程中还有一种限制帧内编码模式,此时只允许相邻的帧内预测宏块为已知才可以作为其他当前宏块的参考宏块。

H.264根据相邻像素可能有相同的性质,利用相邻像素的相关性,采用了新的帧内(Intra)预测模式。通过当前像素块的左边和上边的像素(已编码重建的像素)进行预测。只对实际值和预测值的差值进行编码,这样就能用较少的比特数来表达帧内编码的像素块信息。在H.264标准中,亮度块可以有9种4×4块和4种16×16块的帧内预测模式,而色度8×8块的4种模式与亮度的4种16×16块的模式相同。对于每个4×4块(除了边缘块特别处置以外),每个像素都可用17个最接近的先前已编码的像素的不同加权和(有的权值可为0)来预测,即此像素所在块的左上角的17个像素。显然,这种帧内预测不是在时间上,而是在空间域上进行的预测编码算法,可以除去相邻块之间的空间冗余度,取得更为有效的压缩。如图1所示,4×4方块中a、b、…、p 为16个待预测的像素点,而A、B、…、P是已编码的像素。按照所选取的预测参考的点不同,亮度共有9类不同的模式,但色度的帧内预测只有1类模式。

4×4帧内预测方法用于对图像细节部分进行编码,它的基本思路是从不同的方向计算、比较块中各个像素之间的亮度差值,即梯度值。通过选择具有最小预测误差的方向作为最佳的预测方向。下面对其中的预测模式举例说明。如图1所示,其中4×4块中16个抽样值(a~p)是由先前解码邻近宏块抽样值(A~Q)利用各种预测模式预测得来。这种预测模式共有8个方向,加上各像素作平均计算共9种模式。

2. 4×4帧内预测模式编码过程

每个4×4块的帧内预测模式的选择一定会告知解码器,这可能需要很多比特。然而,附近的4×4块的帧内模式是非常相关的。举例来说,如果图 2里的先前编码的4×4块A和B是使用模式2预测的,块C(当前块)的最佳模式很有可能也是模式2。对于每个当前块C,编码器和解码器计算最合适的模式 most_probable_mode。如果A和C都在4×4帧内模式中编码,且都在当前的slice层中,最合适的模式(most_probable_mode)是A和C预测模式的最小量;否则most_probable_mode 被设定成模式2(直流预测)。

编码器为每个4×4块发送一个flag标志,使用最合适的模式use_most_probable_mode。如果flag是“1”,采用参数most_probable_mode。如果flag是“0”,发送另外的一个参数remaining_mode_selector,来指出模式变化。如果remaining_mode_selector比当前的most_probable_mode小,那么预测模式被设定为 remaining_mode_selector;否则预测模式被设定为 remaining_mode_selector+1。这样,remaining_mode_selector只需用8个数值(0到7)表示目前的帧内模式(0到8)。

3. 亮度信号16×16帧内预测

16×16预测方式是基于在16×16块的基础上,用于对图像中的相对不变的部分进行编码。它只有四种预测方式,分别为垂直预测方式、水平预测方式,直流预测方式和平面预测方式。用一个4×4亮度分量的可选模式,可预测一个宏块的整个16×16亮度分量,有4种模式。

模式0:(垂直预测)由上面的抽样值插补(H);

模式1:(水平预测)由左边的抽样值插补(V);

模式2:(直流预测)由上面的和左侧的抽样值平均数插补(H+V);

模式4:(平面预测)由上面的和左侧的抽样值插补。

线性“平面”可设置由上面和左侧的抽样值H和V插补, 这在平滑的亮度区域效果较好。

4. 色度信号的帧内预测

一个宏块的每个8×8色度分量借助于上面的和左面的已被编码、重建的色度分量抽样值进行预测。由于色度在图像中是相对平坦的,其预测方法与 16×16亮度信号帧内预测相似方式进行。因此也有四种帧内预测模式:垂直预测(模式0),水平预测(模式1),直流预测(模式2)和平面预测(模式 3)。

5. 帧间预测

帧间预测是利用先前已编码帧的图像作为参考图像对当前图像进行预测的一种方式。它把参考图像的抽样点通过运动矢量的补偿作为当前图像抽样值的参考值。H.264/AVC标准中使用了从H.261标准以来主要标准中使用的块结构运动补偿。然而,它与早期标准最大区别在于:①支持多种块结构的预测;②运算精度能精确到1/4像素。

在H.264/AVC标准中还使用了H.263标准中曾使用过的多帧预测的方法,主要思想是增加运动矢量中时间轴的估计参考帧数。在宏块的级别上,允许选择一个或几个前面视频帧作为参考帧。用于运动补偿的多帧预测方式在大多数情况下会明显改善预测增益。

下面我们就以在两种不同类型的片(slice)中使用的帧间预测方式进行讨论。在说明它们之前我们首先介绍树结构的运动补偿,其中主要简述了宏块的分块。

帧间预测用于降低图像的时域相关性,通过采用多帧参考和更小运动预测区域等方法,对下一帧精确预测,从而减少传输的数据量。每个亮度宏块被划分成形状不等的区域,作为运动描述区域。如图4所示,其划分方法有16×16,16×8,8×16,8×8 共4种。当选用8×8方式时,可以进一步划分成8×8,8×4,4×8和4×4共4个子区域。每个区域包含自己的运动向量,每个运动向量和区域选取信息必须通过编码传输。因此,当选用较大区域时,用于表示运动向量和区域选取的数据量减少,但运动补偿后的残差会增大;当选用小区域时,残差减少,预测更精确,但用于表示运动向量和区域选取的数据量增大。大区域适合反映帧间同质部分,小区域适合表现帧间的细节部分。

在H.264中,运动预测的精度也有所改进,对QCIF(144×176像素)格式的图像,使用1/4像素精度;对CIF(288× 352 像素)格式的图像,使用1/8 像素精度。其中,1/4 像素插值是先使用一个6抽头滤波器进行水平和垂直滤波得到半像素插值点,然后对其进行线性插值;而1/8 像素插值是直接使用一个8抽头滤波器进行水平和垂直滤波。

在帧内编码模式下,H.264 对空间系数进行双向预测,而不是对变换后的系数进行预测(见H.263+的先进帧内预测模式)。另外,与H.263+的附录N类似,H.264支持参考帧可选模式,即在编码后续图像时,可以从编码缓存中选择使用前面的参考帧(多于一帧)进行运动估值。

H.264 除了支持I 帧、P 帧和B 帧外,还提出了一种新的图像类型SP 帧,SP帧也是预测编码帧,根据需要可以改变用于该帧预测的图像。SP帧可用于信道速率的改变、视频比特流的切换和码流随机接入等操作,在时变无线信道上的视频通信和流媒体传输中有广泛的应用前景。

二、运动补偿

1. 树结构的运动补偿

H.264采用了不同大小和形状的宏块分割与亚分割的方法。一个宏块的16×16亮度值可以按照16×16、16×8、8×16或8×8进行分割;而如果选择了8×8分割,还可以按照8×8、8×4、4×8或4×4进行亚分割,如图5所示。这些宏块分割与亚分割的方法将会使得每个宏块中包含有许多不同大小块。利用各种大小的块进行运动补偿的方法我们将称为树结构的运动补偿(tree structured motion compensation)。宏块分割与亚分割所产生的每一个亮度块都有自己独立的运动矢量。对于宏块中色度值,分割方法是和亮度一样的,但是由于 4∶2∶0采样的关系,色度分割块的大小是亮度分割块的一半,而且当色度块在利用运动矢量时,必须要将它各个分量除以2。其次,H.264可以达到1/4 像素的运动精度,这是通过利用整像素点的亮度值进行内插得到的。内插过程先是通过6抽头的滤波器来获得半像素精度,然后用线性滤波器来获得1/4像素的精度。又由于4∶2∶0采样的关系,色度的运动精度就达到1/8像素,这也是通过线性滤波器插值得到的。由于运动矢量之间也有一定的相关性,所以H.264 就利用已经编码块的运动矢量对当前未编码块的运动矢量进行预测,最后只需要编码和传输实际运动矢量与预测值的差值即可。

再次,H.264还可以采用多参考图像(最多前向和后向各5帧)来进行运动预测,这样可以对周期性运动,平移封闭运动和不断在两个场景间切换的视频流有效果非常好的运动预测。使用了多参考图像,H.264不仅能够提高编码效率,同时也能实现更好的码流误码恢复,但需要增加额外的时延和存储容量。

最后,H.264也在B图像中利用后向运动预测,这和以前的标准是一致的,但不同的是B图像通过加权也能作为其他图像的参考图像。

在H.264/AVC标准中获得运动补偿的块结构大小不再局限于在宏块的基础上,可以从宏块的分块或子分块中获取运动矢量。

每个运动矢量都将会被编码、传送,另外分块方式也必须被编码在数据流中。选择大的分块方式(16×16、16×8或8×16)也许只需要传送很少的比特用于说明运动矢量和分块方式,但是运动补偿后抽样点差值也许将会比较大。选择小的分块方式(8×4或4×4)也许能得到很小运动补偿后抽样点差值,但是要花费很多比特去传输运动矢量和分块方式。因此对于分块的选择将会对压缩效果有着重大的影响。通常,大的分块方式用于帧内均匀的部分,而小的分块方式将有利于图像中细节描述,每个色度块将按照亮度的分块方式进行分块。由于宏块中色度分辨率是亮度分辨率的一半,因此色度块的大小不管在水平还是垂直方向上都只是亮度块的一半。同时,色度块上垂直运动向量和水平运动向量也只是亮度块的一半。

2. 在P类型片中的帧间预测

以往,一般的视频压缩的最高运动估计精度为半像素(half pixel),比如在14496-2标准(即MPEG-4视频编码部分)中的基本补偿技术就是采用半像素精度,采用的内插方法也是简单的双线性内插法,其补偿的质量也是相对于较低的。与上述不同的是,在H.264/AVC标准中的运动估计精度要求达到1/4(quarter pixel)精度。

在H.264/AVC标准中,对于P类型的片编码时可以采用多帧运动补偿预测,也就是超过一个先前编码帧可作为当前帧运动补偿的参考帧。

多帧预测需要解码器和编码器在缓冲中存贮多帧图像作为参考帧。解码器则利用比特流中参数设置信息内存管理控制操作(memory management control operation)去复制编码器相同的多帧缓冲。同时对于每个运动补偿的16×16、16×8、8×16或8×8块及其子块需传送参考索引参数,用于确定该块或子块参考帧在缓存中的位置。P类型片预测方式是与宏块中块相对应的,也即是与前面所介绍宏块中分块相对的。在P类型片中预测模式不仅仅只有表中所描述6种类型,还可以包括帧内预测模式。另外对于P_8×8类型预测方式,它是对应于8×8块的预测,还可以有子分块上预测模式。

对于P帧中不同预测模式分类可见JM中函数interpret_mb_mode_P,在其中它把当前宏块的分块方式及其模式存入到 currMB数据结构中,以便在函数readMotionInfoFromNAL获取当前块的运动矢量,在 readCBPandCoeffsFromNAL函数中获得预测差值。

3. 在B类型的片中帧间预测

与先前图像编码标准相比,在H.264/AVC标准中B类型片的概念得到推广,最大特点是由B类型片所组成B帧可以作为其他图像的参考帧。 B类型片与P类型片最本质的区别是在B类型片中宏块或其子块的预测值是通过两个不同运动补偿值加权平均后取得的。B类型片使用两组不同参考图像,分别为 list0(前向参考图像集)和list1(后向参考图像集)。

在B类型片中,四组不同的宏块预测方式将支持下面四种模式:①直接方式(direct mode):这种方式不需要传送运动矢量等附加信息(side information)。②单向预测方式(inter mode):只需传送1个宏块预测信息。③多假设预测方式(multihypothesis mode):需传送两个宏块预测信息。④帧内预测方式(intra mode)。下面我们分别具体介绍直接预测方式和多假设预测方式。

(1)直接预测方式(direct mode)

直接方式使用双向预测方式,传送预测差值。这种方式前向和后向运动矢量(mv0,mv1)是通过随后的参考图像(RL1)上公共确定宏块(co-located macroblock)的运动矢量(mvc)计算得到的。使用直接预测方式的宏块与公共确定宏块应具有相同的分块。

其中MV0为前向运动矢量,MV1为后向运动矢量,MVC代表着随后帧间图像公共确定块运动矢量。对于先前B帧概念而言,TDD为当前帧前一帧与后一帧相差的时间。TDB为当前B帧图像与前一帧的时差。当使用多帧预测后,这种概念发生变化。TDB为当前帧与其前向参考帧RL0之间的时差,而TDD为前向参考帧RL0与后向参考帧RL1之间的时差。在H.264/AVC标准中,直接预测方式因对预测信号进行混合加权运算,比先前标准中使用平均加权方式得到改善。这种技术最适合音乐电视和电影结尾的使用,它们通常是场景慢慢衰弱的。特别是在电影的结尾,场景逐渐衰弱成黑幕。在先前标准中没有好的压缩方式这种情况很难编码。如果把这种现象编码成PBBB模式,由于平均加权将使得第一和第三个B帧相对于周围的帧内、帧间帧及第二个B帧有较大的图像恶化,而基于帧间相对距离的混合加权方式却可以大大改善。

其中c为当前B帧中宏块或块中抽样值,cp为前向参考图像预测宏块或块中抽样值,cs为后向参考图像预测宏块或块中抽样值。

(2)多假设预测方式(multihypothesis mode)

多假设预测方式需要叠加由两个运动矢量所预测两个宏块预测值。我们把每个块预测值称为假设(hypotheses)。最后预测块通过两个假设的运动矢量得到的预测值平均后得到。多假设预测与双向预测方式不同。双向预测方式只允许前后向预测对线性组合而成。见图8。而多假设预测方式取消这种限制,它可以一个方向上预测对来获取最终的预测值。可以(前向,前向)或(后向,后向)进行预测。

当第一个假设来源于先前参考图像而第二个假设来源于后向参考图像时,多假设预测方式也可以成为双向预测方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高性能mysql 第10章 复制

复制功能不仅能够构建高可用的应用,同时也是高可用性,可扩展性,灾难恢复,备份以及数据仓库等工作的基础。 mysql支持两种复制方式:基于语句的复制和基于行的复制。基于语句的复制(也成为逻辑复制&#xff0…

vb6在后台将窗体保存到图片_如何将寺库网多个商品图片一键分类保存到一个目录...

寺库网是全球最大的奢侈品网上在线购物平台,那么我们怎样可以从寺库网上一键批量采集到多个宝贝商品图片,并分类保存到电脑呢?今天小编给大家带来一款专业电商图片链接采集软件【载图助手】,它支持平台高达141个,均可支…

Java笔记07-List、Set、数据结构、Collections

Java笔记07-List、Set、数据结构、Collections 主要内容 数据结构List集合Set集合Collections 第一章 数据结构 2.1 数据结构有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组&#xff…

Apache安装问题:configure: error: APR not found . Please read the documentation

参考:http://cuisuqiang.iteye.com/blog/2068794 http://www.cnblogs.com/Anker/p/3355573.html pcre: https://ftp.pcre.org/pub/pcre/ http://www.linuxidc.com/Linux/2012-06/62289.htm 1. 不赞成去卸载httpd的东西。 2. server上可以存在多个apache。一个是rpm&…

浮动与定位

2019独角兽企业重金招聘Python工程师标准>>> 一.浮动:float:一个元素浮动时,其他内容会"环绕"该元素. 浮动元素的外边距不会合并浮动的元素不能超出其包含快的内边界浮动元素彼此会避免重叠浮动元素的顶端不能比之前所有浮动元素或块级元素的顶端更高如果…

驱动级的自动按键_Aqara全自动智能推拉锁D100,体验全自动开门的便捷

大家好,我是梦想是个猪,今天为大家带来的是一篇智能门锁的使用体验。前言家里的这张门陆陆续续的换了好几把智能门锁了,也体验了好几种不同的开锁方式。最开始开发商给安装的是一把指纹和把手分离的那种款式,开锁的时候需要先输入…

码率问题

帧率影响的是每帧的额定比特数 我说的帧率是编码帧率,不是采集帧率。对于一个采集后的序列,MAD 只跟参考帧有关。而编码帧率与参考帧无关,因此编码帧率不影响 MAD。 ———————————————————————————————————…

Java笔记08-Map详解

第一章 Map集合 1.1 概述 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象…

Node.js的helloworld 程序

用文本编辑器,如npp,键入例如以下代码,存储成hello.js console.log(hello) console.log(hello %s->%d,jeapedu, 1941847311) cmd进入dos。切入hello.js所在文件夹。运行node.js程序 node hello.js执行结果例如以下所看到的: C:\nodeS>n…

深度学习综述

摘要: 深度学习可以完成需要高度抽象特征的人工智能任务,如语音识别、图像识别和检索、自然语言理解等。深层模型是包含多个隐藏层的人工神经网络,多层非线性结构使其具备强大的特征表达能力和对复杂任务建模能力。训练深层模型是长期以来的难…

mac svn工具_Cornerstone 4 for mac(svn管理工具)

Cornerstone 4 for mac是全新版本的svn管理工具,使用cornerstone for mac 特别版建立的版本控制更利于使用,而且cornerstone 4 特别版全面支持Subversion的功能,这里准备了最新版本的cornerstone for mac 特别版,无需激活&#xf…

I帧、B帧和P帧的特点和编码的基本流程

I帧、B帧和P帧的特点: I帧:帧内编码帧I帧特点:1.它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;2.解码时仅用I帧的数据就可重构完整图像;3.I帧描述了图像背景和运动主体的详情;4.I帧不需要参考其他画面而生成;5.I帧是P帧和B帧的参考帧(其质量直接影响到同组…

Java笔记11-【异常、线程】

主要内容 异常、线程 第一章 异常 1.1 异常概念 异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中,出现的…

摘抄自知乎的redis相关

1.知乎日报的基础数据和统计信息是用 Redis 存储的,这使得请求的平均响应时间能在 10ms 以下。其他数据仍然需要存放在另外的地方,其实完全用 Redis 也是可行的,主要的考量是内存占用。就使用经验而言,Redis 的数据结构很丰富&…

Java微信开发_00_资源汇总贴

1.微信公众平台技术文档(https://mp.weixin.qq.com/wiki?tresource/res_main&idmp1445241432) 2.微信企业号开发接口文档(http://qydev.weixin.qq.com/wiki/index.php?title%E4%B8%BB%E5%8A%A8%E8%B0%83%E7%94%A8) 3.企业微…

webgl获取鼠标形状_三模无线搭配对称手型设计,游戏致胜利器,ROG烈刃2无线鼠标...

要想有效地提升游戏体验,我认为除了电脑主机本身的硬件配置要尽可能的硬核之外,玩游戏时所选配的鼠标、键盘等外设的作用也是不可忽视的,所以很多比较注重游戏体验的游戏爱好者都会选择一款自己用着比较顺手的游戏外设装备。我这次入手的华硕…

牛人学习h264运动估计的方法

转载自:http://bbs.chinavideo.org/forumdisplay.php?fid29 Chinavideo,一个非常棒的学习论坛 从答辩结束(2008-12-13)起就想写一篇文章给学习运动估计的朋友们,因为我知道有很多正在写论文的朋友们,特别是正在入门的朋友们&…

Java笔记11-软件开发流程设计原则

今天内容: 1.常用的设计原则2.常用的设计模式3.常用的查找算法4.常用的排序算法 1.常用的设计原则(记住) 1.1软件的开发流程 软件开发授权-投标 -> 100万 1. 编写需求分析文档 > 2. 概要设计文档(架构) > 3. 详细设计文档(类图) > 4. 编码(项目经理分具体任…

magnify.m —— 图像局部放大镜工具函数

magnify.m 函数下载地址:magnify - File Exchange - MATLAB Central; magnify.m 函数在执行时,是一种交互式处理。 简单演示如下: clear, clc% 加载图像到内存,如读取matlab自带的图像,并将其显示出来 I i…

【大数据系列】hadoop单节点安装官方文档翻译

Hadoop: Setting up a Single Node Cluster. HADOOP:建立单节点集群 PurposePrerequisites Supported PlatformsRequired SoftwareInstalling SoftwareDownloadPrepare to Start the Hadoop ClusterStandalone OperationPseudo-Distributed Operation Configuration…