数据压缩原理与应用 实验四 DPCM 压缩系统的实现和分析
来源:互联网 发布:Js调用webview 编辑:程序博客网 时间:2024/06/08 09:37
一、基本原理
1.预测编码
预测编码利用信源相邻符号之间的相关性,根据某一模型利用以往的样本值对新样本进行预测,然后将样本的实际值与其预测值相减得到一个误差值,最后对这一误差值进行编码。
如果模型足够好,且样本序列在时间上相关性较强,则误差信号的幅度将远远小于原始信号,从而得到较大的数据压缩。
2.DPCM基本原理
DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。
在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器和量化器应进行联合优化。实际中,采用一种次优的设计方法:分别进行线性预测器和量化器的优化设计。
在本次实验中, 我们采用固定预测器和均匀量化器。 预测器采用左侧、 上方预测均可。量化器采用8比特均匀量化。
二、实验流程
三、代码分析
第一步在之前的实验里都做过,不再赘述
核心代码:
/*对y分量进行DPCM处理*/ int dn = 0;//预测误差值 unsigned char * dnBuf = (unsigned char *)malloc(frameWidth * frameHeight);//量化预测误差 unsigned char * reBuf = (unsigned char *)malloc(frameWidth * frameHeight);//重建图像 int scale = 512 / (1 << Qbits);//误差值的压缩比率 //逐行逐列处理 for (int i = 0; i < frameHeight; i++) { for (int j = 0; j < frameWidth; j++) { //预测误差值等于当前值减去预测误差值 if (j == 0) //第一列像素的预测值统一设为128 { dn = yBuf[i * frameWidth] - 128; } else//非第一列像素,预测值为当前像素减去前一个像素的重建值 { dn = yBuf[i * frameWidth + j] - reBuf[i * frameWidth + j - 1]; } //对预测误差进行量化 dnBuf[i * frameWidth + j] = (dn + 255) / scale; //当前像素的重建值等于量化后的预测误差加上预测值 if (j == 0){ reBuf[i * frameWidth] = dnBuf[i * frameWidth] * scale + 128; } else { reBuf[i * frameWidth + j] = dnBuf[i * frameWidth + j] * scale + reBuf[i * frameWidth + j - 1]; } } }
四、实验结果
1.压缩效果
2.文件各阶段图像
从上述表格可以看出,对于一般的图像,相邻像素相关性高,预测误差概率都集中分布在0附近,且DPCM+Huffman的组合压缩效率大于仅进行Huffman编码的效率;对于相邻像素相关性不高,如Noise和Zone这两幅图像,其预测误差概率分布较平均,进行DPCM处理的意义不是很大。
阅读全文
0 0
- 数据压缩原理与应用 实验四 DPCM 压缩系统的实现和分析
- 数据压缩实验四 DPCM压缩系统的实现与分析
- 数据压缩实验四:DPCM 压缩系统的实现和分析
- 数据压缩实验四 DPCM 压缩系统的实现和分析
- 数据压缩 实验四 DPCM压缩系统的实现和分析
- 数据压缩 实验四 DPCM压缩系统的实现和分析
- 数据压缩原理 实验四 DPCM压缩系统的实现和分析
- 数据压缩实验四——DPCM压缩系统的实现和分析
- 实验四 DPCM 压缩系统的实现和分析
- 实验四 DPCM压缩系统的实现和分析
- 实验四 DPCM压缩系统的实现和分析
- 【数据压缩】DPCM 压缩系统的实现和分析
- 数据压缩实验四--dpcm压缩系统
- DPCM 压缩系统的实现和分析
- DPCM 压缩系统的实现和分析
- DPCM 压缩系统的实现和分析
- 【数据压缩】实验四 DPCM
- 数据压缩原理与应用 DPCM编码
- spring mvc异常处理
- 程序员代码中的希腊字母表示
- bzoj1322: Zju2429 Destroying The Graph
- mixins混合
- hdu 1114 Piggy-Bank
- 数据压缩原理与应用 实验四 DPCM 压缩系统的实现和分析
- springBoot 集成druid
- CodeFroces 810B Summer sell-off
- 开发
- 高通kernel顶层目录下的AndroidKernel.mk文件
- 打开虚拟机出现这种情况:获取 VirtualBox COM 对象失败,应用程序将被中断。
- 系统移植的四大步骤 详解
- java数据类型
- LeetCode 492. Construct the Rectangle (算法)