实验要求
实验过程
2.(a)
使用示例代码对图像进行编码。命令参数按照如下设置(即输入输出的文件路径,此处为绝对路径,也可使用相对路径):
-I F:\studyOfmaster\termOne\sourcecoding\Henc\images\sena.img
-o F:\studyOfmaster\termOne\sourcecoding\Henc\images\out\sena.huff
-i F:\studyOfmaster\termOne\sourcecoding\Henc\images\sensin.img
-o F:\studyOfmaster\termOne\sourcecoding\Henc\images\out\sensin.huff
-i F:\studyOfmaster\termOne\sourcecoding\Henc\images\omaha.img
-o F:\studyOfmaster\termOne\sourcecoding\Henc\images\out\omaha.huff
2.(b)
自行使用C语言编写了一段求取图像相邻像素差值的程序代码,即将每行第一个像素值保留,之后每个点都取当前像素与前一像素的差值。代码如下
命令参数设置:
-I F:\studyOfmaster\termOne\sourcecoding\Henc\images\sena.img
-o F:\studyOfmaster\termOne\sourcecoding\Henc\images\out\sena_d.img
3.
命令参数设置如下:
-i F:\studyOfmaster\termOne\sourcecoding\Henc\images\sensin.img
-o F:\studyOfmaster\termOne\sourcecoding\Henc\images\out\sensin.huff
-s F:\studyOfmaster\termOne\sourcecoding\Henc\images\out\sensin.code
-i F:\studyOfmaster\termOne\sourcecoding\Henc\images\bookshelf1.img
-o F:\studyOfmaster\termOne\sourcecoding\Henc\images\out\bookshelf1vcode.huff
-c F:\studyOfmaster\termOne\sourcecoding\Henc\images\out\sensin.code
实验结果
2.(a)
图像名称 | 原图大小/kB | 编码后大小/kB | 压缩率 |
sena | 64 | 56.1 | 87.7% |
sensin | 64 | 58.7 | 91.7% |
omaha | 64 | 57.0 | 89.1% |
由表中数据可知,采用霍夫曼编码后,图像大小有不同程度的压缩,从压缩率看,效果并不明显。
2.(b)
使用自行编写的代码对图像取差值后再进行编码压缩,结果如下:
图像名称 | 原图大小/kB | 差值图像大小/kB | 编码后大小/kB | 压缩率 |
sena | 64 | 64 | 32.5 | 50.8% |
sensin | 64 | 64 | 37.9 | 59.2% |
由表中数据可以看出,对差值图像进行编码后,图像大小明显减少,压缩率也大幅度降低。
3.
图像名称 | 原图大小/KB | 以sensin的码本编码后的大小/KB | 压缩率 |
sena | 64 | 59.2 | 92.5% |
bookshelf1 | 64 | 70.8 | 110.6% |
由表中数据可以看出,使用其他图像的码本对图像编码,压缩结果也并不理想,甚至增加了文件的大小。
实验结论
1、采用霍夫曼编码可以起到压缩文件大小的作用,但效果不明显。而在结合差值图像进行编码后,压缩效果有明显改善。说明可以有效地利用像素值间的相关性,利用差值信号近似于拉普拉斯分布的特性,即信源符号在个别取值上较为集中,使其更适应于霍夫曼编码。
2、用不同图像的码本对其他图像编码时,可能出现压缩效果不理想甚至增加图像大小的问题。可能与像素值的概率分布有关。其中sena与sensin图像的像素值概率分布更为相似,所以由sensin的码本对sena进行编码时,也会有一定的压缩效果。而对于bookshelf1图像来说,显然,概率分布差异过大,导致sensin的码本并不适合对其进行编码,所以没有起到压缩作用。
遇到的问题
1、对于示例程序的调试,因为VS环境的各种配置问题导致运行报错、抛异常。是本次实验花费时间最久的环节。
2、对于参数的输入问题。因为不熟悉VS环境以及示例代码本身的使用方法,导致不知道如何对程序进行输入控制。在仔细阅读huff_enc.doc文件后,终于学会如何进行参数设置。认识到了读说明书的重要性。