使用 DPCM 编码进行图像压缩
基本原理
DPCM,即差分脉冲编码调制(Differential Pulse Code Modulation),通过对图像进行预测编码并缩减图片预测误差的动态范围来实现图像的压缩。本次试验中只对亮度信号 Y 通道进行编码压缩,将图片的第一列像素值作为原始参考值进行预测,通过与左侧的像素值取差计算预测误差,然后进行量化编码。以下为 DPCM 编码端与解码端的原理图
值得注意的是,在编码端中其实已经内嵌了一个解码端,为的是在编码端用以编码像素的重建值作为下一像素的预测值。
压缩结果
这是未进行 DPCM 编码的原始图像:
以下依次为 8bit - 1bit量化编码后的重建图像及其各自与原始图像的差值灰度图像:
















结果分析
- 首先给出不同比特量化后预测误差值的概率分布图(上)与原始图像各亮度值的概率分布图(下)
可以看到量化后的预测误差值大多集中在 2 b i t s 2^{bits} 2bits 附近,因为对量化预测误差有搬移的过程,因而说明预测误差多数集中在0附近
-
通过对原始图像及各预测误差图像进行 Huffman 编码后得到以下压缩比比较(计算方法为原始图像经过 Huffman 编码后的文件比特数除以经过 DPCM 及 Huffman 编码后的文件比特书)
-
通过计算 PSNR 来计算压缩质量
什么是PSNR:
PSNR,即峰值信号噪声比(Peak Signal to Noise Ratio),通过判断 PSNR 的值来衡量压缩质量,一般规则如下:
· PSNR≥40dB时,图像质量非常好,接近于原图像;
· 30dB≤PSNR<40dB时,图像有可察觉的失真,但质量仍可接受;
· 20dB≤PSNR<30dB时,图像质量较差;
· PSNR<20dB时,图像质量已经无法接受。
具体计算方法如下:
- 首先计算均方误差 MSE(Mean Square Error):
M S E = ∑ i = 0 M ∑ j = 0 N [ f ( I , j ) − f ′ ( I , j ) ] 2 M N MSE = \dfrac{\sum_{i=0}^M \sum_{j=0} ^N\left[f\left(I,j\right)-f'\left(I,j\right)\right]^{2}}{MN} MSE=MN∑i=0M∑j=0N[f(I,j)−f′(I,j)]2
其中 M、N 为图像的宽和高,f(i,j)、f’(i,j) 为原图像和重建图像在 (i,j) 的像素值。- 计算 PSNR:
P S N R = 10 l g ( 2 b i t s − 1 ) 2 M S E PSNR = 10lg\dfrac{\left(2^{bits}-1\right)^{2}}{MSE} PSNR=10lgMSE(2bits−1)2</