【数据压缩】实验:DPCM压缩系统的实现与分析

本文探讨了DPCM(差值脉冲编码调制)编码原理及其在图像压缩中的应用。通过编程实现DPCM编解码器,进行8bit、4bit、2bit、1bit量化,并结合Huffman编码,分析不同量化级别下的压缩比和图像质量(PSNR)。实验结果显示,量化比特数越大,图像重建质量越高,编码效率也更优。
摘要由CSDN通过智能技术生成

DPCM编解码原理

预测编码指根据某一模型利用旧的样本值对新样本值进行预测,然后将样本的实际值与其预测值相减得到误差值,对于这一误差值进行编码。如果模型足够好且样本序列在时间上相关性较强,那么误差信号的幅度将远远小于原始信号,从而得到较大的数据压缩结果。

预测编码方法分线性预测和非线性预测编码方法。线性预测编码方法也称差值脉冲编码调制法,简称DPCM

DPCM编解码过程如下图:

编码器(Encoder)中Q是量化器,P是预测器。输入信号Xn是某一像素点的实际灰度值,Pn是对该像素点的预测值,dn 是预测误差,^(dn)是量化预测误差,^(Xn)=量化预测误差^(dn)+预测灰度值Pn,得到当前像素点的重建值,作为下一个像素点的预测值。

需要注意,预测器的输入是已经解码以后的样本,因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,DPCM编码器中内嵌了一个解码器。

编程实现DPCM

实验过程

  1. 读取一个256级的灰度图像YUV,提取Y的数据
  2. 对该灰度图像进行预测,计算预测误差
  3. 对预测误差进行8bit、4bit、2bit、1bit均匀量化
  4. 对量化后的预测误差进行反量化,求重建值
  5. 将预测误差图像写入文件并输入Huffman编码器,得到输出码流、给出概率分布图并计算压缩比。
  6. 将原始图像文件输入Huffman编码器,得到输出码流、给出概率分布图并计算压缩比。
  7. 比较两种系统(1.DPCM+熵编码和2.仅进行熵编码)之间的编码效率(压缩比和图像质量)。压缩质量以PSNR进行计算。

核心代码

DPCM编解码器 DPCM.cpp

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>  
#include <malloc.h>
#include <math.h>

#define u_int8_t	unsigned __int8  //1个字节
#define u_int		unsigned __int32  //4个字节
#define u_int32_t	unsigned __int32
#define FALSE		false
#define TRUE		true

/**********定义bcpm变量及缓存***************/
FILE* qFile = NULL;        //输出的预测误差图
FILE* dFile = NULL;        //输出的重建图
char* qFileName = NULL;    //预测误差图文件名
char* dFileName = NULL;    //重建图文件名
float qn;                  //差值
u_int8
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值