数据压缩 DPCM编码
来源:互联网 发布:淘宝潮男秋装 编辑:程序博客网 时间:2024/05/23 15:16
DPCMcoding
实验原理
在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器和量化器应进行联合优化。实际中,采用一种次优的设计方法:分别进行线性预测器和量化器的优化设计。
在本次实验中,我们采用固定预测器和均匀量化器。预测器采用左侧、上方预测均可。
量化器采用8比特均匀量化。
预测编码基本原理
- 信源的相邻符号通常是相关的。
相邻像素具有相关性。 - 预测编码:
利用信源相邻符合之间的相关性。
->根据某一模型利用以往的样本值对新样本进行 预测,然后将样本的实际值与其预测值相减得 到一个误差值,最后对这一误差值进行编码。
->如果模型足够好,且样本序列在时间上相关性 较强,则误差信号的幅度将远远小于原始信号 ,从而得到较大的数据压缩。
DPCM原理图
为防止量化误差累积,采用上一个样点的重建值对当前样点进行预测,故编码器中应内嵌一个解码器(如虚线所示),需要在编码端获得解码重建值。
量化
一、量化器的形式化描述
编码器将每个量化区间的索引发给解码器,解码器用重构水平表示该区间内所有的值。
1. 需要决定的参数:
(1)量化区间的数目
(2)决策边界(判决门限)
(3)重构水平
(4)量化区间索引的码字(量化码字)
2.优化方案
码率与失真之间需要折中,为了降低编码的比特数,需要减低量化区间 的数目,则导致更大的误差。
有两种方案来进行量化器设计:
(1)定长编码,给定Rbit进行量化编码,则量化区间数和量化区间索引码字都定了。确定判决电平和重建电平来使量化误差最小(可以求量化的均量误差MSE)。
(2)给定率失真函数或是量化误差,去决定量化区间数和量化区间的索引码字。
通常采用第一种方式优化量化设计。
二、均匀量化
1.均匀量化器的分类
1.1 中升型Midrise
1.2 中平型Midtread
2.均匀量化对不同分布的效果
2.1 均匀分布
均匀量化器只对均匀分布信源是最佳的。
Midrise↓
Midtread↓
2.2 非均匀分布
对于非均匀分布,可以采用均匀量化或者非均匀量化。
- 非均匀分布的均匀量化
除了最后两边的量化区间,量化间隔是相等的。
例如,对非均匀分布进行3bit量化,共8个量化区间,其中有6个等长量化区间。
量化间隔△越大,颗粒噪声功率越大,过载噪声功率越小。
Midrise↓
Midtread↓
非均匀分布的非均匀量化
非均匀量化具有多种方法,下面仅以LIoyd-Max标量量化器为例。
给定量化级数M=2^n,则每个量化区间的索引用n个比特表示。求最佳bi,yi使得量化误差最小。
若系统只是一个量化过程,对于非均匀分布进行非均匀量化无疑是最优的。
若系统是量化+熵编码,由于熵编码对于分布越不均匀的信源,压缩效率越高,故此时对非均匀分布进行均匀量化,系统性能最优。
实验流程
本实验代码只需在实验二BMPtoYUV基础上加上少量代码实现DPCM编码即可。
1. 写入BMP文件,转化为YUV文件,提取Y部分(256级的灰度图像)。
2. 对该灰度图像进行预测,计算预测误差(预测器的输入为上一个样点的重建值)。
3. 对预测误差进行8bit均匀量化。
4. 对量化后的预测误差进行反量化,求重建值。
5. 将预测误差图像写入文件,并将该文件输入Huffman编码器,得到输出码字的必要信息。将原始灰度图像输入Huffman编码器,得到码字必要信息。比较两种系统(DPCM+熵编码和仅进行熵编码)之间的编码效率。
代码分析
省略文件打开、文件关闭、以及与BMPtoYUV、HuffmanCoding相同部分。
void DO_DPCM(void * yBuf, void * quanBuf, void *rebuildBuf, unsigned int width, unsigned int height){ unsigned char *y_buffer = NULL; unsigned char *quan_buffer = NULL; unsigned char *rebuild_buffer = NULL; int immediate = 0; int i = 0; int j = 0; y_buffer = (unsigned char *)yBuf;//定义指针指向原始图像缓冲区 quan_buffer = (unsigned char *)quanBuf;//定义指针指向预测误差图像缓冲区 rebuild_buffer = (unsigned char *)rebuildBuf;//定义指针指向重建图像缓冲区 for (i = 0; i < width; i++) { for (j = 0; j < height; j++) { if (j == 0) { /*本程序令当前像素对左边一个像素进行预测, 每列第一个像素则对灰度128进行预测。 256级的灰度图像,预测值取值范围[-255,255], 则对其进行8bit量化可以将预测值除以2, 此时取值范围[-127,127],再加上128,使预测误差 能以灰度图像正常显示。 */ /*immediate先是为量化后的预测误差。 后用来存放反量化后的预测误差。*/ immediate = (*y_buffer - 128)/2+128; *quan_buffer = (unsigned char)immediate; immediate = (*quan_buffer - 128) * 2+128; *rebuild_buffer = (unsigned char)immediate; y_buffer++; quan_buffer++; rebuild_buffer++; } else { immediate = (*y_buffer - *(rebuild_buffer-1))/2+128; *quan_buffer = (unsigned char)immediate; immediate = (*quan_buffer - 128) * 2 + *(rebuild_buffer - 1); *rebuild_buffer =(unsigned char)immediate; y_buffer++; quan_buffer++; rebuild_buffer++; } } }}
实验结果
选择十种不同bmp文件,使用DPCM编码程序该文件的预测误差值,然后送进实验三设计的Huffman编码器进行熵编码。根据输出的码字及其必要信息的文件,对各种不同格式的文件进行压缩效率的分析。将存有码字信息的txt文件导入到excel中,进行统计分析。
1.以表格形式表示的实验结果
2.各样本文件的概率分布图(含部分灰度图像截图)
以下是两张自己找的图片: shuimu.bmp
miao.bmp
3.实验结果的分析
对于相邻像素相关性高的灰度图像,量化误差集中在 0 附近,DPCM+熵编码的系统性能最优。
- 数据压缩 DPCM编码
- 数据压缩实验四:DPCM编码
- 数据压缩实验4-DPCM编码
- 数据压缩实验四:DPCM编码
- 数据压缩原理与应用 DPCM编码
- 利用DPCM&Huffman编码实现数据压缩_C语言实现
- 【数据压缩】DPCM编解码
- 【数据压缩】实验四 DPCM
- DPCM编码
- DPCM编码
- 数据压缩实验四--dpcm压缩系统
- 实验四-dpcm编码
- 实验四 DPCM编码
- 【实验五】DPCM编码
- 实验四 DPCM编码
- 实验4 DPCM编码
- 实验四:DPCM编码
- 进入编码(RLC,DPCM)
- 第六天-2017-05-08
- jsp 乱码问题
- Oracle 11g ORA-12560错误
- 多食大蒜洋葱防感冒
- HDU 1698Just a Hook(线段树 + Lazy Tag(延迟更新))
- 数据压缩 DPCM编码
- 配置MyEclipse中Dynamic Web Module 3.0版本时报错
- MIT18.06课程笔记16:最小二乘法,线性回归
- 【基于SSH框架的个人博客系统06】头像文件上传与前后端分页机制
- CSS常用小技巧
- 指针与二维数组的关系
- maven环境配置
- IO与流的处理
- WEB前端开发笔记之ajax的跨域访问(搜索引擎篇)