数据压缩 DPCM编码

来源:互联网 发布:淘宝潮男秋装 编辑:程序博客网 时间:2024/05/23 15:16

DPCMcoding


实验原理

在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器和量化器应进行联合优化。实际中,采用一种次优的设计方法:分别进行线性预测器和量化器的优化设计。
在本次实验中,我们采用固定预测器和均匀量化器。预测器采用左侧、上方预测均可。
量化器采用8比特均匀量化。

预测编码基本原理

  • 信源的相邻符号通常是相关的。
    相邻像素具有相关性。
  • 预测编码:
    利用信源相邻符合之间的相关性。
    ->根据某一模型利用以往的样本值对新样本进行 预测,然后将样本的实际值与其预测值相减得 到一个误差值,最后对这一误差值进行编码。
    ->如果模型足够好,且样本序列在时间上相关性 较强,则误差信号的幅度将远远小于原始信号 ,从而得到较大的数据压缩。
    DPCM原理图
    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.以表格形式表示的实验结果

FileName Birds Bird_q Camman Camman_q Clown Clown_q Fruit Fruit_q raw file size(KB) 384 384 64 64 64 64 64 64 compressed file size(KB) 346 147 52.3 30.8 61.1 38.3 60.4 32.9 Compression ratio 1.10982659 2.612244898 1.223709369 2.077922078 1.047463175 1.671018277 1.059602649 1.945288754 FileName Lena Lena_q Noise Noise_q Odie Odie_q Zone Zone_q raw file size(KB) 64 64 64 64 64 64 64 64 compressed file size(KB) 60.1 36.6 54.9 61.1 9.9 8.71 50.8 60.4 Compression ratio 1.064891847 1.74863388 1.16575592 1.047463175 6.464646465 7.347876005 1.25984252 1.059602649 FileName shuimu shuimu_q miao miao_q raw file size(KB) 337 337 384 384 compressed file size(KB) 282 67.9 321 153 Compression ratio 1.195035461 4.963181149 1.196261682 2.509803922

2.各样本文件的概率分布图(含部分灰度图像截图)
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

以下是两张自己找的图片:
shuimu.bmp
这里写图片描述
这里写图片描述
miao.bmp
这里写图片描述
这里写图片描述
3.实验结果的分析

对于相邻像素相关性高的灰度图像,量化误差集中在 0 附近,DPCM+熵编码的系统性能最优。

0 0