一、实验原理
DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。其编码原理框图和数据含义如下图所示:
由图可知,DPCM是一种有误差的编码方式,误差产生在量化器和反量化器上,量化误差=qn-qn’。量化区间越大,量化比特数越小,则量化误差越大。
送入Huffman编码器进行编码传输的是当前样本和其左侧样本的差值的量化值。
DPCM解码是不断将收到的qn与其左侧样本的预测值相加的过程。
二、实验代码
实验实现了将传入的bmp图像文件进行DPCM编解码。先把bmp文件转换为yuv文件(代码参照实验二),再对yuv文件进行编码。一幅图像第一列的预测值都置为128。
在bmp2yuv的主函数中添加以下代码,即可实现8比特量化的DPCM。
for (i = 0; i < Info_header.biHeight; i++)
{
for(j = 0;j < Info_header.biWidth;j++ )
{
if((i*Info_header.biWidth+j) % Info_header.biWidth ==0)
{
youtBuf[i*Info_header.biWidth+j]=128;
qBuf[i*Info_header.biWidth+j]=0;
}
else
{
temp=yBuf[i*Info_header.biWidth+j]-youtBuf[i*Info_header.biWidth+j-1];
qBuf[i*Info_header.biWidth+j]=temp/2;
youtBuf[i*Info_header.biWidth+j]=qBuf[i*Info_header.biWidth+j]*2+youtBuf[i*Info_header.biWidth+j-1];
}
}
}
三、实验结果
birds.yuv

Camman256B.bmp
Clown256B.bmp
Fruit256B.bmp
Lena256B.bmp
Noise256B.bmp
Odie256B.bmp
Zone256B.bmp
从上图中可以发现,误差图像主要勾勒了轮廓等左右色值变化剧烈的地方。像Fruit256B.bmp这样原图比较复杂,但存在许多平坦区域的图像,其待进行Huffman编码的预测误差图像的字符分布概率比较集中,联想Huffman编码实验中得到的结论,推测其压缩比会比较大。而Noise256B.bmp、Zone256B.bmp这样左右像素相关性很低的图像,其预测误差图像的字符概率分布比较平均,Huffman编码后的压缩比很可能在1附近,甚至可能小于1。
比较表格中的数据可以验证上述结论。但Odie256B.bmp这幅图像虽然存在大面积平坦背景,其经过DPCM后熵编码的压缩比和直接熵编码的相等。由于压缩比=原文件大小(kB)/压缩后文件大小 (kB) ,当原文件的概率分布已经接近熵编码后的概率分布时,DPCM就比较多余了。