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,峰值信噪比,是一种评价图像的客观标准。其数学公式为: