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

一、基本原理

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)压缩比
Birds11473843031.271472.61
Camman6664491.31322.00
Clown6664541.19391.64
Fruit6664541.19341.88
Lena19364531.21371.73
Noise6664541.19631.06
Odie6664134.9297.11
Zone6664551.16641.00
2.文件各阶段图像
原图像重建图像和量化误差图像概率分布预测误差概率分布
Birds1Birds2Birds3Birds4
Camman1Camman2Canman3Camman4
Clown1Clown2Clown3Clown4
Fruit1Fruit2Fruit3Fruit4
Lena1Lena2Lena3Lena4
Noise1Noise2Noise3Noise4
Odie1Odie2Odie3Odie4
Zone1Zone2Zone3Zone4

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
DPCM(差分脉冲编码调制)是一种数据压缩系统,其目的是在尽量不失真的情况下减少数据存储或传输所需的带宽。DPCM 压缩系统实现主要是在传输前对原始信号进行差分编码,将每一个样本值与它前面的样本值的差值编码传输。在解码端,将编码的差值与前一个样本值相加,得到解码后的样本值。 DPCM 压缩系统的性能取决于差分编码器的性能和采样率。通常,差分编码器需要对原始信号进行线性预测,并将其与实际样本值的差异编码。预测器的设计和参数设置是影响性能的关键因素。 DPCM 压缩系统主要有以下优点:首先,DPCM 采用差分编码,可以将一系列相邻的样本压缩成差分值,从而减少需要传输的数据量。其次,由于 DPCM 是一种有损压缩策略,可以通过控制压缩后的失真来有效地减少数据量。再者,DPCM 压缩系统的计算和编码速度较快,可以在硬件中实现,适用于实时视频或音频传输。 然而,DPCM 压缩系统也有一些缺点。首先,差分编码容易受到干扰和噪声的影响,从而导致误差传播和失真的增加。此外,DPCM 不适用于大多数不规则信号,如图片和文本等。 总之,DPCM 压缩系统是一种有损压缩策略,可以通过对原始信号进行差分编码来减少数据量。其性能主要取决于差分编码器的设计和采样率,适用于实时音视频传输和存储等场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值