抗误码技术

抗误码技术:

       视频传输过程中的错误是不可避免的,抗误码技术历来都足视频领域一个研究的热点。H264标准继承r以前视频编码标准中某些优秀的错误恢复工具,同时也改进和创新了多种错误恢复丁具。这些错误恢复的工具主要有:参数集、数据分割、FMO、冗余片、帧内编码等。

参数集

       参数集是H264标准的个新概念,是种通过改进视频码流的结构增强错误恢复能力的方法。其所包含的信息极为重要,它的受损将影响到大量的VCL和NAL单元,且被影响的单元即使能正确接收到也不能被正确解码,在H.264标准中共使用了两种类型的参数集。


(1)序列参数集(SPS),包括与图像序列(定义为两个IDR图像间的所有图像)有关的所有信息,应用于已编码视频序列。
(2)图像参数集(PPS),包括所有属于该图像的片的相关信息,用于解码已编码视频序列中的1个或多个独立的图像。

        图像参数集本身也要使用和参考序列参数集中的参数。多个不同的参数集存储在解码器中,解码器通过参考每个已解码片的片头来选择使用恰当的参数集。参数集的灵活使用大大增强了H.264抗误码的性能。在有误码倾向环境下,使用参数集的关键是,在相应的VCL与NAL单元到达解码器时,确保参数集已及时可靠地到达解码器。参数集具体实现的方法主要有:

1、通过带外传输,这种方式要求参数集通过可靠的协议,在首个片解码之前传输到解码器;2、通过带内传输,这需要为参数集提供更高级别的保护,例如发送复制多个分组来保证至少有一个到达目标。由于第一种方法需要额外的一个信道,以及可靠的传输机制,如果条件许可,应用这种传输方式能增强编解码器的抗误码能力,但限于网络资源的现状,采用第二种方式似乎更为合理一些。

数据分割

        由于码流中的各语法元素的重要性各不相同,因此可以依据各语法元素的重要性使用不对等保护(UEP)技术来提高解码端的解码效果。在H.264中,一个片最多可以被分为3部分,分别属于A、B和C三类,每部分被单独封装为一个NAL单元。

       其中,数据A主要包含头信息,比如宏块类型、量化参数以及运动矢量等,这些参数具有最高级别的重要性。数据B主要包含帧内编码块的编码模式以及帧内编码块的变换系数。这部分数据的丢失将会严重影响其后续帧的解码质量。数据C主要包括帧间编码块的编码模式以及帧间编码块的变换系数。与数据A和数据B相比,这部分数据的重要性最差,然而它却是码流数据的最大组成部分。
      

       可以看出,数据B和数据C都要依赖于数据A的正确接收才有效,而这两部分在语法上是独立的。由于数据A重要性最强,同时其数据量也最小,因此可以使用更可靠的信道来传输或是使用纠错能力更强的码字来保护。事实上,在码流无法完全到达接收端时,数据A的重要性也可以体现在解码端错误掩藏的运用上,这是由于运动矢量在进行时域错误掩藏上是非常重要的,且一般能取得非常好的效果,同时具有很低的运算量。

灵活的宏块排序(FMo)

        灵活的宏块排序FMO是H.264的一大特色,适用于H.264的基本档次和扩展档次的应用。H.264标准允许以各种方式将宏块组成片,这样做法的好处是:(1)减小帧内误差传播。由于标准禁止帧内预测在不同片之间进行,这样可以避免一个包错误引起的错误传播至下一个片。(2)有利于解码端错误掩藏的实施。当丢失块以棋盘格或行交织的形式出现(如图2.1l所示)时,解码端采用错误掩藏技术可以取得非常好的重建图像。这是因为在对丢失块进行错误掩藏时主要利用块之间的平滑性来恢复,因此当丢失块周围的块都完好时可以取得不错的效果。在本文后面的试验过程中,正是采用FMO中的棋盘格模式,使得丢失块周围有尽可能多的可参考宏块用于错误恢复。

        灵活的宏块排序(FMO)可以看成是做片交织技术的一般形式,它可以任意定义片的形状,其主要目的就是将错误均匀的分散到整帧而不是某个局部区域。图2.11显示的棋盘格和行交织式的FMO形式。当使用FMO时,参数集中将增加一个宏块分配表(MBA.Map),且帧中的每个块都将按照空间光栅扫描顺序依次映射在宏块分配表中,该块在表中的数字代表了块属的片,在图2.11中,“O"代表白色块,“1"代表灰色块。实际上,宏块分配表支持任意形状的宏块组织方式:矩形、棋盘格式、交织行等。FMO的使用,虽然提高了抗误码性能,却是以牺牲编码效率为代价的。因为它打破了原先非邻居MB之间的预测,这在高度优化的环境中,有比较高的延迟。

冗余片(Redundant Slice)

        冗余片技术,简单地讲就是,在同一个比特流中,编码器除了片自身中已编码地宏块放置其中外,同一宏块地1个或多个冗余地表示也同时被放置其中,通过利用宏块的1个或多个冗余表示来克服误码造成的不可用片对重构图像的影响。需要注意的是,这些冗余片的编码参数与非冗余片的编码参数不同,例如主片可用低QP(高质量)来编码,而冗余片信息可以用高QP(低质量)的方式编码,这样质量粗糙一些但码率更低。解码器在重构时,首先使用主片,如果它可用就抛弃冗余片;而如主片丢失(比如因为分组丢失)冗余片也能被用于重构。

        从上面的说明可以看出,这种冗余片技术与基于冗余的传输,如包复制有着本质的区别。在包复制冗余传输中,被复制的包和复制包一摸一样,而冗余片技术由于其编码参数的选择,具有较低的码率。因此,这种技术是在花销较小比特数的情况下,最大限度地保证重构图像的质量,尤其是在有误码倾向的移动信道或IP信道环境下,采用冗余片技术可以显著提高重构图像的主客观质量。

帧内编码

        帧间编码由于充分利用了连续序列的帧间高度相关性,具有很高的编码效率,但是同时也对误码非常敏感,且错误会在帧间迅速传播,使图像质量急剧恶化。与之相比,帧内编码不以任何重建帧为参考,可以有效防止错误扩散问题。因此,H.264也采用帧内编码宏块作为一种抗误码的手段,并较之前标准做了改进。在H.264中,存在两种完全由Intra编码宏块组成的片:传统的帧内编码Slice和IDR帧的Slice。IDR帧的片在进行帧内编码时将完全清空短期参考帧缓存(Short-Term Reference FrameBuffer)内的数据,因此它可以完全去除解码前面帧所带来的积累误差。对于传统的帧内编码Slice,仅可以去除前面解码帧误差对于本帧的影响,这是因为它没有清空短期参考帧缓存,因此在此后帧解码时仍将参考此Intra帧前面的已解码帧,导致误差或错误将向后传播。从这个角度来说,这种Intra帧的同步性要弱于同为Intra编码的IDR帧。

        如果在视频序列的编码过程中,在一定时间间隔内插入IDR帧,不仅能改善解码端的视频重建质量,也能起到抑制误码扩散的作用。当然这是以牺牲编码效率为代价的,多帧参考相对于单帧参考能较好的提高编码效率。同时,帧内编码相对于帧间编码方式,其编码效率也大大降低。H.264通过引入帧内编码特别是IDR帧)的方式来提升码流的错误恢复能力是以编码效率为代价的。

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

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

相关文章

Linux统计文件行数、字数、字节数

2019独角兽企业重金招聘Python工程师标准>>> 语法:wc [选项] 文件 说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符…

【Tensorflow】人脸128个关键点识别基于卷积神经网络实现

引言: 卷积神经网络 卷积神经网络最早是为了解决图像识别的问题,现在也用在时间序列数据和文本数据处理当中,卷积神经网络对于数据特征的提取不用额外进行,在对网络的训练的过程当中,网络会自动提取主要的特征.卷积神经网络直接用原始图像的全部像素作为输入,但是内…

python 爬虫 包_python爬虫学习之路-抓包分析

利用浏览器抓包,是爬虫中的很实用的技能。在爬虫编程之前,我们要对抓取的目标页面有所了解,比如浏览器的这个请求这个页面中间都经历了什么,数据是怎么发送和返回的。 抓包的作用 我把抓包分析的作用简单列一下: 分析请…

帧间EC原理和过程

出错的宏块(图中灰色表示)根据上、下、左、右四个方向相邻宏块的不同分割情况及预测类型进行插值。将最后的结果中进行比较,选取边界像素差值之和最小者为最优的EC方案。其步骤为: 1、判断相邻宏块左上角8*8块的预测模式是否大于R…

Maven依赖的是本地工程还是仓库jar包?

相信大家都碰见过maven配置的依赖或者是jar包或者是工程,在开发的过程当中,我们当然需要引入的是工程,这样查看maven依赖的文件的时候,就能直接查看到源码。 一、本地工程依赖 举个例子,其架构如下所示(以下…

关于django新版本无法使用MySQL数据库的问题

关于django新版本无法使用MySQL数据库的问题 参考这里 稍微记录下Django2.2使用MariaDB和MySQL遇到的坑 现在演示一下整个流程吧 1.创建项目和应用 PS:你也可以使用PyCharm直接创建项目 2.注册应用 先把刚刚创建的应用添加进去 3.配置MySQL或者MariaDB 4.PyMySQL替…

python连接sql数据库_python连接sql server数据库实现增删改查

简述 python连接微软的sql server数据库用的第三方模块叫做pymssql(document:http://www.pymssql.org/en/stable/index.html)。在官方文档可以看到,pymssql是基于_mssql模块做的封装,是为了遵守python的DBAPI规范接口.…

es5.0 安装head插件

es5.0的安装和之前的版本有些区别,我的电脑用plugin install 没成功, 查了一下资料,说是可以用grunt进行安装,启动; 1,先安装grunt: grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等等的工作,5.0里的head插件就是通过grunt启动的。 npm ins…

套接字 资料查阅

(3)套接字(socket) 一个完整的网络应用程序包括客户端和服务器两个部分。网间通信进程需要由两个进程组成,并且只能用同一种协议。也就是说,不能在通信的一端使用TCP协议,而另一端则用UDP协议。一个完整的网络通信需要一个五元组来标识…

linux mysql安装_Linux下安装mysql服务(超详细)

Mysql数据库的安装对于开发者来说,是我们必然会面对的问题,它的安装过程其实并不复杂,并且网络上的安装教程也非常多,但是对于新手来说,各种不同形式的安装教程,又给新手们带来了要选择哪种方式进行安装的难…

day2 操作系统

一.为何要有操作系统 程序员无法把所有的硬件操作细节都了解到,管理这些硬件并且加以优化使用是非常繁琐的工作,这个繁琐的工作就是操作系统来干的,有了他,程序员就从这些繁琐的工作中解脱了出来,只需要考虑自己的应用…

python安装不了jupyter_python学习笔记——Windowns下Python3之安装jupyter

Windowns下Python3之安装jupyter Jupyter notebook: 一个交互式笔记本,支持运行40多种编程语言。 利用它来写Python,代码和运行结果都可以保存下载,十分方便。本文主要以自身的安装过程为例,结合遇到的问题&#xff0c…

matlab 三维核密度图_Matlab精彩画图示例:三维网状图和三维曲面图

接上篇:Matlab精彩画图示例:绘制图上图这篇介绍两个绘制三维图的命令:mesh - 绘制三维网状图surf - 绘制三维曲面图matlab代码如下:绘制三维图的matlab代码示例程序运行结果如下:mesh(X,Y,Z) draws a wireframe mesh w…

JDBC1

1.jdbc的概述 是sun公司统一提供的一套接口规范,各个数据库生产商提供实现 注册驱动,获得连接,获得执行的SQL语句对象,释放资源 package com.learn.jdbc;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;import org.junit.Test;publ…

python程序怎么保存到u盘_python实现usb自动拷贝程序的方法

python实现usb自动拷贝程序的方法 发布时间:2020-06-28 09:07:05 来源:亿速云 阅读:135 作者:清晨 这篇文章将为大家详细讲解有关python实现usb自动拷贝程序的方法,小编觉得挺实用的,因此分享给大家做个参考…

young people can also be a leader

2019独角兽企业重金招聘Python工程师标准>>> The leaders or directors of organizations are often older people. But some people say that young people can also be a leader. To what extent do you agree or disagree? In my view , young people can also …

BZOJ 2004 公交线路(状压DP+矩阵快速幂)

注意到每个路线相邻车站的距离不超过K&#xff0c;也就是说我们可以对连续K个车站的状态进行状压。 然后状压DP一下&#xff0c;用矩阵快速幂加速运算即可。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <algorithm>#define…

python爬取网易云歌单_详解python selenium 爬取网易云音乐歌单名

目标网站&#xff1a;首先获取第一页的数据&#xff0c;这里关键要切换到iframe里打印一下获取剩下的页数&#xff0c;这里在点击下一页之前需要设置一个延迟&#xff0c;不然会报错。结果&#xff1a;一共37页&#xff0c;爬取完毕后关闭浏览器 完整代码&#xff1a; url htt…

Idea的一些调试技巧及设置todo

程序员的工作内容&#xff0c;除了大部分时间写代码之外&#xff0c;因为有不少的时间是用在调试代码上。甚至说不是在调试代码&#xff0c;就是即将调试代码。 :) 今天我们来谈谈调试代码的一些技巧&#xff0c;在使用IDE提供的debugger时一些快速定位问题的方式。 看到这里的…

Maven:基本使用

为什么80%的码农都做不了架构师&#xff1f;>>> 1.项目管理工具&#xff1a; Maven的repository&#xff0c;说白了就是dependency的仓库&#xff0c;它按照一定的规则将dependency存放起来&#xff0c;以作缓存&#xff0c;如果本机的 repository找不到某个depen…