数据压缩实验四:DPCM编码
来源:互联网 发布:蓝牙共享网络 上不了网 编辑:程序博客网 时间:2024/06/05 14:50
一、基本原理
DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。
二、实验流程
1. 读入BMP文件,转化为YUV文件并提取Y分量;
2. 对该灰度图像进行预测,预测器的输入为上一个样点的重建值,计算预测误差;
3. 对预测误差进行8bit均匀量化;
4. 对量化后的预测误差进行反量化,求重建值;
5. 将预测误差图像写入文件,并将该文件输入实验三的Huffman编码器,得到输出码字的必要信息;将原始灰度图像输入Huffman编码器,得到码字必要信息并比较两种系统(DPCM+熵编码和仅进行熵编码)之间的编码效率。
三、关键代码分析
在实验二BMP2YUV的基础上加一段代码 :
qBuf = (unsigned char *)malloc(height*width);reBuf = (unsigned char *)malloc(height*width);int temp;for (int j = 0; j<height; j++) {for (int i = 0; i<width; i++){if (i == 0) {//每列第一个元素保持原来的样值不变,只是变换相应的数据类型temp= (*(yBuf + j*width + i) - 128) / 2 + 128;//计算量化误差*(qBuf + j*width + i) = (unsigned char)temp;temp = ((*(qBuf + j*width + i) - 128) *2) + 128; //计算重建值*(reBuf + j*width + i) = (unsigned char)temp;}else{ //当前差值信号为当前样值与上个预测样值的差值 并进行了量化temp= (*(yBuf + j*width + i) - *(reBuf + j*width + i - 1)) / 2+ 128;*(qBuf + j*width + i) = (unsigned char)temp;//当前重建信号为 反量化后的差值信号与上一个重建信号的和temp= ((*(qBuf + j*width + i) - 128) *2) + *(reBuf + j*width + i - 1);*(reBuf + j*width + i) = (unsigned char)temp;}}}fwrite(reBuf, 1, width * height, reFile); //写入文件fwrite(qBuf, 1, width * height, qFile);
四、实验结果
以下依次为原始灰度图像、预测误差图像、重建图像:
原始图像概率分布 预测误差图像概率分布
自己找的图:
从以上几幅图可以看出重建图像和原始图像在并没有太大的差别,量化误差的概率分布集中分布在中间部分。
文件压缩比的对比:
从上表可以看出DPCM+熵编码的压缩比普遍比直接进行熵编码的压缩比要高,压缩效果要更好。
五、实验中出现的问题
转化成的YUV灰度图像比BMP文件要大,经过检验发现了两个问题:
(1)在YUV文件输出时没有注释掉输出U分量和V分量的代码
(2)打开文件时类型写错了,应该是“wb”而不是“ab+”
阅读全文
0 0
- 数据压缩实验四:DPCM编码
- 数据压缩实验四:DPCM编码
- 【数据压缩】实验四 DPCM
- 数据压缩实验4-DPCM编码
- 实验四-dpcm编码
- 实验四 DPCM编码
- 实验四 DPCM编码
- 实验四:DPCM编码
- 数据压缩实验四--dpcm压缩系统
- 数据压缩 DPCM编码
- 数据压缩实验四:DPCM 压缩系统的实现和分析
- 数据压缩实验四 DPCM压缩系统的实现与分析
- 《数据压缩》实验报告四·DPCM编解码
- 数据压缩实验四 DPCM 压缩系统的实现和分析
- 数据压缩 实验四 DPCM压缩系统的实现和分析
- 数据压缩 实验四 DPCM压缩系统的实现和分析
- 实验四——DPCM编码
- 【实验五】DPCM编码
- Mybatis Generator最完整配置详解
- 相控阵雷达天线与MIMO天线的区别
- 【Keras案例学习】 CNN做手写字符分类
- 【源码分析】Android触摸事件的分发拦截
- java 自定义异常类
- 数据压缩实验四:DPCM编码
- Java Calendar 类的时间操作
- 关于双飞翼布局的个人操作总结
- 职场必杀技之高效工作
- hadoop系列之一安装linux系统CentOS6.7
- 自动化测试
- Andriod开发-数据持久化技术
- [工作流与Activiti]
- List遍历