DPCM 压缩系统的实现和分析

本文探讨了DPCM(差分预测编码调制)的原理,它利用预测编码减少数据量。实验中,对256级灰度图像进行DPCM编码,采用左侧预测和8比特均匀量化。实验结果表明,DPCM编码对于相邻像素相关性大的图像,压缩效果更佳;而相邻像素差异大的图像,压缩效率降低。
摘要由CSDN通过智能技术生成

实验原理

1.预测编码
利用信源相邻符合之间的相关性,根据某一模型利用以往的样本值对新样本进行 预测,然后将样本的实际值与其预测值相减得到一个误差值,最后对这一误差值进行编码。如果模型足够好,且样本序列在时间上相关性 较强,则误差信号的幅度将远远小于原始信号 ,从而得到较大的数据压缩。
2.DPCM
DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。
在本次DPCM中,只将前一个像素的值当作预测值,再取当前的像素值和预测值之差进行编码。由于当前值和预测值之间有较强的相关性,所以预测误差的可能取值范围比抽样值的范围小,因此对预测误差进行编码,可以减少编码的比特率。
DPCM是一种负反馈的系统,采用后向自适应的框架进行设计。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的重建样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。
这里写图片描述
x(n)为当前像素的原始值,d(n)为预测误差,p(n)为当前像素的预测值,d*(n)为经过量化后的误差值。
在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器和量化器应进行联合优化。实际中,采用一种次优的设计方法:分别进行线性预测器和量化器的优化设计。

实验流程

本实验的目标是验证DPCM编码的编码效率。在本次实验中,我们采用固定预测器和均匀量化器。
1.首先读取一个256级的灰度图像
2.采用自己设定的预测方法计算预测误差,本实验中预测器采用左侧预测。
3.对预测误差进行8比特均匀量化

关键代码

读取256级的灰度图像

该步骤与第二次试验的bmp2yuv相同,在此不再赘述。只是本次实验中,仅读出yuv文件中的亮度值即y的值。

开辟三个缓冲区

1.yBuf用于存储原始样本
yBuffer用于给指针指向的内容赋值

u_int8_t* yBuf = NULL;
u_int8_t* yBuffer = NULL;
yBuf = (u_int8_t*)malloc(frameWidth * frameHeight);
yBuffer = yBuf;

2.buildBuf用于存储重建样本
buildBuffer用于给指针指向的内容赋值

u_int8_t* buildBuf = NULL;
u_int8_t* buildBuffer = NULL;
buildBuf = (u_int8_t*)malloc(frameWidth * frameHeight);
buildBuffer = buildBuf;

3.errorBuf用于存储预测误差
errorBuffer用于给指针指向的内容赋值

u_int8_t* errorBuf = NULL;
u_int8_t* errorBuffer = NULL;
errorBuf = (u_int8_t*)malloc(frameWidth * frameHeight);
errorBuffer = errorBuf;

DPCM编码及量化过程的实现

在本程序中取所有像素的左侧像素作为预测,将整幅画面第一列的预测值均设置为128,得到的预测误差范围为-255~+255,为9比特。首先对其进行8比特量化,及对其进行除2并且下取整,因此量化后其误差范围变为-127~127,为了存储预测误差,将其范围变为0~255,因此在量化的基础上+128。将量化后的误差进行反量化,在加上预测值,得到对应像素的重建值。而这一重建值应作为下一像素的预测值进行新一轮的预测编码。
具体程序实现如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值