实验四 DPCM压缩系统的实现和分析

来源:互联网 发布:真正的网络兼职 编辑:程序博客网 时间:2024/06/08 08:08

一、实验原理

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
原图
预测误差图像
重建图像Y分量

Camman256B.bmp
原图
预测误差图像
重建图像Y分量

Clown256B.bmp
原图
预测误差图像
重建图像Y分量

Fruit256B.bmp
原图
预测误差图像
重建图像Y分量

Lena256B.bmp
原图
预测误差图像
重建图像Y分量

Noise256B.bmp
原图
预测误差图像
重建图像Y分量

Odie256B.bmp
原图
预测误差图像
重建图像Y分量

Zone256B.bmp
原图
预测误差图像
重建图像Y分量

从上图中可以发现,误差图像主要勾勒了轮廓等左右色值变化剧烈的地方。像Fruit256B.bmp这样原图比较复杂,但存在许多平坦区域的图像,其待进行Huffman编码的预测误差图像的字符分布概率比较集中,联想Huffman编码实验中得到的结论,推测其压缩比会比较大。而Noise256B.bmp、Zone256B.bmp这样左右像素相关性很低的图像,其预测误差图像的字符概率分布比较平均,Huffman编码后的压缩比很可能在1附近,甚至可能小于1。

这里写图片描述

比较表格中的数据可以验证上述结论。但Odie256B.bmp这幅图像虽然存在大面积平坦背景,其经过DPCM后熵编码的压缩比和直接熵编码的相等。由于压缩比=原文件大小(kB)/压缩后文件大小 (kB) ,当原文件的概率分布已经接近熵编码后的概率分布时,DPCM就比较多余了。

阅读全文
0 0
原创粉丝点击