DPCM压缩系统的实现和分析

一.实验项目名称

DPCM预测编码系统

二.实验原理

1. 预测编码

在数字图像中,如果不是随机的噪声,那么每个像素与其周围的像素都会存在着一定的关联,像素值很大程度上依赖于其邻域中其它像素的值。也就是预测误差(在这个实验中用当前像素值与前一个像素值的差来表示)应该非常接近,通常比单个的像素值要小。因此如果只存储预测误差,由预测误差也可以重构出原图像,而且这样可以降低图像中的冗余信息,实现图像的压缩。
如果用前面几个样值的线性组合来预测当前的样值,称为线性预测,只用前一个样值进行预测,就称为 DPCM 。

2. DPCM 编解码框图

线性预测编解码框图
从框图中可以看出,由于需要更新预测值,编码器中已经内嵌了一个解码器。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器和量化器应进行联合优化。实际中,采用一种次优的设计方法:分别进行线性预测器和量化器的优化设计。本次实验采用固定预测器和均匀量化器。

三.实验步骤

将以下DPCM部分代码添加至BMP2YUV:

int DPCM(int w,int h,void *ybuf, void *qbuf, void *pbuf,int Qbits)
{
	//定义变量
	unsigned char *y,*q, *p;
	int i,size,width,height;
	int k=0;
	y = (unsigned char*)ybuf;
	q = (unsigned char*)qbuf;
	p = (unsigned char*)pbuf;
	width = w;
height = h;
size = width * height;
	//预测量化编码,8bit量化
	int ek; //原始的预测误差值,范围从 -255 到 +255
	int scale = 512 / (1 << Qbits); //误差值的压缩比率
	for (i = 0; i < height; i++) //行循环
	{
		//对每行第一个像素的处理
		ek = y[width*i] - 128; //假设第一个像素的预测值为128
		q[width*i] = (ek + 255) / scale; //量化后的预测误差
		p[width*i] = g((q[width*i] - 255 / scale)*scale + 128); //根据预测误差再重建当前电平值
		for (int j = 1; j < width; j++) //列循环
		{
			//后面的像素与第一个像素处理方法一样
			ek = y[j + width * i] - p[j - 1 + width * i];
			q[j + width * i] = (ek + 255) / scale;
			p[j + width * i] = g((q[j + width * i] - 255 / scale)*scale + p[j - 1 + width * i]);
		}
	}
	
//计算PSNR
int Maxi,Max = pow((int)2,8)-1;//图像颜色最大数值
	float PSNR,MSE,sum=0;
	for (i = 0; i < size; i++) {//计算MSE(均方误差),各数据误差平方的平均数
		sum = sum + pow((float)(y[i]-p[i]), (int)2);}//原始图像减去重建图像
	MSE = sum / size ;
	Maxi = pow(Max, 2);
	PSNR = 10*log10(Maxi/MSE);
	printf("PSNR=%f\n", PSNR);
	return 0;
}
unsigned char g(int x) {//防止超过 0 到 255 的动态范围
	if (x < 0) return 0;
	if (x > 255) return 255;
	return x;
}

四.实验结果

1. 8比特均匀量化(以以下四幅图为例)

原始图像重建图像预测误差图像频率分布图
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
--在这里插入图片描述----
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

2. 不同压缩方式的编码效率(压缩比)

文件名原始图像大小(KB)直接压缩后大小(KB)压缩比预测图像大小(KB)预测压缩后大小(KB)压缩比
Zone66640.96996720.75
Odie66130.19796170.177
Birds115310990.95311523970.345
Clown66640.96996480.50

3. 不同量化级数的量化结果

不同bit的量化结果,低于8bit的预测误差频率分布图中,出现的大概占据1/3概率的符号是128灰度级,这是因为在生成重建图像时,为了使生成的图像是灰度图像,将U、V分量全都置为128,最终导致有1/3的频率分布是128灰度级。而对于其他符号频率来说,则是严格按照量化后的频率分布排列,因为量化比特数越少,误差 0 对应的灰度值就越小,所以低bit的量化误差图像越来越暗,此实验低于6bit的量化误差,肉眼几乎看不见了。4bit和5bit量化后的重建图像可以明显得看出图像的失真,出现了严重的块效应。

6bit 预测误差频率分布:

在这里插入图片描述

4bit 预测误差图像:

在这里插入图片描述
4. 不同量化级数的压缩质量

量化级数PSNR
851.052074
742.834713
635.703712
529.347391
422.981213

随着量化比特数的逐渐降低,可以看出PSNR(峰值信噪比)也在随之降低,意味着图像的失真程度越高。由于量化比特数降低,量化区间也就随之变大,量化误差也就越大,所以图像的失真也就越明显。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值