多媒体数据压缩实验报告

上传人:bin****86 文档编号:56131968 上传时间:2018-10-10 格式:DOCX 页数:16 大小:22.70KB
返回 下载 相关 举报
多媒体数据压缩实验报告_第1页
第1页 / 共16页
多媒体数据压缩实验报告_第2页
第2页 / 共16页
多媒体数据压缩实验报告_第3页
第3页 / 共16页
多媒体数据压缩实验报告_第4页
第4页 / 共16页
多媒体数据压缩实验报告_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《多媒体数据压缩实验报告》由会员分享,可在线阅读,更多相关《多媒体数据压缩实验报告(16页珍藏版)》请在金锄头文库上搜索。

1、多媒体数据压缩实验报告多媒体数据压缩实验报告篇一:多媒体实验报告_文件压缩课程设计报告 实验题目:文件压缩程序 姓 名: 指导教师:学 院: 计算机学院 专 业:计算机科学与技术学 号: 提交报告时间:20 年 月 日四川大学 一,需求分析: 有两种形式的重复存在于计算机数据中,文件压缩程序就是对这两种重复进行了压缩。一种是短语形式的重复,即三个字节以上的重复,对于这种重复,压缩程序用两个数字:1.重复位置距当前压缩位置的距离;2.重复的长度,来表示这个重复,假设这两个数字各占一个字节,于是数据便得到了压缩。第二种重复为单字节的重复,一个字节只有 256 种可能的取值,所以这种重复是必然的。给

2、 256 种字节取值重新编码,使出现较多的字节使用较短的编码,出现较少的字节使用较长的编码,这样一来,变短的字节相对于变长的字节更多,文件的总长度就会减少,并且,字节使用比例越不均匀,压缩比例就越大。编码式压缩必须在短语式压缩之后进行,因为编码式压缩后,原先八位二进制值的字节就被破坏了,这样文件中短语式重复的倾向也会被破坏(除非先进行解码) 。另外,短语式压缩后的结果:那些剩下的未被匹配的单、双字节和得到匹配的距离、长度值仍然具有取值分布不均匀性,因此,两种压缩方式的顺序不能变。本程序设计只做了编码式压缩,采用 Huffman 编码进行压缩和解压缩。Huffman 编码是一种可变长编码方式,是

3、二叉树的一种特殊转化形式。编码的原理是:将使用次数多的代码转换成长度较短的代码,而使用次数少的可以使用较长的编码,并且保持编码的唯一可解性。根据 ascii 码文件中各 ascii 字符出现的频率情况创建 Huffman 树,再将各字符对应的哈夫曼编码写入文件中。同时,亦可根据对应的哈夫曼树,将哈夫曼编码文件解压成字符文件.一、 概要设计:压缩过程的实现:压缩过程的流程是清晰而简单的: 1. 创建 Huffman 树 2. 打开需压缩文件3. 将需压缩文件中的每个 ascii 码对应的 huffman 编码按 bit 单位输出生成压缩文件压缩结束。其中,步骤 1 和步骤 3 是压缩过程的关键。

4、? 步骤 1:这里所要做工作是得到 Huffman 数中各叶子结点字符出现的频率并进行创建.统计字符出现的频率可以有很多方法:如每次创建前扫描被创建的文件, “实时”的生成各字符的出现频率;或者是创建前即做好统计.这里采用的是前一种方法。? 步骤 3: 将需压缩文件中的每个 ascii 码对应的 huffman 编码按 bit 单位输出. 这是本压缩程序中最关键的部分: 这里涉及“转换”和“输出”两个关键步骤: “转换”部分大可不必去通过遍历 Huffman 树来找到每个字符对应的哈夫曼编码,可以将每个 Huffman 码值及其对应的 ascii 码存放于如下所示的结 构体中:解压缩过程的实现

5、:如果说,压缩的过程可以通过查找 codeList 来加速实现的话,而解压缩则必须通过查找 huffman 树才能加以实现.查找的过程是简单的,可以根据huffman 树的性质来做,当 haffCode 的当前 bit 位为 0 时,则向左枝展开搜索;当前 bit 位为 1 时,则向右枝展开搜索,当遇到叶子结点时,则输出 haffCode 对应的 asciiCode。二、 详细设计:核心算法源程序:Huffman 树建立源程序: /- /huffmantree.h /霍夫曼树#ifndef HUFFMANTREE #define HUFFMANTREE#define Defaultsize 3

6、00#include #include “bintree.h“ #include “heap.h“class Code public:int code; Code *link;Code(int c=0,Code *l=NULL):code(c),link(l); ;class CharNameNode public:unsigned char charname; /要这样才行 Code *link;CharNameNode(unsigned char c=0,Code *l=NULL):charname(c),link(l); ;templateclass HuffmanTree:public

7、 BinaryTree public:int key;HuffmanTree();HuffmanTree(HuffmanTree /可能有变 key=ht1.key+ht2.key;root= new BinTreeNode(0,Copy(ht1.root),Copy(ht2.root); void Build(int *fr,Type *value,int n,HuffmanTree void Path(BinTreeNode *start,Code *first,Code *last,CharNameNode *Node,int /一个数组;templatevoid HuffmanTree

8、:Build(int *fr,Type *value,int n,HuffmanTree HuffmanTree first,second;HuffmanTree NodeDefaultsize; MinHeap hp; assert(n=0Nodei.key=fri; hp=MinHeap (Node,n); for(i=0;i hp.RemoveMin(first);hp.RemoveMin(second);HuffmanTree* temp=new HuffmanTree(first,second);hp.Insert(*temp); hp.RemoveMin(newtree); tem

9、platevoid HuffmanTree:Path(BinTreeNode *start,Code *first,Code *last,CharNameNode *Node,int /if(start-GetData()!=0) /是叶结点 严重错误,可能叶结点也是 0! if(start-GetLeft()=NULLNodei.link=NULL;if(first=NULL) return;Nodei.link=new Code(first-code);Code *p=first-link,*q=Nodei.link;while(p!=NULL)q-link=new Code(p-code

10、); q=q-link; p=p-link;q-link=NULL;i+;return; Code *temp=new Code; /进入左子树 assert(temp);if(first=NULL)first=last=temp; else last-link=temp;last=last-link; Path(start-GetLeft(),first,last,Node,i);last-code=1;Path(start-GetRight(),first,last,Node,i); temp=first;if(first=last) delete last;first=last=NULL

11、;return; while(temp-link!=last)temp=temp-link;temp-link=NULL; delete last; last=temp; #endif实现二叉树的算法源程序:/- /bintree.h/用指针实现的二叉树/Type 类型必须有重载及运算#ifndef BINTREE #define BINTREE#include #includeint Max(int a,int b) return ab?a:b; template class BinaryTree;templatee class BinTreeNode friend class Binary

12、Tree; public:BinTreeNode():leftchild(NULL),rightchild(NULL);BinTreeNode(Type item,BinTreeNode *left = NULL,BinTreeNode *right=NULL):data(item),leftchild(left),rightchild(right); Type GetData()const return data; BinTreeNode *GetLeft()const return leftchild; BinTreeNode *GetRight()const return rightch

13、ild; void SetData(const Type void SetLeft(BinTreeNode *L) leftchild = L; void SetRight(BinTreeNode *R) rightchild = R; private:BinTreeNode *leftchild, *rightchild; Type data;篇二:多媒体实验报告二图片的压缩处理计算机科学与技术学院 XX-XX 学年第 1 学期 多媒体技术 实验二:图像压缩算法实现 专业: 学号:姓名: 教师:完成日期:15.10.17 多媒体技术实验二 实验报告(一)实验目的1理解有损压缩和无损压缩的概念

14、;2理解图像压缩的主要原则和目的;3.了解几种常用的图像压缩编码方式;4.利用 MATLAB 程序进行图像压缩;(二)实验环境1高档微机:MPC2课前准备:标准实验纸张若干张3操作系统:Windows XX 或 Windows XP 中文版4编程工具:Matlab7.0(三)实验过程及结果实验原理:1.图像压缩原理图像压缩主要目的是为了节省存储空间,增加传输速度。图像压缩的理想标准是信息丢失最少,压缩比例最大。不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。压缩的实现方法是对图像重新进行编码,希望用更少的数据

15、表示图像。信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。(1).冗余度压缩方法,也称无损压缩、信息保持编码或嫡编码。具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。(2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。也就是说解码图像和原始图像是有差别的,允许有一定的失真。应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下 3 类:(1)无损压缩编码种类哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempel zev 编码。(2)有损压缩编码种类预测编码,DPCM,运动补偿;频率域方法:正交变换编码(如 DCT),子带编码;空间域方法:统计分块编码;模型方法:分形编码,模型基编码;基于重要性:滤波,子采样,比特分配,向量量化;(3)混合编码。有 JBIG,H261,JPEG,MPEG 等技术标准。本实

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号