实验要求
(1)使用uqimg_enc.c和uqimg_dec.c对图像进行均匀量化编解码。
(2)使用vqimg_enc.c和vqimg_dec.c对图像进行矢量量化编解码。
实验内容
1、均匀量化
uqimg_enc.c程序获取灰度图像(8 bits/pixel)和使用均匀量化以有损方式压缩它。量化器标签使用固定长度代码编码。可以使用可变长度对输出进行进一步编码进一步压缩的编码器。量化器的步长是最大值和最小值之间的差值除以级别数。最大值和最小值可由用户指定。默认值为255和0。
uqimg_en.c该程序提供图像的重建。输出是一个灰度(8位/像素)图像,可以写入一个文件或一个标准。
2、矢量量化
trvqsp_img这个程序可以用来训练矢量量化器在图像压缩中使用LBG算法。密码本由Linde, Buzo, 和Gray提出的方法得到的。ts_img是用作图像的图像训练集。向量实际上是块高像素乘以块宽像素宽的矩形阵列。因此,向量的维数为块高度X块宽度。假定图像为8位灰度级使用光栅扫描顺序存储的图像。
vqimg_enc.c这个程序可以用来压缩图像使用矢量量化。使用trvqsp_img获取码本程序向量的维数和向量的大小代码本在包含代码本的文件中指定。向量的索引使用固定长度编码密码因此,如果输出使用可变长度编码器对该程序的所有部分进行编码。如果未指定输出文件,则会将输出写入标准输出。此功能可用于管道输出将此程序直接发送到可变长度编码器。
使用vqimg_enc这个程序重建一个被压缩的图像。用于压缩图像的码本为需要与压缩图像一起使用。名称从压缩文件中读取代码本。如果输入文件未指定从中的标准读取输入。如果未指定输出文件,将以标准输出。
实验结果
1、均匀量化
量化编码后输出文件
解码后文件
分别1bit,2bit,4bit 量化后得到的图像以及原图(64kB)如下:
量化比特数 | 量化后文件大小kB | 压缩率% |
1 | 8.02 | 12.53 |
2 | 16.0 | 25 |
4 | 32.0 | 50 |
1比特量化后图像的细节几乎都消失了。使用2比特量化,相比于1比特会多出许多细节。细节级别随着所用比特数的增加而增加。从压缩率上可以明显看出,量化级数越低,压缩效果越好。
2、矢量量化
构建2*2像素块的不同码矢数量的矢量
量化编码后的文件
解码后的文件
量化后的图像,分别为原图和码矢数量为16、32、64、128、256的图像。
码矢数量 | 量化后文件大小kB | 压缩率% |
16 | 8.04 | 12.6 |
32 | 10.0 | 15.6 |
64 | 12.0 | 18.7 |
128 | 14.0 | 21.9 |
256 | 16.0 | 25 |
由结果可以看出,码矢数量越少压缩率越低,压缩效果越好。从解码结果看,量化后的图像与原图差异不大。与标量量化结果比较,性能提升最为明显。矢量量化在保证较低的压缩率下还能解码出高质量的图像。这是因为矢量量化考虑了像素之间的相关性。