DPCM编码

来源:互联网 发布:境外电视台直播软件 编辑:程序博客网 时间:2024/06/05 23:52

实验原理

预测编码的原理

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

DPCM

                                       编码器

                                               解码器

 在一个DPCM系统中需要设计两个部分

预测器 量化器 

理想情况下,应同时优化预测器和量化器,但 实际应用中,采用一种次优化方法 在这种方法中,量化电平数必须足够大 (M>=8)才能获得好的性能




实验流程及代码分析

1. 写入BMP文件,利用实验2的程序将其转化为YUV文件,并提取Y部分。

2. 对该灰度图像进行预测,计算预测误差(预测器的输入为上一个样点的重建值)。

3. 对预测误差进行8bit均匀量化。

4. 对量化后的预测误差进行反量化,求出重建值。

5. 将预测误差图像写入文件,并将该文件输入Huffman编码器,得到输出码字的必要信息。将原始灰度图像输入Huffman编码器,得到码字必要信息。比较两种系统(DPCM+熵编码和仅进行熵编码)之间的编码效率 

            for ( int i = 0; i < height; i++)              {                  float yp=128;//yp为预测值                  for (int j = 0; j < width; j++)                  {                      float m=(float)*(yBuf+i*width+j)-yp;//差值                      m/=2;//量化                      *(q+i*width+j)=(u_int8_t)(m+128);//量化误差                      //m*=2;//反量化                      *(yBuf+i*width+j)=(u_int8_t)(m+yp);//重建后的样本                      yp=(float)*(yBuf+i*width+j);//更新预测值                  }              }                              //将重建后的值写入文件                  fwrite(yBuf, 1, width*height, yuv1File);                    ++videoFramesWritten;                  //将量化误差写入文件                  fwrite(q,1,width*height,qFile);   


实验结果分析

实验结论

对于相邻像素相关性高的灰度图像,量化误差集中在 0 附近,DPCM+熵编码的系统性能最优