MPEG4 H.264学习笔记之三 ------ 熵编码

3.5 熵编码
熵编码把一系列用来表示视频序列的元素符号转变为一个用来传输或是存储的压缩码流.输入的符号可能包括量化的变换系数(像上面所说的运行级或零树),运动向量(对于每个运动补偿块的向量值x和y),标记(在序列中用来表示重同步位的点),头(宏块头,图象头,序列的头等)以及附加信息(对于正确解码来说不重要的信息).在这一节中,我们将介绍一些预测性的预编码的方法(用来表示编码帧中的区域关系)在之后接着介绍两种被广泛使用的熵编码技术----修改后的哈夫曼编码和算术编码.

3.5.1 预测编码
在图象的某些区域中,某些符号是高度相关的.比如说,相邻的intra编码块的平均值或DC值是非常相近的,相邻的运动向量可能会有相似的x和y值,等等.编码效率可以由从前面编码的数据预测当前块或宏块的元素,并编码它们之间的差异值来进行提高.一个块或宏块的运动向量指明了在之前编码的帧的预测参考值的编移量.相邻块或宏块的向量经常是相关的因为物体的运动可能会经过帧的一个很大的区域.这对于很小的块或有大量运动物体的运动来说尤其是如此的.运动向量的压缩可以由从之前的编码向量来预测每个运动向量来改进.一个对于当前宏块X的向量的简单的预测是水平相邻的宏块A,三个或更多的之前编码的向量可以被用来预测宏块X的向量(比如A,B和C).预测的和实际运动向量的差值被编码并传输.

量化参数或量化器步长控制了压缩效率和图象质量的平衡量.在实时的视频编解码中,在一个编码帧中修改量化是必要的(例如改变压缩率来使编码码率与传输信道码率相适应).在相邻的宏块中很小的改变参数值就是足够的了.修改了的量化参数必须告诉解码器,而我们不把新的量化参数值传输走,而是传输一个差异值(比如+1,-1或+2,-2)来表示这个参数值变化了多少.因为用来编码差异值要比编码整个量化参数来说要使用更少的位.

3.5.2 变长编码
一个变长的编码器把输入符号映射到一系列的码字(VLC).每个符号映射到一个码字,而码字有变化的长度但是必须包括整数个位.经常出现的符号用短的VLC来表示,而不常出来的符号用长的VLC来表示.对于大量压缩符号来说,这样的操作会让压缩率提高.

3.5.2.1 哈夫曼编码
哈夫曼编码向每个VLC进行赋值的方法是基于对于不同的符号的出现机率的不同来定的.根据Huffman在1952年提出的原始设想,计算每个符号的出现机率是必要的,用这个结果来构造一系列的变长的码字.

如果分布机率值是准确的,那么哈夫曼编码提供了一种对于原始数据来说很有效的压缩方法.然而,为了达到最优化的压缩,对于不同序列的不同的码表是需要的.

3.5.2.2 预计算的哈夫曼编码
哈夫曼编码过程对于视频的编解码有两个不利的地方.首先,解码器必须使用在编码器设置的相同的码字来进行解码.传输这些信息到解码端会加大传输内容,并降低压缩效率,尤其对于短的视频序列来说.第二,对于大的视频序列的可能性值表在视频数据编码之前是不能得到的,这就会造成一些在编码过程的延时.由于这些原因,近来的图形和视频编码标准基于通常的视频序列的统计模型进行编码,用来解决这个问题.

变换系数(TCOEF)
MPEG-4视频部分使用量化系数的3D编码,它们使用每个码字来表示一个(run,level,last)的组合.总共102个特定的(run,level,last)组合有VLC值.在每个码字的last位是's',用来指明符号的解码系数符号(0表示正,1表示负).

一个包含超过八个0的run值的码字是无效的,这样任何以000000000开始的码字都表示码流中有错误.所有的其他序列都可以被用有效的编码值来进行解码.注意最小的码被赋给小的run和小的level值中,因为它们发生的机率比较大.

运动向量差(MVD)
差值编码的运动向量被编码为一对VLC,一个是对于x值的,一个是对于y值的.注意最短的码表示小的运动向量差值(比如MVD=0表示简单的码值1).这些码表与哈夫曼值是非常相似的,因为每个符号都被赋给了唯一个码字.通常用的符号被赋了短码字,在单独的一个表中,没有码字的前缀是同其他码字相同的.

3.5.2.3 其他的变长编码
与哈夫曼和基于哈夫曼的编码一样,一些其他的VLC方法被用在了视频编码的程序中.基于哈夫曼编码的一个很大的不利是它们对于传输错误是敏感的.在VLC序列的错误会导致解码器损失同步信息,并不能正确地进行解码,这样就导致了使解码处于混乱状态.一个预定义的编码表的缺点在于解码端和编码端必须保存同样的码表.一个可代替它的方式是用如果输入的符号已知时可自生成码的方法,比如说指数Golomb编码法.

 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jasonme/archive/2005/04/10/341902.aspx

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

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

相关文章

python中的数学模块

数学模块 引入模块:import math 注意: 使用某个模块下的函数,必须先引入这个模块,否则无法正常使用。 ceil() 向上取整操作 格式:math.ceil(数值) 返回值:整型floor() 向下取整操作 格式:math.floor(数值…

公共交通WiFi末路?公交WiFi重挫 地铁WiFi承受盈利压力

之前,公交WiFi运营方16WiFi因收支严重失衡宣布暂时关闭在11个城市的公交WiFi运营,这引发了业内对公共WiFi企业生存状态的关注。 在公共WiFi领域,除了公交WiFi,另一重要市场就是地铁WiFi。作为目前国内规模最大的地铁WiFi运营方&am…

解决:TypeError: Value passed to parameter 'a' has DataType int64 not in list of allowed values: float1

报错: TypeError: Value passed to parameter a has DataType int64 not in list of allowed values: float16, float32, float64, int32, complex64, complex128原因 1.4.0版本 默认int64 代码内容: 改正 定义符合 格式

买电脑主要看什么配置_我的专业要买什么配置电脑可以用到毕业?

电脑是现代生活中不可缺少的工具智能手机的更新让许多轻量工作可以在手机上完成但复杂的文档办公、大型的音视频编辑专业的数据处理等等还是离不开电脑的操作高考结束后许多同学做的第一件事是买新手机、新电脑有的为了考后放松玩游戏有的出于兴趣学习新技能也有的同学还在考虑…

CSS3实现一束光划过图片、和文字特效

在打折图标里面 实现一道白光划过的动画效果 css: <!DOCTYPE html><html><head><meta charset"utf-8"> <style> p{ width:15%; margin:0 auto; line-height:50px; font-size:30px; text-align:center; transform-origin: 50px 50px;…

H.264编解码流程

编码&#xff1a; 蓝色的前向编码流程&#xff1a;以宏块为输入单位介绍优于以帧为单位介绍。Fn为即将进行编码的宏块&#xff0c;由原始图像中16*16像素构成。每个宏块要么采用帧内模式编码&#xff0c;要么采用帧间模式编码。不管是哪种编码模式&#xff0c;预测宏块P都是基…

远程管理服务器的具体操作方法

远程是管理服务器最常见的一种方式&#xff0c;租用服务器也好&#xff0c;把服务器托管给服务商也好&#xff0c;肯定不会经常去机房办公&#xff0c;有什么问题的话大家都是选择远程服务器。其实远程服务器就跟我们远程电脑是一样的&#xff0c;具体需要怎么操作可能有的人还…

python中的OS模块

OS模块 OS 操作系统的简称 os模块就是对操作系统进行操作&#xff0c;使用该模块必须先导入模块&#xff1a; import osos模块中的函数 getcwd() 功能&#xff1a;获取当前的工作目录 格式&#xff1a;os.getcwd() 返回值&#xff1a;路径字符串chdir() 功能&#xff1a;修改…

JavaWeb基础—dbutils的简单入门

简明入门教程&#xff0c;参考&#xff1a;https://www.cnblogs.com/CQY1183344265/p/5854418.html 进行此章节之前&#xff0c;介绍一个JdbcUtils的再次的简单封装 &#xff08;例如后面需要构造QueryRunner时得到数据源等的简便的操作&#xff09; package cn.itcast.jdbcuti…

macos安装vscode_VS Code 代码编辑器入门指南:核心组件与概念

作者&#xff1a;思考问题的熊写在前面如果当电脑只能装一个软件还需要尽量不影响日常学习工作时&#xff0c;不知道你的选择会是什么。我把这个看似「荒诞」的问题理解为「All-in-One」的升级版拷问。这个问题陪伴了我很久&#xff0c;每用一个软件我都会想想它对我究竟有多不…

环路滤波一些概念

熵编码需要编码的数据如下&#xff1a; 熵编码需要编码的数据如下&#xff1a;

【深度学习】TensorFlow之卷积神经网络

卷积神经网络的概念 在多层感知器&#xff08;Multilayer Perceptrons&#xff0c;简称MLP&#xff09;中&#xff0c;每一层的神经元都连接到下一层的所有神经元。一般称这种类型的层为完全连接。 多层感知器示例 反向传播 几个人站成一排第一个人看一幅画&#xff08;输入数…

python中的zip模块

zip压缩 引入模块&#xff1a; import zipfilezip文件格式是通用的文档压缩标准&#xff0c;在ziplib模块中&#xff0c;使用ZipFile类来操作zip文件&#xff0c;下面具体介绍一下&#xff1a; zipfile.ZipFile(file[, mode[, compression[, allowZip64]]]) 功能&#xff1a;…

[LeetCode] 35. Search Insert Position

Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You may assume no duplicates in the array. Here are few examples.[1,3,5,6], 5 → 2[1,3,5,6], 2 → 1[1…

golang 的交叉编译

为什么80%的码农都做不了架构师&#xff1f;>>> Go是一门编译型语言&#xff0c;所以在不同平台上&#xff0c;需要编译生成不同格式的二进制包。 由于Go 1.5对跨平台编译有了一些改进&#xff0c;包括统一了编译器、链接器等。 编译时候只需要指定两个参数&#x…

【深度学习】Cifar-10-探究不同的改进策略对分类准确率提高

cifar10数据集上进行图片分类&#xff0c;基于tensorflow框架&#xff0c; 旨在探究不同的改进策略对分类准确率的影响&#xff0c;如何一步步得提高准确率 一、问题描述 当我们在处理图像识别或者图像分类或者其他机器学习任务的时候&#xff0c;我们总是迷茫于做出哪些改进…

Acer 4750 安装黑苹果_黑苹果 MacOS 10.15 Catalina安装教程

一、准备工作一个8G以上的U盘(安装 10.15 Catalina 必须要16G及以上的U盘 )&#xff1b;Mac OS镜像、TransMac(刻录工具)、DiskGenius(分区工具)、EasyUEFI(引导工区)、EFI驱动文件。安装工具获取方式&#xff1a;关注公众号【远景论坛】&#xff0c;回复&#xff1a;黑苹果二、…

帧内16*16模式的宏块数据传输顺序

如果宏块以16*16帧内模式编码&#xff0c;那么块-1首先被传输&#xff0c;携带的信息是每个4*4亮度块的DC系数。然后&#xff0c;亮度残差块0-15被传输&#xff08;此时&#xff0c;16*16帧内宏块的DC系数为零&#xff09;。对于亮度分量Cb和Cr&#xff0c;16和17块携带DC系数的…

ceph中查看一个rbd的image的真实存储位置

1、新建一个image存储 rbd create hzb-mysql --size 2048 2、查看hzb-mysql的所有对象 一个rbd image实际上包含了多个对象&#xff08;默认情况下是image_size/4M&#xff09; [rootcc ~]# rbd info hzb-mysql rbd image hzb-mysql:size 2048 MB in 512 objectsorder 22 (4096…

python中的shutil模块

shutil模块 引入&#xff1a; import shutil copy() 功能&#xff1a;复制文件 格式&#xff1a;shutil.copy(来源文件,目标地址) 返回值&#xff1a;复制之后的路径copy2() 功能&#xff1a;复制文件&#xff0c;保留元数据 格式&#xff1a;shutil.copy2(来源文件,目标地址…