数据压缩实验四 DPCM 压缩系统的实现和分析

本文介绍了DPCM(差分预测编码调制)的原理,包括预测器和量化器的设计,以及在实验中采用的固定预测器和均匀量化器。通过对比不同量化位数的效果,分析了DPCM编码的压缩性能,指出DPCM+熵编码方案相比仅熵编码能提供更高的压缩率,尤其在处理空间冗余较大的图像时效果更佳。同时,实验也揭示了噪声图像和特殊像素分布图像的压缩挑战。
摘要由CSDN通过智能技术生成

一、实验原理

1.DPCM编解码原理
  DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。
原理图
  在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器和量化器应进行联合优化。实际中,采用一种次优的设计法:分别进行线性预测器和量化器的优化设计。
2.DPCM编码系统的设计
  在本次实验中,采用固定预测器和均匀量化器。预测器采用左侧、上方预测均可。量化器采用8比特均匀量化。本实验的目标是验证DPCM编码的编码效率。首先读取一个256级的灰度图像,采用预设的预测方法计算预测误差,并对预测误差进行8比特均匀量化(基本要求) 。还可对预测误差进行1比特、2比特和4比特的量化设计。

二、代码分析

处理程序在实验二BMP2YUV基础上进行,其中yBuf数组中已存储着图像的灰度值,作为编码器的输入。

    qBuf = (unsigned char *)malloc(height*width);
    reBuf = (unsigned char *)malloc(height*width);
    int temp;
    for (int j = 0; j<height; j++)  
    {
        for (int i = 0; i<width; i++)
        {
            if (i == 0)  
            {
                //每列第一个元素保持原来的样值不变,只是变换相应的数据类型
                temp= (*(yBuf + j*width + i) - 128) / 2 + 128;//计算量化误差
                *(qBuf + j*width + i) = (unsigned char)temp;
                temp = ((*(qBuf + j*width + i) - 128) *2) + 128; //计算重建值
                *(reBuf + j*width + i) = (unsigned char)temp;

            }
            else
            {    //当前差值信号为当前样值与上个预测样值的差值 并进行了量化
                temp= (*(yBuf + j*width + i) - *(reBuf + j*width + i - 1)) / 2+ 128;
                *(qBuf + j*width + i) = (unsigned char)temp;
                //当前重建信号为 反量化后的差值信号与上一个重建信号的和
                temp= ((*(qBuf + j*width + i) - 128) *2) + *(reBuf + j*width + i - 1);
                *(reBuf + j*width + i) = (unsigned char)temp;

            }
        }
    }

三.实验结果与分析

将八幅不同类型的样图进行DPCM变换,观测其重建图像,与差分数据的显示效果。对差分文件进行Huffman 编码,将其符号的分布统计得到下表结果。

原始图像预测量化图像重建图像
zebra stripesare neat$1
zebra stripesare neat
zebra stripesare neat$1
zebra stripesare neat
zebra stripesare neat$1
zebra stripesare neat
zebra stripesare neat$1
zebra stripesare neat
zebra stripesare neat$1
zebra stripesare neat
zebra stripesare neat$1
zebra stripesare neat
zebra stripesare neat$1
zebra stripesare neat
zebra stripesare neat$1
zebra stripesare neat

压缩性能能比较:

文件名称源文件大小(KB)huffman变换(KB)压缩比DPCM+huffman变换(KB)压缩比
birds.bmp3843041.261482.59
lena.bmp64531.20371.73
clown.bmp64541.18391.64
camman.bmp64501.28322.00
noise.bmp64541.18631.01
odie.bmp64106.4097.11
zone.bmp64551.16641.00
fruit.bmp64541.18341.88

结果分析:比较两种系统(DPCM+熵编码和仅进行熵编码)之间的编码效率(压缩比和图像质量)
  1. 可以明显观察到重建的图像与原始图像十分接近,而预测误差图像在边缘部分的某些差异与采取的预测方案有关。
  2. 预测误差图像都为明显的灰色,电平集中分布在128附近,量化过程中将量化误差抬升128电平所以表明实际预测误差值集中分布在 0 左右,证明对于正常图像,相邻像素之间存在很强的关联性,利用相关性对像素量化后进行压缩压缩比会很理想。
  3. DPCM+熵编码的方案比单纯只使用熵编码的效果更好,能达到很高的压缩率
  4. t05噪声图像:预测误差概率分布零散没有规律,使用 DPCM+熵编码 或者 Huffman 编码的方案进行压缩后得到的效果均不如其他有内容图片。
  5. t07同心圆:虽然不是噪声图像,但是两个极端灰度值 0 和 255交替分布的,因此误差范围也很宽不易压缩。
  综上,利用DPCM进行预测编码时,空间冗余越大,压缩效率越高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值