数据压缩实验四 DPCM 压缩系统的实现和分析

一、实验原理

1.DPCM编解码原理
  DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。
数据压缩实验四 DPCM 压缩系统的实现和分析_第1张图片
  在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器和量化器应进行联合优化。实际中,采用一种次优的设计法:分别进行线性预测器和量化器的优化设计。
2.DPCM编码系统的设计
  在本次实验中,采用固定预测器和均匀量化器。预测器采用左侧、上方预测均可。量化器采用8比特均匀量化。本实验的目标是验证DPCM编码的编码效率。首先读取一个256级的灰度图像,采用预设的预测方法计算预测误差,并对预测误差进行8比特均匀量化(基本要求) 。还可对预测误差进行1比特、2比特和4比特的量化设计。

二、代码分析

处理程序在实验二BMP2YUV基础上进行,其中yBuf数组中已存储着图像的灰度值,作为编码器的输入。

    qBuf = (unsigned char *)malloc(height*width);
    reBuf = (unsigned char *)malloc(height*width);
    int temp;
    for (int j = 0; jfor (int i = 0; iif (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;

            }
        }
    }

三.实验结果与分析

将八幅不同类型的样图进行DPCM变换,观测其重建图像,与差分数据的显示效果。对差分文件进行Huffman 编码,将其符号的分布统计得到下表结果。

原始图像 预测量化图像 重建图像
数据压缩实验四 DPCM 压缩系统的实现和分析_第2张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第3张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第4张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第5张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第6张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第7张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第8张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第9张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第10张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第11张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第12张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第13张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第14张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第15张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第16张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第17张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第18张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第19张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第20张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第21张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第22张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第23张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第24张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第25张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第26张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第27张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第28张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第29张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第30张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第31张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第32张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第33张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第34张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第35张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第36张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第37张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第38张图片
数据压缩实验四 DPCM 压缩系统的实现和分析_第39张图片 数据压缩实验四 DPCM 压缩系统的实现和分析_第40张图片

压缩性能能比较:

文件名称 源文件大小(KB) huffman变换(KB) 压缩比 DPCM+huffman变换(KB) 压缩比
birds.bmp 384 304 1.26 148 2.59
lena.bmp 64 53 1.20 37 1.73
clown.bmp 64 54 1.18 39 1.64
camman.bmp 64 50 1.28 32 2.00
noise.bmp 64 54 1.18 63 1.01
odie.bmp 64 10 6.40 9 7.11
zone.bmp 64 55 1.16 64 1.00
fruit.bmp 64 54 1.18 34 1.88

结果分析:比较两种系统(DPCM+熵编码和仅进行熵编码)之间的编码效率(压缩比和图像质量)
  1. 可以明显观察到重建的图像与原始图像十分接近,而预测误差图像在边缘部分的某些差异与采取的预测方案有关。
  2. 预测误差图像都为明显的灰色,电平集中分布在128附近,量化过程中将量化误差抬升128电平所以表明实际预测误差值集中分布在 0 左右,证明对于正常图像,相邻像素之间存在很强的关联性,利用相关性对像素量化后进行压缩压缩比会很理想。
  3. DPCM+熵编码的方案比单纯只使用熵编码的效果更好,能达到很高的压缩率
  4. t05噪声图像:预测误差概率分布零散没有规律,使用 DPCM+熵编码 或者 Huffman 编码的方案进行压缩后得到的效果均不如其他有内容图片。
  5. t07同心圆:虽然不是噪声图像,但是两个极端灰度值 0 和 255交替分布的,因此误差范围也很宽不易压缩。
  综上,利用DPCM进行预测编码时,空间冗余越大,压缩效率越高。

你可能感兴趣的:(数据压缩)