“Huffman-树”不仅能对文本数据进行编码、译码,提高文本数据的传输效率,同时它也能对多媒体数据(如:数字图像、视频等)进行编码、译码,从而实现多媒体数据的压缩存储。目前,在Web互联网上广泛使用的JPEG图像格式就采用了Huffman编码,与其他图像格式(如:BMP、TIF等)相比,同一副图像采用JPEG格式时所需的存储空间是最少的。在这个实验中,请设计一个Huffman编/译码器,并模拟数字图像的压缩存储(编码)和解码显示(译码)的过程。
(1)构造“Huffman-树”:
①读入一个大小为N*M(N为图像的高度,M为图像的宽度)的灰度图像块,该图像中的每个像素(元素)的取值范围是0~255,取值为0表示该像素是“黑色”,取值为255表示该像素是“白色”,其他取值表示介于“黑色”和“白色”之间的灰度值。
②统计读入图像块中每种灰度值出现的次数,并去除出现次数为零的灰度值,以此作为构造“Huffman-树”所需的权值。
③说明:在构造“Huffman-树”的过程中,当有多个待合并元素的权值相同时,每次选择灰度值较小的两个元素进行合并。
(2)Huffman编码(压缩存储):读入新的灰度图像块,利用已建立好的“Huffman-树”对其进行编码,将图像的宽度、高度信息和编码结果保存到文件(如:compress_image.txt)中,同时计算Huffman编码的压缩比并输出。压缩比的计算公式如下:压缩比=原始图像所需比特数/压缩后图像所需比特数。
(3)Huffman译码(解码显示):读入压缩存储的灰度图像,利用已建立好的“Huffman-树”对其进行译码,将译码结果按照原有宽度、高度还原图像,并将还原之后的图像保存到文件(如:decoding_image.txt)中。
资源简介:算法源码集合:有hash表、笛卡尔集、哈弗曼树、矩阵乘法、快速排序
上传时间: 2014-01-05
上传用户:lijianyu172
资源简介:构造哈夫曼树 哈弗曼树中没有度为一的节点,是标准的二叉树,所以有n个叶子结点时,需要一个长度为2n-1的一维数组存储哈弗曼树的结点。 (1)、n个叶子节点只有weight权值,处理非叶子节点,从ht[i](ht[1]~ht[n-1])中找到ht[i].weight最小的两个节点ht[s1]...
上传时间: 2016-06-13
上传用户:ztj182002
资源简介:实现了一个相对简单的哈弗曼树的压缩算法,是基于MFC开发的。
上传时间: 2014-01-12
上传用户:z1191176801
资源简介:关于哈弗曼树的编码译码,以及用文件形式输出的的算法
上传时间: 2014-11-22
上传用户:xauthu
资源简介:该程序是基于哈弗曼树的构造,可以实现正常的编码
上传时间: 2017-01-27
上传用户:qazxsw
资源简介:数据结构课程设计源码以及报告 有3个程序:1)哈弗曼树及哈弗曼编码 2)排序—内部排序方法 3)Hanoi Tower
上传时间: 2013-12-16
上传用户:qoovoop
资源简介:用C++编写的哈弗曼树的源代码,方便C语言及C++初学者学习交流
上传时间: 2013-12-06
上传用户:aysyzxzm
资源简介:哈弗曼树生成代码,运行后能生成哈弗曼树,对学习数据结构有帮助。
上传时间: 2013-12-23
上传用户:star_in_rain
资源简介:C++ Builder程序员学习数据结构,里面涵盖了所有你要学习的数据结构的所有源码(二叉树、链表、单链表、双链表、红黑树、快速排序、冒泡排序、哈弗曼树、堆、集合、字典、散列、字典、跳表、图、最短路径、排序。。。。)等等所有数据结构涉及的源码!!!
上传时间: 2014-01-27
上传用户:jyycc
资源简介:用哈弗曼树实现实现对文件的编码与译码, 本代码用C语言描述
上传时间: 2017-07-22
上传用户:wkchong