DPCM

DPCM压缩系统的实现与分析

1.DPCM 编解码原理

预测编码是根据某一模型利用以往的样本值对于新样本值进行预测,然后将样本的实际值与其预测值相减得到一个误差值,对于这一误差值进行编码。如果模型足够好且样本序列在时间上相关性较强,那么误差信号的幅度将远远小于原始信号,从而得到较大的数据压缩结果。
预测编码方法分线性预测和非线性预测编码方法。线性预测编码方法,也称差值脉冲编码调制法,简称DPCM。
encoder图中输入信号Xn是某一像素点的实际灰度值,Pn是对该像素点的预测值,在本实验中就是与它相邻的前一个像素点的重建值。dn 是预测误差。^(dn)是量化预测误差,^(Xn)=量化预测误差^(dn)+预测灰度值Pn,得到当前像素点的重建值,作为下一个像素点的预测值。
预测器的输入是已经解码以后的样本,因为在解码端只能得到存在误差的样本。
由图可见,encoder中包含了一个decoder。

DPCM_第1张图片

2.代码分析

//<-------------------dpcm函数8比特量化------------------------->
bool dpcm(int Width,int Height, unsigned char* yBuf,unsigned char* devBuf,unsigned char* rebuild_Buf)//DPCM
 {
        int err;//原始误差
	   int i,j;
	   unsigned char temp;
	   for(i=0;i

 规定每一行第一个像素的预测值均为128,而剩下的像素点均把与它相邻的前一个像素点的重建值作为自己的预测值。
假设存在一个像素点的灰度值为0,预测值为0,则量化误差值等于127,最后得到的重建值为0。
......
假设存在一个像素点的灰度值为128,预测值为0,则量化误差值等于191,最后得到的重建值为128。
......
假设存在一个像素点的灰度值为255,预测值为0,则量化误差值等于254,最后得到的重建值为254。
........
重建值与像素点的原始灰度值基本不差。

8比特量化即256个量化级,原始的量化误差范围是(-255,255),256<511<1024,相当于9比特量化到8比特,除2取整即相当于8比特量化,量化电平取左端点。
除了8比特还可以进行1,2,4比特的量化,以4比特为例,9比特到4比特量化,量化误差整除2 的9-4次方,即整除32。提升电平也要根据区间变化跟着改变。但是发现重建图像出现一些明显的失真。并且经过2bit量化之后,图像已经无法实现重建。以下是该算法4bit量化的重建图。
DPCM_第2张图片
改进代码4bit量化

bool dpcm(int Width,int Height, unsigned char* yBuf,unsigned char* devBuf,unsigned char* rebuild_Buf)//DPCM
{
int err;//原始误差
int i,j;
unsigned char temp;
for(i=0;i255)
			 temp=255;
		 if(temp<0)
			 temp=0;
		  rebuild_Buf[i*Width]=temp;
		  for(j=1;j255)
			 temp=255;
		     if(temp<0)
			 temp=0;
		 rebuild_Buf[i*Width+j]=temp;
}
}
return true;
}


3.实验结果分析


                  原始图像                                              量化误差图像                                重建图像                                                     文件名
  DPCM_第3张图片 DPCM_第4张图片                                  Birds
DPCM_第5张图片 DPCM_第6张图片 DPCM_第7张图片                                     Camman256B
DPCM_第8张图片 DPCM_第9张图片 DPCM_第10张图片                                     Clown256B
DPCM_第11张图片 DPCM_第12张图片 DPCM_第13张图片                                      Fruit256B
DPCM_第14张图片 DPCM_第15张图片 DPCM_第16张图片                                       haer
DPCM_第17张图片 DPCM_第18张图片 DPCM_第19张图片                                       Lena256B
DPCM_第20张图片 DPCM_第21张图片 DPCM_第22张图片              lufei
DPCM_第23张图片 DPCM_第24张图片 DPCM_第25张图片             Noise256B    
DPCM_第26张图片 DPCM_第27张图片 DPCM_第28张图片              Odie256B
DPCM_第29张图片 DPCM_第30张图片 DPCM_第31张图片              Zone256B
由以上图像对比,经过8比特量化之后重建的图像与原图像在图像质量上的差别不大。

概率分布图的顺序与图像顺序相同。将预测误差图像和原始文件图像经过Huffman编码器。
        
                       原始图像概率分布图                                                                       量化误差图像概率分布图    

DPCM_第32张图片 DPCM_第33张图片
DPCM_第34张图片 DPCM_第35张图片
DPCM_第36张图片 DPCM_第37张图片
DPCM_第38张图片 DPCM_第39张图片
DPCM_第40张图片 DPCM_第41张图片
DPCM_第42张图片 DPCM_第43张图片
DPCM_第44张图片 DPCM_第45张图片
DPCM_第46张图片 DPCM_第47张图片
DPCM_第48张图片 DPCM_第49张图片
DPCM_第50张图片 DPCM_第51张图片
压缩比
DPCM_第52张图片

一般图像经过量化之后的熵编码效率明显提高,概率分布也更加集中,但是Noise256B和Zone256B的编码效率反而降低了。预测编码利用的是相邻像素点之间的相关性。如果相邻像素点之间的相关性大,预测就会更加准确,误差就会越小,从而在同等精度的要求下,就可以用较少的比特进行编码;但是如果水平方向上,相邻像素点的相关性非常小,预测误差就会大大增加,需要用更多的比特来进行编码。Noise256B和Zone256B这两张图像与其余图像的区别在于水平方向上像素点的灰度变化太大,从而造成压缩比降低。























你可能感兴趣的:(程序,Huffman,压缩,dpcm)