DPCM差分预测编码

xiaoxiao2021-02-28  75

一、实验原理

1,DPCM原理:

利用图像相邻像素之间的联系,将样值与样值的差值(预测误差)量化编码。即,用上一个样值对当前样值进行预测,上一个样值作为预测值。然后以当前样值减去预测值得到误差,将误差进行量化编码,从而提高编码效率。

2,步骤:

1)计算差值->量化->进编码器;

2)原理框图如下图所示:

二、实验代码分析

我们在第二次实验BMP2YUV的实验基础上添加一个函数即可实现DCPM。

1,DCPM函数

#include <stdio.h> #include <stdlib.h> #include <malloc.h> void DPCM_m(short int fh, short int fw, unsigned char* yuvBuf, unsigned char* qBuf, unsigned char* reBuf) { int i,j; short int *q; q = (short int *)malloc((sizeof(short int))* fw * fh); for (i=0; i<fw; i++) { for(j=0; j<fh; j++) { if (i==0)//第一列-128 { q[j*fw+i] = (yuvBuf[j*fw+i] - 128)/2 + 128;//计算量化误差q并将其抬高128使之输出时全为正值,我们能看到变化量 reBuf[j*fw+i] = (q[j*fw+i] - 128)*2 +128;//计算重建值 } else//第二列减去左侧相邻像素点的重建值 { q[j*fw+i] = (yuvBuf[j*fw+i] - reBuf[(j-1)*fw+i])/2 + 128; reBuf[j*fw+i] = (q[j*fw+i] - 128)*2 + reBuf[(j-1)*fw+i]; } } } for(i=0; i<fw*fh; i++) { qBuf[i] = (unsigned char)q[i]; } free(q); }

三、实验结果分析

1、量化过程实验结果及遇到的问题:

实验结果如下图所示:下图是灰度像素重建值的输出。

下图是量化误差的输出图,可见误差的亮度因为抬高了128,所以整幅图是灰色。在变化明显的边缘部分,误差大,经过叠加之后的灰度值相应更大,反映在误差图中表现为白色边缘。在做差时,我们是将每个像素左侧相邻像素的重建值作为预测来相减的,所以在图中对纵向的边缘亮度更高,横向的边缘体现得不明显。

其他素材实验结果如下图所示,当图像从亮变暗时,更亮的部分有凸出感,暗的部分有凹陷感。

虽然在上面几个图中都正常恢复了重建值,但是,在实验当中,有一些图出现了如下问题:

在深色区出现白点,浅色区出现了黑点,初步判断是溢出影响了符号位造成灰度反向。这种问题在变化剧烈的边缘更加明显(如图Zone)。

对自己的图像做处理也有相似问题,由下图可见写有姓名的logo处重建值发生了较大的错误。

经过检查代码得知,在计算量化误差时,我先将得到的差值(范围从-255到+255)向上抬高了256,然后才做了除2下去整的工作。但是这种处理直接导致一个问题:若差值本来是0,向上抬高256之后变成了256,溢出了,符号位就会发生变化。因此导致黑背景中出现白点,白背景中出现黑点。

解决方法就是先做除2的处理,再提升128。也就是将波动范围降低到-127到+127之后再做提升操作。此时误差最大也只能是+255,有效避免黑白点的影响。修正后效果如图:

以上代码和结果均为8bit量化的情况下得到的结果,此外还做了4bit和2bit量化的情况,此时的原图和重建图就有了明显的差别:

8bit:重建图与原图无明显差别,量化误差图也可明显反映出图中的边缘。

4bit:重建图出现明显的为轮廓,失真明显。量化误差图也不如8bit时明显,即误差经过量化后变得数值很小,经过抬升后在128附近变化,且变化极小。

2bit:失真严重,已经看不出人脸,误差图变化更加不明显,几乎是全灰色。

Lena图的对比也十分明显:

8bit:

4bit:

2bit:

2、概率统计图:

将得到的量化误差图和原图分别通过huffman编码系统,得到概率统计图(以自己的素材shining4为例)

可以看出,针对于shining4原图,不同灰度值分布很分散,而对误差进行编码输出后,灰度值集中在128附近。为了视觉直观便于分析,我们将量化后的误差抬升了128,所以量化误差图的灰度值都集中在128左右。

  

  

3,压缩比计算和比较:

主要以自己的素材shining4和lena图为例,可以明显看出经过对误差进行量化编码得到的压缩比明显小于直接编码原文件,这充分增大了压缩效率。

转载请注明原文地址: https://www.6miu.com/read-82117.html

最新回复(0)