算术编码算法的分析与实现

算术编码算法的分析与实现
算术编码算法的分析与实现

中衡算法分析与【设计明细】-实验二-哈夫曼编码

昆明理工大学信息工程与自动化学院学生实验报告 (201 —201 学年第一学期) 课程名称:算法设计与分析开课实验室:年月日 一、上机目的及内容 1.上机内容 设需要编码的字符集为{d1, d2, …, dn},它们出现的频率为{w1, w2, …, wn},应用哈夫曼树构造最短的不等长编码方案。 2.上机目的 (1)了解前缀编码的概念,理解数据压缩的基本方法; (2)掌握最优子结构性质的证明方法; (3)掌握贪心法的设计思想并能熟练运用。 二、实验原理及基本技术路线图(方框原理图或程序流程图) (1)证明哈夫曼树满足最优子结构性质; (2)设计贪心算法求解哈夫曼编码方案; (3)设计测试数据,写出程序文档。 数据结构与算法: typedef char *HuffmanCode; //动态分配数组,存储哈夫曼编码 typedef struct { unsigned int weight; //用来存放各个结点的权值 unsigned int parent,LChild,RChild; //指向双亲、孩子结点的指针 } HTNode, *HuffmanTree; //动态分配数组,存储哈夫曼树 程序流程图:

三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及VISUAL C++6.0软件

四、实验方法、步骤(或:程序代码或操作过程) 程序代码: #include #include #include typedef struct { unsigned int weight; unsigned int parent,LChild,RChild; } HTNode, *HuffmanTree; //动态分配数组,存储哈夫曼树 typedef char *HuffmanCode; //动态分配数组,存储哈夫曼编码 void Select(HuffmanTree *ht,int n,int *s1,int *s2) { int i,min; for(i=1; i<=n; i++) { if((*ht)[i].parent==0) { min=i; break; } } for(i=1; i<=n; i++) { if((*ht)[i].parent==0) { if((*ht)[i].weight<(*ht)[min].weight) min=i; } } *s1=min; for(i=1; i<=n; i++) { if((*ht)[i].parent==0 && i!=(*s1)) { min=i; break; } } for(i=1; i<=n; i++) { if((*ht)[i].parent==0 && i!=(*s1)) { if((*ht)[i].weight<(*ht)[min].weight)

常见的视频编码详解

常见的视频编码详解 A VI所采用的压缩算法并无统一的标准。也就是说,同样是以A VI为后缀的视频文件,其采用的压缩算法可能不同,需要相应的解压软件才能识别和回放该A VI文件。除了Microsoft 公司之外,其他公司也推出了自己的压缩算法,只要把该算法的驱动(Codec)加到Windows 系统中,就可以播放用该算法压缩的A VI文件。最新流行的MPEG-4视频也借用A VI的名称,只要机器安装了它的编码解码,也能够实现正常的播放。这些A VI都能够在用Authorware 或PowerPiont开发的作品当中正常放映。各种编码Codec所生成的A VI文件的大小和质量是不同的,对系统和硬件要求也不同。 因此在压缩A VI时,必须根据计算机的软硬件情况,来考虑采用什么Codec算法,否则你的作品中视频放映是难以令人满意的。下面就是对各种常见编码解码Codec的说明。 常见的视频编码 1、Cinepak Codec by Radius 它最初发布的时候是用在386的电脑上看小电影,在高数据压缩率下,有很高的播放速度。利用这种压缩方案可以取得较高的压缩比和较快的回放速度,但是它的压缩时间相对较长。 2、Microsoft Video 1 用于对模拟视频进行压缩,是一种有损压缩方案,最高仅达到256色,它的品质就可想而知,一般还是不要使用它来编码A VI。 3、Microsoft RLE 一种8位的编码方式,只能支持到256色。压缩动画或者是计算机合成的图像等具有大面积色块的素材可以使用它来编码,是一种无损压缩方案。 4、Microsoft H.261和H.263 Video Codec 用于视频会议的Codec,其中H.261适用于ISDN、DDN线路,H.263适用于局域网,不过一般机器上这种Codec是用来播放的,不能用于编码。 5、Intel Indeo Video R3.2 所有的Windows版本都能用Indeo video 3.2播放A VI编码。它压缩率比Cinepak大,但需要回放的计算机要比Cinepak的快。 6、Intel Indeo Video 4和5

视频压缩编码方法简介—AVI

视频压缩编码方法简介—AVI AVI(Audio Video Interleave)是一种音频视像交插记录的数字视频文件格式。1992年初Microsoft公司推出了AVI技术及其应用软件VFW(Video for Windows)。在AVI文件中,运动图像和伴音数据是以交织的方式存储,并独立于硬件设备。这种按交替方式组织音频和视像数据的方式可使得读取视频数据流时能更有效地从存储媒介得到连续的信息。构成一个AVI文件的主要参数包括视像参数、伴音参数和压缩参数等: 1、视像参数 (1)、视窗尺寸(Video size):根据不同的应用要求,AVI的视窗大小或分辨率可按4:3的比例或随意调整:大到全屏640×480,小到160×120甚至更低。窗口越大,视频文件的数据量越大。 (2)、帧率(Frames per second):帧率也可以调整,而且与数据量成正比。不同的帧率会产生不同的画面连续效果。 2、伴音参数:在AVI文件中,视像和伴音是分别存储的,因此可以把一段视频中的视像与另一段视频中的伴音组合在一起。AVI 文件与WAV文件密切相关,因为WAV文件是AVI文件中伴音信号的来源。伴音的基本参数也即WAV文件格式的参数,除此以外,AVI文件还包括与音频有关的其他参数: (1)、视像与伴音的交织参数(Interlace Audio Every X Frames)AVI格式中每X帧交织存储的音频信号,也即伴音和视像交替的频率X是可调参数,X的最小值是一帧,即每个视频帧与音频数据交织组织,这是CD-ROM上使用的默认值。交织参数越小,回放AVI文件时

读到内存中的数据流越少,回放越容易连续。因此,如果AVI文件的存储平台的数据传输率较大,则交错参数可设置得高一些。当AVI文件存储在硬盘上时,也即从硬盘上读AVI文件进行播放时,可以使用大一些的交织频率,如几帧,甚至1秒。 (2)、同步控制(Synchronization) 在AVI文件中,视像和伴音是同步得很好的。但在MPC中回放AVI文件时则有可能出现视像和伴音不同步的现象。 (3)、压缩参数:在采集原始模拟视频时可以用不压缩的方式,这样可以获得最优秀的图像质量。编辑后应根据应用环境环择合适的压缩参数。 3、 AVI数字视频的特点 (1)、提供无硬件视频回放功能:AVI格式和VFW软件虽然是为当前的MPC设计的,但它也可以不断提高以适应MPC的发展。根据AVI格式的参数,其视窗的大小和帧率可以根据播放环境的硬件能力和处理速度进行调整。在低档MPC机上或在网络上播放时,VFW的视窗可以很小,色彩数和帧率可以很低;而在Pentium级系统上,对于64K色、320×240的压缩视频数据可实现每秒25帧的回放速率。这样,VFW就可以适用于不同的硬件平台,使用户可以在普通的MPC上进行数字视频信息的编辑和重放,而不需要昂贵的专门硬件设备。 (2)、实现同步控制和实时播放:通过同步控制参数,AVI可以通过自调整来适应重放环境,如果MPC的处理能力不够高,而AVI文件的数据率又较大,在WINDOWS环境下播放该AVI文件时,播放器可

算术编码

实现算术编码及其译码 一、实验内容 借助C++编程来实现对算术编码的编码及其译码算法的实现 二、实验环境 1.计算机 2.VC++6.0 三、实验目的 1.进一步熟悉算术编码的原理,及其基本的算法; 2.通过编译,充分对于算术编码有进一步的了解和掌握; 3.掌握C++语言编程(尤其是数值的进制转换,数值与字符串之间的转换 等) 四、实验原理 算术编码 算术编码的基本原理是将编码的消息表示成实数0和1之间的一个间隔,消息越长,编码表示它的间隔就越小,表示这一间隔所需的二进制位就越多。 算术编码用到两个基本的参数:符号的概率和它的编码间隔。信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0到1之间。编码过程中的间隔决定了符号压缩后的输出。 给定事件序列的算术编码步骤如下: (1)编码器在开始时将“当前间隔”设置为[0,1)。 (2)对每一事件,编码器按步骤(a)和(b)进行处理 (a)编码器将“当前间隔”分为子间隔,每一个事件一个。 (b)一个子间隔的大小与下一个将出现的事件的概率成比例,编码器选择子间隔对应于下一个确切发生的事件相对应,并使它成为新的“当前间 隔”。 (3)最后输出的“当前间隔”的下边界就是该给定事件序列的算术编码。 编码过程 假设信源符号为{A, B, C, D},这些符号的概率分别为{ 0.1, 0.4, 0.2,0.3 },根据这些概率可把间隔[0, 1]分成4个子间隔:[0, 0.1], [0.1, 0.5],

[0.5, 0.7], [0.7, 1],其中[x,y]表示半开放间隔,即包含x不包含y。上面的信息可综合在表03-04-1中。 下表为信源符号,概率和初始编码间隔 如果二进制消息序列的输入为:C A D A C D B。编码时首先输入的符号是C,找到它的编码范围是[0.5,0.7]。由于消息中第二个符号A的编码范围是[0,0.1],因此它的间隔就取[0.5, 0.7]的第一个十分之一作为新间隔[0.5,0.52]。依此类推,编码第3个符号D时取新间隔为[0.514, 0.52],编码第4个符号A 时,取新间隔为[0.514, 0.5146],…。消息的编码输出可以是最后一个间隔中的任意数。整个编码过程如图03-04-1所示。 编码和译码的全过程分别表示在下表。 编码过程

实验三.哈夫曼编码的贪心算法设计

实验四 哈夫曼编码的贪心算法设计(4学时) [实验目的] 1. 根据算法设计需要,掌握哈夫曼编码的二叉树结构表示方法; 2. 编程实现哈夫曼编译码器; 3. 掌握贪心算法的一般设计方法。 实验目的和要求 (1)了解前缀编码的概念,理解数据压缩的基本方法; (2)掌握最优子结构性质的证明方法; (3)掌握贪心法的设计思想并能熟练运用 (4)证明哈夫曼树满足最优子结构性质; (5)设计贪心算法求解哈夫曼编码方案; (6)设计测试数据,写出程序文档。 实验内容 设需要编码的字符集为{d 1, d 2, …, dn },它们出现的频率为 {w 1, w 2, …, wn },应用哈夫曼树构造最短的不等长编码方案。 核心源代码 #include #include #include typedef struct { unsigned int weight; //用来存放各个结点的权值 unsigned int parent,LChild,RChild; //指向双亲、孩子结点的指针 } HTNode, *HuffmanTree; //动态分配数组,存储哈夫曼树 typedef char *HuffmanCode; //动态分配数组,存储哈夫曼编码 ∑=j i k k a

//选择两个parent为0,且weight最小的结点s1和s2 void Select(HuffmanTree *ht,int n,int *s1,int *s2) { int i,min; for(i=1; i<=n; i++) { if((*ht)[i].parent==0) { min=i; break; } } for(i=1; i<=n; i++) { if((*ht)[i].parent==0) { if((*ht)[i].weight<(*ht)[min].weight) min=i; } } *s1=min; for(i=1; i<=n; i++)

视频文件格式和视频编码方式区别

目前网上的各种视频格式可以说是泛滥成灾,加上各个PMP(Portable Media Player,便携式媒体播放器)生产厂家的对自己产品在功能方面的炒作,使得很多人对视频格式的名称都是一头的雾水。 经常有些童鞋问我类似下面的问题。 A问我说:“我的MP4分明写着能播放AVI吗?为什么这一个AVI文件就播放不了?” B问:“我的MP4支持Mpeg-4啊,为什么Mp4文件不能播放呢?” 好的,下面我从最基本的概念给大家解释一下,顺便回答这两个问题 首先大家要清楚两个概念,视频文件格式和视频编码方式。 视频文件格式一般情况下从视频文件的后缀名就能看出来,比如AVI,Mp4,3gp,mov,rmvb等等。这些格式又叫做容器格式(container format),顾名思义就是用来装东西的,你可以把它想象成为一个便当盒,或者野餐篮(兄弟,你没吃早饭吧)。 通常我们从网上下载的电影都是有声音的(废话,难道你只看默片!众人扔香蕉皮),所以容器格式中一般至少包含有两个数据流(stream),一个视频流,一个音频流,就好比是一个便当盒里装着的配菜和米饭。 视频编码方式则是指容器格式中视频流数据的压缩编码方式,例如Mpeg-4,,,等等。而视频数据采用了何种编码方式是无法单单从文件格式的后缀上看出来的。就是说你无法从一个盖着盖子的便当盒外面看出里面装了什么配菜。 如果你想播放一个视频文件,第一步你的播放器(不论是软件的还是硬件的)要能够解析相应的容器格式,这一步也叫做解复用(demux),第二步你的播放器要能够解码其中所包含视频流和音频流。这样影片才能播放出来。 打个不太恰当的比方,播放器好比你雇用的一个试菜员,由他来品尝便当(视频文件),然后告诉你便当里装了什么东西。(没天理阿!我想自己吃,好的当然可以,0x00 00 01 B6 05 FF 36 1A 50 …… ……,俄~) 所以试菜员首先要懂得如何打开便当盒,还要知道吃的出来便当盒里装了什么配菜,这样你才能获得你想要的信息。 回过头来看前面的两个问题,用以上的比喻翻译一下。 问题A,我的试菜员能打开AVI这种便当的,为什么我不能知道里面装了什么? 回答很简单,虽然他能够打开便当,但是吃不出里面的东西是什么。理论上没有一个播放器能够播放所有的AVI格式的电影,因为你不知道我会往里面放什么配菜。 问题B,我的试菜员吃过Mpeg-4这种牛排阿,为什么不能打开Mp4这种便当盒呢? 这个问题通过翻译之后看起来已经不是问题了,Mpeg-4是视频编码方式,而Mp4是容器格式,两者本来就不是一个范畴里的东西。 好了下面简单介绍一下流行的视频格式。 AVI是音频视频交错(Audio Video Interleaved)的英文缩写,它是Microsoft公司开发的一种数字音频与视频文件格式,允许视频和音频交错在一起同步播放。 AVI文件的格式是公开并且免费的,大量的视频爱好者在使用这种文件格式。很多PMP 唯一能支持的格式就是AVI格式,一般的PMP都带有可以转换其他格式视频成为AVI格式的软件。 AVI文件采用的是RIFF(Resource Interchange File Format,资源互换文件格式)文件结构,RIFF是Microsoft公司定义的一种用于管理windows环境中多媒体数据的文件格

算术编码工作原理

算术编码工作原理 在给定符号集和符号概率的情况下,算术编码可以给出接近最优的编码结果。使用算术编码的压缩算法通常先要对输入符号的概率进行估计,然后再编码。这个估计越准,编码结果就越接近最优的结果。 例: 对一个简单的信号源进行观察,得到的统计模型如下: ?60% 的机会出现符号中性 ?20% 的机会出现符号阳性 ?10% 的机会出现符号阴性 ?10% 的机会出现符号数据结束符. (出现这个符号的意思是该信号源'内部中止',在进行数据压缩时这样的情况是很常见的。当第一次也是唯一的一次看到这个符号时,解码器就知道整个信号流都被解码完成了。) 算术编码可以处理的例子不止是这种只有四种符号的情况,更复杂的情况也可以处理,包括高阶的情况。所谓高阶的情况是指当前符号出现的概率受之前出现符号的影响,这时候之前出现的符号,也被称为上下文。比如在英文文档编码的时候,例如,在字母Q 或者q出现之后,字母u出现的概率就大大提高了。这种模型还可以进行自适应的变化,即在某种上下文下出现的概率分布的估计随着每次这种上下文出现时的符号而自适应 更新,从而更加符合实际的概率分布。不管编码器使用怎样的模型,解码器也必须使用同样的模型。 一个简单的例子以下用一个符号串行怎样被编码来作一个例子:假如有一个以A、B、C三个出现机会均等的符号组成的串行。若以简单的分组编码会十分浪费地用2 bits 来表示一个符号:其中一个符号是可以不用传的(下面可以见到符号B正是如此)。为此,这个串行可以三进制的0和2之间的有理数表示,而且每位数表示一个符号。例如,“ABBCAB”这个串行可以变成0.011201(base3)(即0为A, 1为B, 2为C)。用一个定点二进制数字去对这个数编码使之在恢复符号表示时有足够的精度,譬如 0.001011001(base2) –只用了9个bit,比起简单的分组编码少(1 – 9/12)x100% = 25%。这对于长串行是可行的因为有高效的、适当的算法去精确地转换任意进制的数字。 编码过程的每一步,除了最后一步,都是相同的。编码器通常需要考虑下面三种数据: ?下一个要编码的符号 ?当前的区间(在编第一个符号之前,这个区间是[0,1), 但是之后每次编码区间都会变化) ?模型中在这一步可能出现的各个符号的概率分布(像前面提到的一样,高阶或者自适应的模型中,每一步的概率并不必须一样) 编码其将当前的区间分成若干子区间,每个子区间的长度与当前上下文下可能出现的对应符号的概率成正比。当前要编码的符号对应的子区间成为在下一步编码中的初始区间。

音视频编码技术

音视频编码技术报告 姓名: 学号: 学院(系):电子与信息工程学院 专业: 电子与通信工程 题目: 基于DCT变换的图像压缩技术的仿真

1.引言 在信息世界迅猛发展的今天, 人们对计算机实时处理图像信息的要求越来越高。如何在保证图像质量的前提下, 同时兼顾实时性和高效性成了一个值得关注的问题。于是, 对图像信息进行一定的压缩处理成为了一个不可或缺的环节。图像压缩是关于用最少的数据量来表示尽可能多的原图像的信息的一个过程。 本文主要研究基于DCT 变换的有损压缩编码技术。离散余弦变换, 简称DCT , 是一种实数域变换, 其变换核为余弦函数, 计算速度快。DCT 除了具有一般的正交变换性质外, 它的变换阵的基向量能很好地描述人类语音信号和图像 信号的相关特征。因此, 在对语音信号、图像信号的变换中,DCT 变换被认为是一种准最佳变换。近年颁布的一系列视频压缩编码的国际标准建议中, 都把DCT 作为其中的一个基本处理模块。而且对于具有一阶马尔柯夫过程的随机信 号,DCT 十分接近于Karhunen -Loeve 变换, 也就是说它是一种最佳近似变换。 2.图像压缩编码的简介 从信息论的角度看,图像是一个信源。描述信源的数据是信息量和信息量冗余之和。数据压缩实际上就是减少这些冗余量。图像编码压缩的方法目前有很多,其分类方法根据出发点不同而有差异。根据解压重建后的图像和原始图像之间是否具有误差(对原图像的保真程度),图像编码压缩分为无误差(亦称无失真、无损、信息保持)编码和有误差(有失真或有损)编码两大类。 无损压缩(冗余度压缩、可逆压缩):是一种在解码时可以精确地恢复原图像,没有任何损失的编码方法,但是压缩比不大,通常只能获得1~5倍的压缩比。用于要求重建后图像严格地和原始图像保持相同的场合,例如复制、保存十分珍贵的历史、文物图像等。 有损压缩(不可逆压缩):只能对原始图像进行近似的重建,而不能精确复原,适合大数工用于存储数字化了的模拟数据。压缩比大,但有信息损失,本文采用有损压缩。 DCT图像压缩编码可以概括成图2.1的框图。 图2.1 DCT压缩编码过程简化 3.DCT变换 最小均方误差下得到的最佳正交变化是K-L变换,而离散余弦变换(DCT)是仅次于K-L变换的次最佳变换,目前已获得广泛应用。离散预先变换DCT用于图像压缩操作中的基本思路是,将图像分为8×8的子块或16×16的子块,并对每一个子块进行单独的DCT变换,然后对变换结果进行量化、编码。

数据结构课程设计哈夫曼编码-2

数据结构课程设计哈夫曼编码-2

《数据结构与算法》课程设计 目录 一、前言 1.摘要 2.《数据结构与算法》课程设计任务书 二、实验目的 三、题目--赫夫曼编码/译码器 1.问题描述 2.基本要求 3.测试要求 4.实现提示 四、需求分析--具体要求 五、概要设计 六、程序说明 七、详细设计 八、实验心得与体会

前言 1.摘要 随着计算机的普遍应用与日益发展,其应用早已不局限于简单的数值运算,而涉及到问题的分析、数据结构框架的设计以及设计最短路线等复杂的非数值处理和操作。算法与数据结构的学习就是为以后利用计算机资源高效地开发非数值处理的计算机程序打下坚实的理论、方法和技术基础。 算法与数据结构旨在分析研究计算机加工的数据对象的特性,以便选择适当的数据结构和存储结构,从而使建立在其上的解决问题的算法达到最优。 数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构反映成分数据在计算机内部的存储安排。数据结构是数据存在的形式。 《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。 学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。

哈夫曼编码算法实现完整版

实验三树的应用 一.实验题目: 树的应用——哈夫曼编码 二.实验内容: 利用哈夫曼编码进行通信可以大大提高信道的利用率,缩短信息传输的时间,降低传输成本。根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求哈夫曼编码。 要求:从键盘输入若干字符及每个字符出现的频率,将字符出现的频率作为结点的权值,建立哈夫曼树,然后对各个字符进行哈夫曼编码,最后打印输出字符及对应的哈夫曼编码。 三、程序源代码: #include #include #include #include typedef struct{ char data; int weight; int parent,lchild,rchild; }HTNode,*HuffmanTree; typedef char * * HuffmanCode; void Select(HuffmanTree &HT,int n,int m) {HuffmanTree p=HT; int tmp; for(int j=n+1;j<=m;j++) {int tag1,tag2,s1,s2; tag1=tag2=32767; for(int x=1;x<=j-1;x++) { if(p[x].parent==0&&p[x].weights2) //将选出的两个节点中的序号较小的始终赋给s1 { tmp=s1; s1=s2; s2=tmp;} p[s1].parent=j;

简单短序列的算术编码的MATLAB实现

简单短序列的算术编码的MATLAB实现 正确实现的算术编码算法压缩能力Shannond定理描述的理论极限,是目前已知的压缩能力最强的无损压缩算法。 不过,由于算术编码算法的实现比较复杂,使用它作为默认压缩算法的应用程序还相当少。在Unix平台上非常流行的bzip2(这个工具有命令行模式的Windows版本)使用的就是经过修改的算术编码算法。 目前为止还没有使用算术编码作为默认压缩算法的Windows应用程序,WinRAR和WinIMP能够支持bzip2的解压。除此之外,在最新的JPEG标准中也用到了经过修改的算术编码压缩算法,但JPEG所用的那种算法受专利保护,因此使用时必须获得授权。 在之后的文章会很好的研究这个算法的实现: 现在给出一个简单的实例:

运行过程如下:

%I=imread('001.bmp') %imshow(I); clear I=[3 3 1 1 3 3 1 2;2 3 3 1 3 2 3 2;1 2 3 3 3 3 1 2]; %I=[1 1 1 1 0 0 1 0 1 1 1 0]; [m,n]=size(I); % 第一列为灰度值,第二列为个数,第三列为概率百分数,应该也可以用imhist table = tabulate(I(); % 注意的是,tabulate要求I的元素必须为非负整数 % 否则,以采用如下方法求解 % 如[1 2 3;1 2 2],则统计出结果1是2个,2是3个,3是1个 % sortM=sort(M(); % uniqueM=([diff(sortM);1]>0); % count = [sortM(uniqueM) diff(find([1;uniqueM]))] % 即color,p如下所示 color = table(:,1)'; p = table(:,3)'/100; % 计算上下限 csump = cumsum(table(:,3)'); allLow =[0,csump(1:end-1)/100]; allHigh = csump/100; numberlow = 0; numberhigh = 1; for k = 1:m for kk = 1:n data = I(k,kk); low = allLow(data==color); high = allHigh(data==color); range = numberhigh-numberlow; tmp = numberlow; numberlow = tmp+range*low; numberhigh = tmp+range*high; end

三维视频编码技术的发展与挑战

收稿日期:2011-03-16;修回日期:2011-05-09。 基金项目:国家自然科学基金资助项目(30970780);北京市自然科学基金及教委重点科技项目(KZ200910005005)。作者简介:邓智玭(1983-),女,湖南邵阳人,博士研究生,主要研究方向:视频编码;贾克斌(1962-),男,北京人,教授,博士生导师,主要研究方向:多媒体技术;陈锐霖(1971-),男,香港人,教授,博士生导师,主要研究方向:视频技术;伏长虹(1981-),男,香港人,副教授,主要研究方向:视频编码;萧允治(1954-),男,香港人,教授,博士生导师,主要研究方向:视频编码。 文章编号:1001-9081(2011)09-2453-04 doi :10.3724/SP.J.1087.2011.02453 三维视频编码技术的发展与挑战 邓智玭1,2,贾克斌1,陈锐霖2,伏长虹2,萧允治 2 (1.北京工业大学电子信息与控制工程学院,北京100124;2.香港理工大学电子资讯工程系,香港九龙) (zhipindeng@gmail.com;kebinj@bjut.edu.cn) 摘 要:介绍了三维视频编码的核心技术。首先比较了纯视频格式和深度增强格式三维视频编码技术的发展方 向及面临的挑战,其中重点分析了深度估计技术和视点合成技术的研究思路;然后概括了国际3DV /FTV 标准的制定 现状;最后对三维视频编码技术进行了总结和展望。 关键词:三维视频;多视点视频;立体视频;视频编码;深度图 中图分类号:TN919.81 文献标志码:A New trend and challenges in 3D video coding DENG Zhi-pin 1,2,JIA Ke-bin 1,CHAN Yui-lam 2,FU Chang-hong 2,SIU Wan-chi 2 (1.College of Electronic Information and Control Engineering,Beijing University of Technology,Beijing 100124,China ;2.Department of Electronic and Information Engineering,The Hong Kong Polytechnic University,Kowloon Hongkong,China ) Abstract:The key technologies of 3D video coding were introduced.Firstly,the developing directions and challenges of video-only format and depth-enhancement format 3D videos were elaborated.The depth estimation and view synthesis technologies were analyzed in detail.Subsequently,the process of standardizing the current 3DV /FTV standard of MPEG was summarized.The conclusion and prospect were given at last. Key words:3D video;multiview video;stereoscopic video;video coding;depth map 0引言 近二十年来,视频广播技术发生了重大变革,从20世纪的模拟电视到数字电视、高清数字电视,乃至现在的三维电 视,视频技术随着人们生活水平的提高不断发展进步 [1-2] 。当今世界,人们已经不再满足于传统的单目视频带来的视觉感受,具有临场感和交互性的三维立体视频以其独特的景深 效果给用户带来前所未有的奇妙体验[3] 。随着好莱坞推出《阿凡达》等立体电影,三维视频技术逐渐成为多媒体信息产 业的热门话题[4-6] 。与传统的单目视频相比,三维视频包含的数据量成倍增加[7] 。为了避免信道中数据量激增,必须对其进行有效的编码压缩。近年来,全球各大研究机构都投入大量精力对三维视频编码技术进行深入研究。 1三维视频编码技术 根据传输形式不同将三维视频分为两大类:1)纯视频格 式,需要传输所有视角的数据[8] ;2)深度增强格式,传输有限个单目视频及其深度序列, 在解码端利用视点合成技术生成虚拟视点[9] 。这两类三维视频由于传输形式不同而采用不同的编码方式。 1.1纯视频格式三维视频 纯视频格式三维视频由多路具有细微视角差异的视频组成,由两台(或多台)相邻摄像机从不同角度同时对同一场景进行拍摄得到,这些视频可以直接在三维立体显示设备上播放。1.1.1 立体视频编码 最直接的双通道立体视频编码方式是采用Simulcast 方 法直接对左右视点数据进行独立压缩,如图1(a )所示,但是 左右视点间的相关性没有得到利用,编码效率较低[10] 。早在 十几年前, MPEG-2Multiview Profile 就提出结合左右视点之间的交叉相关性和同一视点内部的时空相关性来提高立体视频编码效率[11-12] 。近年来,立体补充增强信息(Stereo Supplemental Enhancement Information ,Stereo SEI )和帧组合补 充增强信息(Frame Packing Arrangement SEI )被纳入到H.264/AVC 中[13]。根据Stereo SEI ,在编码前将左右视点以左右/上下方式交错排列成一段视频,然后通过场间预测来消除视点间的交叉冗余,在解码端通过反交错将立体视频还原成两段独立视点,如图1(b )所示。该方式与原有的H.264编 解码器完美兼容, 不需要改变原有硬件结构。2009年7月,国际运动图像专家组(Moving Picture Expert Group ,MPEG )颁 布了MPEG-4AVC Stereo High Profile ,作为多视点视频编码 (Multiview Video Coding ,MVC )标准的一个子集[14]。然而,Stereo High Profile 只适用于逐行和隔行扫描的双通道立体视频序列,不支持临场感更强的多视点视频和自由视点视频。1.1.2 多视点视频编码 多视点视频是由多台相邻摄像机从不同角度对同一场景 进行拍摄得到的多路视频序列[15] 。多视点视频的数据量巨 大,相邻视点间的交叉冗余信息比双通道立体视频大得多,为 了最大限度地提高压缩率, 在编码时采用一种基于分层B 帧(Hierarchical B Pictures ,HBP )的视点—时间金字塔型预测结构[16-18] ,如图2所示。该结构被MVC 的官方测试模型JMVC 采纳[19] 。 2009年1月,国际联合视频小组(Joint Video Team ,JVT ) 第31卷第9期2011年9月 计算机应用 Journal of Computer Applications Vol.31No.9Sep.2011

哈夫曼树建立、哈夫曼编码算法的实现

#include /*2009.10.25白鹿原*/ #include /*哈夫曼树建立、哈夫曼编码算法的实现*/ #include typedef char* HuffmanCode;/*动态分配数组,存储哈夫曼编码*/ typedef struct { unsigned int weight ; /* 用来存放各个结点的权值*/ unsigned int parent, LChild,RChild ; /*指向双亲、孩子结点的指针*/ }HTNode, * HuffmanTree; /*动态分配数组,存储哈夫曼树*/ void select(HuffmanTree *ht,int n, int *s1, int *s2) { int i; int min; for(i=1; i<=n; i++) { if((*ht)[i].parent == 0) { min = i; i = n+1; } } for(i=1; i<=n; i++) { if((*ht)[i].parent == 0) { if((*ht)[i].weight < (*ht)[min].weight) min = i; } } *s1 = min; for(i=1; i<=n; i++) { if((*ht)[i].parent == 0 && i!=(*s1)) { min = i; i = n+1; } } for(i=1; i<=n; i++) { if((*ht)[i].parent == 0 && i!=(*s1)) {

if((*ht)[i].weight < (*ht)[min].weight) min = i; } } *s2 = min; } void CrtHuffmanTree(HuffmanTree *ht , int *w, int n) { /* w存放已知的n个权值,构造哈夫曼树ht */ int m,i; int s1,s2; m=2*n-1; *ht=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); /*0号单元未使用*/ for(i=1;i<=n;i++) {/*1-n号放叶子结点,初始化*/ (*ht)[i].weight = w[i]; (*ht)[i].LChild = 0; (*ht)[i].parent = 0; (*ht)[i].RChild = 0; } for(i=n+1;i<=m;i++) { (*ht)[i].weight = 0; (*ht)[i].LChild = 0; (*ht)[i].parent = 0; (*ht)[i].RChild = 0; } /*非叶子结点初始化*/ /* ------------初始化完毕!对应算法步骤1---------*/ for(i=n+1;i<=m;i++) /*创建非叶子结点,建哈夫曼树*/ { /*在(*ht)[1]~(*ht)[i-1]的范围内选择两个parent为0且weight最小的结点,其序号分别赋值给s1、s2返回*/ select(ht,i-1,&s1,&s2); (*ht)[s1].parent=i; (*ht)[s2].parent=i; (*ht)[i].LChild=s1; (*ht)[i].RChild=s2; (*ht)[i].weight=(*ht)[s1].weight+(*ht)[s2].weight; } }/*哈夫曼树建立完毕*/ void outputHuffman(HuffmanTree HT, int m) { if(m!=0) {

视频编码的基本原理及基本框架

视频编码的基本原理及基本框架 视频图像数据有极强的相关性,也就是说有大量的冗余信息。其中冗余信息可分为空域冗余信息和时域冗余信息。压缩技术就是将数据中的冗余信息去掉(去除数据之间的相关性),压缩技术包含帧内图像数据压缩技术、帧间图像数据压缩技术和熵编码压缩技术。 去时域冗余信息 使用帧间编码技术可去除时域冗余信息,它包括以下三部分: -运动补偿 运动补偿是通过先前的局部图像来预测、补偿当前的局部图像,它是减少帧序列冗余信息的有效方法。 -运动表示 不同区域的图像需要使用不同的运动矢量来描述运动信息。运动矢量通过熵编码进行压缩。-运动估计 运动估计是从视频序列中抽取运动信息的一整套技术。 注:通用的压缩标准都使用基于块的运动估计和运动补偿 去空域冗余信息 主要使用帧内编码技术和熵编码技术: -变换编码 帧内图像和预测差分信号都有很高的空域冗余信息。变换编码将空域信号变换到另一正交矢量空间,使其相关性下降,数据冗余度减小。 -量化编码 经过变换编码后,产生一批变换系数,对这些系数进行量化,使编码器的输出达到一定的位率。这一过程导致精度的降低。

熵编码是无损编码。它对变换、量化后得到的系数和运动信息,进行进一步的压缩。 视频编码的基本框架 H.261 H.261标准是为ISDN设计,主要针对实时编码和解码设计,压缩和解压缩的信号延时不超过150ms,码率px64kbps(p=1~30)。 H.261标准主要采用运动补偿的帧间预测、DCT变换、自适应量化、熵编码等压缩技术。只有I帧和P帧,没有B帧,运动估计精度只精确到像素级。支持两种图像扫描格式:QCIF 和CIF。 H.263 H.263标准是甚低码率的图像编码国际标准,它一方面以H.261为基础,以混合编码为核心,其基本原理框图和H.261十分相似,原始数据和码流组织也相似;另一方面,H.263也吸收了MPEG等其它一些国际标准中有效、合理的部分,如:半像素精度的运动估计、PB帧预测等,使它性能优于H.261。 H.263使用的位率可小于64Kb/s,且传输比特率可不固定(变码率)。H.263支持多种分辨率:SQCIF(128x96)、QCIF、CIF、4CIF、16CIF。 与H.261和H.263相关的国际标准 与H.261有关的国际标准 H.320:窄带可视电话系统和终端设备; H.221:视听电信业务中64~1 920Kb/s信道的帧结构; H.230:视听系统的帧同步控制和指示信号; H.242:使用直到2Mb/s数字信道的视听终端的系统。 与H.263有关的国际标准 H.324:甚低码率多媒体通信终端设备; H.223:甚低码率多媒体通信复合协议; H.245:多媒体通信控制协议; G.723.1.1:传输速率为5.3Kb/s和6.3Kb/s的语音编码器。 JPEG 国际标准化组织于1986年成立了JPEG(Joint Photographic Expert Group)联合图片专家小组,主要致力于制定连续色调、多级灰度、静态图像的数字图像压缩编码标准。常用的基于离散余弦变换(DCT)的编码方法,是JPEG算法的核心内容。

视频压缩编码方法简介—AVI

视频压缩编码方法简介—A V I A VI(Audio Video Interleave)是一种音频视像交插记录的数字视频文件格式。1992年初Microsoft公司推出了A VI技术及其应用软件VFW(Video for Windows)。在A VI文件中,运动图像和伴音数据是以交织的方式存储,并独立于硬件设备。这种按交替方式组织音频和视像数据的方式可使得读取视频数据流时能更有效地从存储媒介得到连续的信息。构成一个A VI文件的主要参数包括视像参数、伴音参数和压缩参数等。 1.视像参数 (1)视窗尺寸(Video size)。根据不同的应用要求,A VI的视窗大小或分辨率可按4:3的比例或随意调整,大到全屏640×480,小到160×120甚至更低。窗口越大,视频文件的数据量越大。 (2)帧率(Frames per second)。帧率也可以调整,而且与数据量成正比。不同的帧率会产生不同的画面连续效果。 2.伴音参数。在A VI文件中,视像和伴音是分别存储的,因此可以把一段视频中的视像与另一段视频中的伴音组合在一起。A VI文件与WA V文件密切相关,因为WA V文件是A VI文件中伴音信号的来源。伴音的基本参数也即WA V文件格式的参数,除此以外,A VI文件还包括与音频有关的其他参数。 (1)视像与伴音的交织参数(Interlace Audio Every X Frames)。A VI格式中每X帧交织存储的音频信号,也即伴音和视像交替的频率X是可调参数,X的最小值是一帧,即每个视频帧与音频数据交织组织,这是CD-ROM上使用的默认值。交织参数越小,回放A VI文件时读到内存中的数据流越少,回放越容易连续。因此,如果A VI文件的存储平台的数据传输率较大,则交错参数可设置得高一些。当A VI文件存储在硬盘上时,也即从硬盘上读A VI文件进行播放时,可以使用大一些的交织频率,如几帧,甚至1秒。 (2)同步控制(Synchronization)。在A VI文件中,视像和伴音是同步得很好的。但在MPC中回放A VI文件时则有可能出现视像和伴音不同步的现象。 (3)压缩参数。在采集原始模拟视频时可以用不压缩的方式,这样可以获得最优秀的图像质量。编辑后应根据应用环境选择合适的压缩参数。 3.A VI数字视频的特点 (1)提供无硬件视频回放功能。A VI格式和VFW软件虽然是为当前的MPC设计的,但它也可以不断提高以适应MPC的发展。根据A VI格式的参数,其视窗的大小和帧率可以根据播放环境的硬件能力和处理速度进行调整。在低档MPC机上或在网络上播放时,VFW的视窗可以很小,色彩数和帧率可以很低;而在Pentium级系统上,对于64K色、320×240的压缩视频数据可实现每秒25帧的回放速率。这样,VFW就可以适用于不同的硬件平台,使用户可以在普通的MPC上进行数字视频信息的编辑和重放,而不需要昂贵的专门硬件设备。 (2)实现同步控制和实时播放。通过同步控制参数,A VI可以通过自调整来适应重放环境,如果MPC 的处理能力不够高,而A VI文件的数据率又较大,在WINDOWS环境下播放该A VI文件时,播放器可以通过丢掉某些帧,调整A VI的实际播放数据率来达到视频、音频同步的效果。 (3)可以高效地播放存储在硬盘和光盘上的A VI文件。由于A VI数据的交叉存储,VFW播放A VI数据时只需占用有限的内存空间,因为播放程序可以一边读取硬盘或光盘上的视频数据一边播放,而无需预先把容量很大的视频数据加载到内存中。在播放A VI视频数据时,只需在指定的时间内访问少量的视频图像和部分音频数据。这种方式不仅可以提高系统的工作效率,同时也可以实现迅速地加载和快速地启动播放程序,减少播放A VI视频数据时用户的等待时间。 (4)提供了开放的A VI数字视频文件结构。A VI文件结构不仅解决了音频和视频的同步问题,而且具有通用和开放的特点。它可以在任何Windows环境下工作,而且还具有扩展环境的功能。用户可以开发自己的A VI视频文件,在Windows环境下可随时调用。 (5)A VI文件可以再编辑。A VI一般采用帧内有损压缩,可以用一般的视频编辑软件如Adobe Premiere 或MediaStudio进行再编辑和处理。

相关文档
最新文档