作业|DPCM编码算法的实现及联合Huffman编码的压缩效率对比分析

本文详细介绍了DPCM编码的原理和实现,并通过与仅使用熵编码的对比,探讨了DPCM结合熵编码在压缩效率上的优势。实验数据显示,DPCM+熵编码的压缩比达到2.10:1,而单独熵编码为1.41:1。此外,还分析了DPCM编码后的图像PSNR值,表明了其在图像质量还原上的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DPCM编码

DPCM编码介绍

PCM编码,简称差值编码,是对模拟信号幅度抽样的差值进行量化编码的调制方式(抽样差值的含义请参见“增量调制”)。这种方式是用已经过去的抽样值来预测当前的抽样值,对它们的差值进行编码。差值编码可以提高编码频率,这种技术已应用于模拟信号的数字通信之中。

对于有些信号(例如图像信号)由于信号的瞬时斜率比较大,很容易引起过载,因此,不能用简单增量调制进行编码,除此之外,这类信号也没有像话音信号那种音节特性,因而也不能采用像音节压扩那样的方法,只能采用瞬时压扩的方法。但瞬时压扩实现起来比较困难,因此,对于这类瞬时斜率比较大的信号,通常采用一种综合了增量调制和脉冲编码调制两者特点的调制方法进行编码,这种编码方式被简称为脉码增量调制,或称差值脉码调制,用DPCM表示。

DPCM编码原理

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

在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器 和量化器应进行联合优化。实际中,采用一种次优的设计方法:分别进行线性预测器和 量化器的优化设计。

DPCM代码实现

 for (int i = 0; i < width * height; i++)
    {
   
        if (i % width == 0)
        {
   
            last=128;
            diff = orig[i] - last;
        }
        else
        {
   
            last = rebuff[i - 1];
            diff = orig[i] - last;
        }
        
        dibuff[i] = unsigned char (diff/2+128) ;
        rebuff[i] = unsigned char(last) + dibuff[i]*2;
        if (rebuff[i] > 255)
        {
   
            rebuff[i] = 255;
        }
        if (rebuff[i] < 0 )
        {
   
            rebuff[i] = 0;
        }
        
    }

DPCM输出结果

在这里插入图片描述

编码效率比较

1.DPCM+熵编码
2.仅进行熵编码

在这里插入图片描述
Lena256B原图与DPCM后概率分布比较

1.DPCM+熵编码

将预测误差图像 写入文件并将该文件输入Huffman编码器,得到输出码流、给出概率分布图并计算压缩比。
在这里插入图片描述
压缩比:2.10:1

2.仅进行熵编码

原始图像文件输入Huffman编码器,得到输出码流、给出概率分布图并计算压缩比
在这里插入图片描述
压缩比:1.41:1

编码效率比较

PSNR

PSNR,即Peak Signal to Noise Ratio,峰值信噪比,是一种评价图像的客观标准。其数学公式为:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值