本项目是图像处理与模式识别课程的作业,实现一个jpeg编码器,以原始图片数据(3维张量)为输入,对其进行jpeg编码与压缩,输出jpeg图片。
各环节的具体实现细节,见 JPEG编码与压缩.pdf
使用pretreat.py对lena.jpg进行预处理,将其转换为RGB格式的文本文件image.txt。
注意:lena.jpg的长宽需要都能被8整除。压缩包中的图片是512*512,符合条件,可以直接用。
包含两张量化表,亮度和色度的量化表,分别存在qtable.txt和qtableC.txt中。image.txt,qtable.txt和qtableC.txt放在同一文件夹中。
执行jpeg.exe运行程序。运行程序后,输入上述文件所在文件夹的路径,输入压缩比率,接下来程序会开始进行编码,并生成output.jpeg文件。
该编码程序可以成功进行jpeg编码
选用不同压缩率进行图片效果和图片大小的对比,并与原图片进行对比。
说明 | 大小 | 图片 |
---|---|---|
压缩率=0 | 263KB | |
压缩率=1 | 161KB | |
压缩率=2 | 130KB | |
压缩率=3 | 110KB | |
压缩率=4 | 102KB | |
压缩率=5 | 95KB | |
jpeg原图 | 101KB |
随着压缩率提升,图片所占空间变小,图片质量变得更差。
但跟jpeg原图对比,占据同样甚至更少的空间,原图比我生成的图片质量要好很多。我认为原因在于,原图使用的是4*2*2的采样比,丢弃了更多色度信息,保留了更多亮度信息;而我使用的是1*1*1的采样比,图片在压缩时对亮度有很大损失,故降低了图片的质量。