数据压缩原理与应用 实验四 DPCM 压缩系统的实现和分析

来源:互联网 发布:Js调用webview 编辑:程序博客网 时间:2024/06/08 09:37

一、基本原理

1.预测编码

预测编码利用信源相邻符号之间的相关性,根据某一模型利用以往的样本值对新样本进行预测,然后将样本的实际值与其预测值相减得到一个误差值,最后对这一误差值进行编码。
如果模型足够好,且样本序列在时间上相关性较强,则误差信号的幅度将远远小于原始信号,从而得到较大的数据压缩。

2.DPCM基本原理

DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。
这里写图片描述

符号 含义 xn 当前输入的数字信号样值 pn 当前像素值的预测值 dn 预测误差,xnpn d^n 量化后的预测误差 x^n 当前像素的重建值,d^n+pn

在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器和量化器应进行联合优化。实际中,采用一种次优的设计方法:分别进行线性预测器和量化器的优化设计。
在本次实验中, 我们采用固定预测器和均匀量化器。 预测器采用左侧、 上方预测均可。量化器采用8比特均匀量化。

二、实验流程

这里写图片描述

三、代码分析

第一步在之前的实验里都做过,不再赘述
核心代码:

/*对y分量进行DPCM处理*/    int dn = 0;//预测误差值    unsigned char * dnBuf = (unsigned char *)malloc(frameWidth * frameHeight);//量化预测误差    unsigned char * reBuf = (unsigned char *)malloc(frameWidth * frameHeight);//重建图像    int scale = 512 / (1 << Qbits);//误差值的压缩比率    //逐行逐列处理    for (int i = 0; i < frameHeight; i++)    {        for (int j = 0; j < frameWidth; j++)        {            //预测误差值等于当前值减去预测误差值            if (j == 0)  //第一列像素的预测值统一设为128            {                dn = yBuf[i * frameWidth] - 128;            }            else//非第一列像素,预测值为当前像素减去前一个像素的重建值            {                dn = yBuf[i * frameWidth + j] - reBuf[i * frameWidth + j - 1];            }            //对预测误差进行量化            dnBuf[i * frameWidth + j] = (dn + 255) / scale;            //当前像素的重建值等于量化后的预测误差加上预测值            if (j == 0){                reBuf[i * frameWidth] = dnBuf[i * frameWidth] * scale + 128;            }            else            {                reBuf[i * frameWidth + j] = dnBuf[i * frameWidth + j] * scale + reBuf[i * frameWidth + j - 1];            }        }    }

四、实验结果

1.压缩效果

原文件名称 原文件大小(kb) 转YUV大小(kb) Huffman后(kb) 压缩比 DPCM+Huffman后(kb) 压缩比 Birds 1147 384 303 1.27 147 2.61 Camman 66 64 49 1.31 32 2.00 Clown 66 64 54 1.19 39 1.64 Fruit 66 64 54 1.19 34 1.88 Lena 193 64 53 1.21 37 1.73 Noise 66 64 54 1.19 63 1.06 Odie 66 64 13 4.92 9 7.11 Zone 66 64 55 1.16 64 1.00

2.文件各阶段图像

原图像 重建图像和量化误差图像 概率分布 预测误差概率分布 Birds1 Birds2 Birds3 Birds4 Camman1 Camman2 Canman3 Camman4 Clown1 Clown2 Clown3 Clown4 Fruit1 Fruit2 Fruit3 Fruit4 Lena1 Lena2 Lena3 Lena4 Noise1 Noise2 Noise3 Noise4 Odie1 Odie2 Odie3 Odie4 Zone1 Zone2 Zone3 Zone4

从上述表格可以看出,对于一般的图像,相邻像素相关性高,预测误差概率都集中分布在0附近,且DPCM+Huffman的组合压缩效率大于仅进行Huffman编码的效率;对于相邻像素相关性不高,如Noise和Zone这两幅图像,其预测误差概率分布较平均,进行DPCM处理的意义不是很大。

原创粉丝点击