【数据压缩】DPCM编解码
来源:互联网 发布:阿里云io优化 编辑:程序博客网 时间:2024/06/03 06:38
一、DPCM编解码原理
DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。
需要注意的是,预测器的输入是已经解码以后的样本(即重构样本)。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器。
当采用左侧预测时,在第一个样本输入时,我们假定误差值第一列都为128(已量化),重构图像值为原始样本值。当第二个样本输入,此原始样本减去上一个重构样本,得到未经量化的误差值,经过量化后得到第二个的量化误差(第一个是128嘛,我们以行为单位看)。而此时我们将量化误差反量化得到误差,加上前一个重构样本得到此时的重构样本。这就得到了量化误差图像和重构图像(仅有y,我们也可以自己写入uv)。
二、主要代码分析
1、我们选择在yuv2rgb文件里面加入编码器,为了直接用新鲜出炉的y数据流
unsigned char *rexn,*en;//开的空间 rexn为重建值 en为量化误差值unsigned char *rexnn,*enn;//指针int p1,p2;//中间变量
float p3;//中间变量
2、给他们开辟空间
rexn=(unsigned char *)rex;//空间大小在main函数中定义en=(unsigned char *)e;
3、编码过程
rexnn = rexn;enn = en; y=y_buffer;for(i=0;i<y_dim;i++){for(j=0;j<x_dim;j++){if(j==0)//第一列特殊{*(enn+i*x_dim)=128;//量化误差给128*(rexnn+i*x_dim)=*(y+i*x_dim);//重建值给原值}else{p1=0;p1=*(y+j+i*x_dim)-*(rexnn+j-1+i*x_dim);//误差值//p2=quantizier(p1,enn+i*x_dim+j,8);//8bit量化p3=p1/2+128;//8bit量化*(enn+i*x_dim+j)=(unsigned char)p3;p2=(p3-128)*2;//反量化if((p2+*(rexnn+i*x_dim+j-1))>=0 && ((p2+*(rexnn+i*x_dim+j-1)) <=255))//防止溢出写的限制条件{*(rexnn+j+i*x_dim)=((p2+*(rexnn+i*x_dim+j-1)));//重建值}else {if((p2+*(rexnn+i*x_dim+j-1))<0)*(rexnn+j+i*x_dim)=0;else*(rexnn+j+i*x_dim)=255;}}}}
三、实验数据分析
我们有几幅老师给的图像,也有自己的8位bmp图,然后输出量化误差图像和重构图像,分析图像质量。然后将量化误差图像和原始图像分别输入上次试验的Huffman编码器,对比两种系统(DPCM+熵编码和仅进行熵编码)之间的编码效率。还做了一下关于几比特量化对重构图像造成的影响的实验
1、实验用图的原始图像、重构图像和量化误差图像。test.yuv是原图,test-1.yuv是重构图,test-2.yuv是预测误差图。
2、对比两种系统,得到的压缩比和概率分布图。可看出量化误差编码集中在128附近,结合了DPCM编码的Huffman编码出来的效果很好,文件压缩好。
Birds.bmp/Ben.yuv
Camman256B.bmp/Cammanen.yuv
Clown256B.bmp/Clownen.yuv
Lena256B.bmp/Lena256B.yuv
Fruit256B.bmp/Fen.yuv
D4.bmp/D2en.yuv
e4.bmp/een.yuv
3、几比特量化带来的影响。
2bit量化,存在严重失真,重构图像不好。
4bit量化,仍存在失真。
8bit量化,重构图像好看,且量化误差图像均值效果好。
四、实验感想
DPCM是比较典型的预测编码系统,理清楚编码过程之后代码实现较轻松。当然还需要注意数据溢出的情况,数据类型在其中也不容忽视,要意识到最初的误差是有符号的(可能是负数),所以不能盲目选择数据类型。量化器也不能随意选择,要注意尽量使量化误差接近128。
- 【数据压缩】DPCM编解码
- 《数据压缩》实验报告四·DPCM编解码
- DPCM编解码
- 【数据压缩】Huffman编解码
- 【数据压缩】JPEG编解码
- 音视频数据压缩及编解码基础
- 音视频数据压缩及编解码基础
- 【实验四】无损数据压缩编解码实验
- 数据压缩原理实验4_DPCM编解码
- 数据压缩实验三:Huffman编解码
- 数据压缩 DPCM编码
- 【数据压缩】实验四 DPCM
- 数据压缩实验四:DPCM编码
- 数据压缩实验4-DPCM编码
- 数据压缩实验四:DPCM编码
- 《数据压缩》实验报告五·JPEG编解码
- 数据压缩实验三--Huffman编解码及压缩率的比较
- 实验三 无损数据压缩编解码实验(Huffman编解码)
- 垃圾回收机制
- php四种基础排序(基础算法)----①冒泡排序法
- 数据访问层
- 函数调用—sqrt函数
- windows2008服务器优化学习
- 【数据压缩】DPCM编解码
- 1329
- VR中特定相机截屏问题与实现
- ImageButton已移
- JVM的内存存储详解
- atoi 函数的实现
- [BZOJ1088][SCOI2005]扫雷Mine(dp)
- shell提取文件名称和类型
- GLSE 语句和结构体