实验目的:
掌握DPCM编解码系统的基本原理。初步掌握实验用C语言编程实现DPCM编码器并分析其压缩效率。
主要设备:
安装 Windows 和 Visual Studio 软件的个人计算机
实验内容:
DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。在DPCM系统中, 需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。
2. DPCM编码系统的设计
在本次实验中,我们采用固定预测器和均匀量化器。预测器采用左侧预测。
量化器采用8比特均匀量化。本实验的目标是验证DPCM编码的编码效率。首先读取一个256级的灰度图像,采用自己设定的预测方法计算预测误差,并对预测误差进行8比特均匀量化。还可对预测误差进行1比特、2比特和4比特的量化设计。
为了让残差图可见性更强,对残差图进行了非均匀量化。
在DPCM编码器实现的过程中可同时输出预测误差图像和重建图像。将预测误差图像写入文件并将该文件输入Huffman编码器,得到输出码流、给出概率分布图并计算压缩比。将原始图像文件输入Huffman编码器,得到输出码流、给出概率分布图并计算压缩比。
比较两种系统(1.DPCM+熵编码和2.仅进行熵编码)之间的编码效率(压缩比和图像质量)。压缩质量以PSNR进行计算。
3. PSNR的实现:
PSNR:峰值信噪比,是一种全参考的图像质量评价指标。计算公式如下
其中,MSE表示当前图像X和参考图像Y的均方误差(MeanSquare Error),H、W分别为图像的高度和宽度;n为每像素的比特数,一般取8,即像素灰阶数为256. PSNR的单位是dB,数值越大表示失真越小。
其中读取RGB数据,RGB2YUV,均调用了实验2的函数
输出重建图像,预测误差图像的UV值均使用128
在每一行中,由于第一个像素的前面没有像素,因此假设它的预测值为平均灰度值 128 。
量化等级=512/2(量化比特数)次方
int Qlevel = 512 / (1 << (Qbit));
Switch(量化比特数)
Case 8:
For( j=0 ; j<高 ; j++)
{
For( j=0 ; j<宽 ; j++)
{
If(是第一列)
{
预测误差值=((原值-128)+256)/量化等级
重建值=(预测误差值*量化等级)-256+128
}
Else
{
预测误差值=((原值-上一个重建值)+256)/量化等级
重建值=(预测误差值*量化等级)-256+上一个重建值
}
}
}
外层循环为图像中每一行的循环,每行起始像素的预测值设为 128,单独对其进行预测并重建。首先得到差值 ek,像素灰度值范围从 0 到 255,那么两个像素灰度值之差的范围从 -255 到 255。由于要存储误差图像,那么先把负灰度值变成正的,也就是+ 255,在 0 到 510 这个区间内再做量化,区间长度可以看成 9 bit,512 级。
为了让残差图可见性更强,对残差图进行了非均匀量化。
switch (deviabuffer[j*Width + i])
{
case 0:deviabuffer2[j*Width + i] = 0; break;
case 6:deviabuffer2[j*Width + i] = 64; break;
case 7:deviabuffer2[j*Width + i] = 128; break;
case 8:deviabuffer2[j*Width + i] = 255; break;
default:deviabuffer2[j*Width + i] = 255;
}
psnr计算
原图.bmp |
预测差值图.yuv |
重建图.yuv |
差值图的概率分布 |
以下,略 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
原图像 |
原始图像大小(KB) |
直接熵编码大小(KB) |
直接熵编码压缩比 |
预测差值图像大小(KB) |
DPCM+熵编码压缩比 |
DPCM+熵编码重建图像PSNR(DB) |
Birds |
1120 |
1099 |
1.019 |
199 |
5.628 |
14.098 |
Noise256B |
66 |
60 |
1.100 |
46 |
1.435 |
14.3484 |
Lena256B |
193 |
184 |
1.049 |
46 |
4.196 |
12.8118 |
Camman256B |
66 |
59 |
1.119 |
41 |
1.609 |
12.3896 |
Clown256B |
66 |
64 |
1.031 |
48 |
1.333 |
12.1424 |
Fruit256B |
66 |
64 |
1.031 |
42 |
1.571 |
11.9524 |
Zone256B |
66 |
64 |
1.031 |
72 |
0.917 |
13.7038 |
Odie256B |
66 |
13 |
5.077 |
17 |
3.882 |
13.0754 |
预测误差图像都为明显的灰色,电平集中分布在128附近,量化过程中将量化误差抬升128电平所以表明实际预测误差值集中分布在 0 左右,证明对于正常图像,左右相邻像素之间存在很强的关联性,利用相关性对像素量化后进行压缩压缩比会很理想。
量化比特数 |
预测误差图像 |
重建图像 |
误差概率分布 |
8 |
|
看pdf去 |
|
4 |
|
|
|
2 |
|
|
|
1 |
|
|
|
程序代码见附件
完整文档图如下