DPCM压缩系统的分析与实现
一,实验目的
掌握DPCM解编码系统的基本原理。
初步掌握实验用C/C++/Python等语言编程实现DPCM编码器,并分析压缩效率。
二,实验原理
1,DPCM解编码原理
DPCM是差分预测编码调制。预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。
2,DPCM编码系统的设计
在本次实验中,采用固定预测器和均匀量化器。预测器采用左侧预测。量化器采用8比特均匀量化。为了验证DPCM编码的编码效率。首先读取一个256级的灰度图像,与前一个像素作差得到预测误差,并对预测误差进行8比特均匀量化。
三,实验步骤
DPCM量化编码
int r=pow(2,(double)(9-depth));
for(int i=0;i<h;i++)
for(int j=0;j<w;j++)
{
if(j == 0)//第一列保持原样值不变
{
qBuf[i*w]=((yBuf[i*w]-128)+255)/pow(2,(double)(9-depth));//预测误差量化
reBuf[i*w]=qBuf[i*w]*pow(2,(double)(9-depth))+255-128;//反量化
}
else
{
qBuf[i*w+j]=((yBuf[i*w+j]-reBuf[i*w+j-1])+255)/pow(2,(double)(9-depth));//当前预测误差为当前样值与上个重构样值的差值(量化后)
reBuf[i*w+j]=qBuf[i*w+j]*pow(2,(double)(9-depth))-255+reBuf[i*w+j-1];//当前重构样值为量化后的当前预测误差与上一个重构样值的和
}
if(qBuf[i*w+j]>255)
qBuf[i*w+j]=255;
if (qBuf[i*w+j]< 0)
qBuf[i*w+j]=0;
if (reBuf[i*w+j]>255)
reBuf[i*w+j]=255;
if (reBuf[i*w+j]<0)
reBuf[i*w+j]=0;
}
四,实验结果
自左向右依次是:原始图像、8比特预测量化图像、重建图像
PSNR结果:
概率分布结果:
熵编码 | DPCM+熵编码 | 压缩比 | |
---|---|---|---|
原图像 | 96kb | 69kb | 71.86% |
8bit预测量化图像 | 96kb | 46kb | 47.92% |
所以DPCM+熵编码的编码效率比仅熵编码的压缩比低