实验四 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
Camman256B.bmp
Clown256B.bmp
Fruit256B.bmp
Lena256B.bmp
Noise256B.bmp
Odie256B.bmp
Zone256B.bmp
从上图中可以发现,误差图像主要勾勒了轮廓等左右色值变化剧烈的地方。像Fruit256B.bmp这样原图比较复杂,但存在许多平坦区域的图像,其待进行Huffman编码的预测误差图像的字符分布概率比较集中,联想Huffman编码实验中得到的结论,推测其压缩比会比较大。而Noise256B.bmp、Zone256B.bmp这样左右像素相关性很低的图像,其预测误差图像的字符概率分布比较平均,Huffman编码后的压缩比很可能在1附近,甚至可能小于1。
比较表格中的数据可以验证上述结论。但Odie256B.bmp这幅图像虽然存在大面积平坦背景,其经过DPCM后熵编码的压缩比和直接熵编码的相等。由于压缩比=原文件大小(kB)/压缩后文件大小 (kB) ,当原文件的概率分布已经接近熵编码后的概率分布时,DPCM就比较多余了。
- 实验四 DPCM 压缩系统的实现和分析
- 数据压缩实验四:DPCM 压缩系统的实现和分析
- 实验四 DPCM压缩系统的实现和分析
- 实验四 DPCM压缩系统的实现和分析
- 数据压缩实验四 DPCM 压缩系统的实现和分析
- 数据压缩 实验四 DPCM压缩系统的实现和分析
- 数据压缩 实验四 DPCM压缩系统的实现和分析
- 数据压缩实验四 DPCM压缩系统的实现与分析
- 数据压缩实验四——DPCM压缩系统的实现和分析
- 数据压缩原理与应用 实验四 DPCM 压缩系统的实现和分析
- 数据压缩原理 实验四 DPCM压缩系统的实现和分析
- DPCM 压缩系统的实现和分析
- DPCM 压缩系统的实现和分析
- DPCM 压缩系统的实现和分析
- 【数据压缩】DPCM 压缩系统的实现和分析
- 数据压缩实验四--dpcm压缩系统
- 实验报告4_DPCM压缩系统的实现和分析
- 实验四-dpcm编码
- 图文对齐居中的几种方式
- 根据给定正则表达式的匹配拆分此字符串 split(regex);
- Java Mina 基于NIO的通讯框架——编写服务器端
- 模型汇总-12 深度学习中的表示学习_Representation Learning
- 读入/输出优化
- 实验四 DPCM压缩系统的实现和分析
- eclipse 中配置 tomcat 服务器
- C++STL 仿函数
- HDU5510-思维-字符串匹配剪枝
- 选择排序和冒泡排序以及求最大数和求最小数
- C++ 19 —— 模板
- Hdu2051 *** Bitset (十进制化二进制)
- 二叉树的各种操作(面试必备)
- iOS 程序员、架构师、技术经理、技术总监和CTO有啥区别?