Description
“Huffman-树”不仅能对文本数据进行编码、译码,提高文本数据的传输效率,同时它也能对多媒体数据(如:数字图像、视频等)进行编码、译码,从而实现多媒体数据的压缩存储。目前,在Web互联网上广泛使用的JPEG图像格式就采用了Huffman编码,与其他图像格式(如:BMP、TIF等)相比,同一副图像采用JPEG格式时所需的存储空间是最少的。在这个实验中,请设计一个Huffman编/译码器,并模拟数字图像的压缩存储(编码)和解码显示(译码)的过程。
(1)构造“Huffman-树”:
①读入一个大小为N*M(N为图像的高度,M为图像的宽度)的灰度图像块,该图像中的每个像素(元素)的取值范围是0~255,取值为0表示该像素是“黑色”,取值为255表示该像素是“白色”,其他取值表示介于“黑色”和“白色”之间的灰度值。
②统计读入图像块中每种灰度值出现的次数,并去除出现次数为零的灰度值,以此作为构造“Huffman-树”所需的权值。
③说明:在构造“Huffman-树”的过程中,当有多个待合并元素的权值相同时,每次选择灰度值较小的两个元素进行合并。
(2)Huffman编码(压缩存储):利用已建立好的“Huffman-树”,对灰度图像块进行编码,之后计算Huffman编码的压缩比并输出。压缩比的计算公式如下:压缩比=原始图像所需比特数/压缩后图像所需比特数。
Input
该实验有多组测试数据。
每组测试数据的第一行包含两个以空格间隔的正整数N和M,它们的取值范围都为[1, 100],分别表示图像的高度和宽度;之后的N行数据是一个灰度图像,每行含有M个以空格间隔的正整数P(0≤P≤255),P表示对应像素的灰度值。
当输入的N和M都为零时结束。
Output
每组测试数据的输出占一行,输出的内容为“Huffman编码的压缩比”(保留2位小数)。
Sample Input
8 8 162 162 162 161 162 157 163 161 162 162 162 161 162 157 163 161 162 162 162 161 162 157 163 161 162 162 162 161 162 157 163 161 162 162 162 161 162 157 163 161 164 164 158 155 161 159 159 160 160 160 163 158 160 162 159 156 159 159 155 157 158 159 156 157 0 0
Sample Output
Huffman编码的压缩比为2.72:1