DPCM编码

实验原理

预测编码的原理

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

DPCM

DPCM编码_第1张图片

                                       编码器

DPCM编码_第2张图片

                                               解码器

 在一个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);   


实验结果分析

DPCM编码_第3张图片DPCM编码_第4张图片DPCM编码_第5张图片DPCM编码_第6张图片DPCM编码_第7张图片DPCM编码_第8张图片DPCM编码_第9张图片DPCM编码_第10张图片DPCM编码_第11张图片DPCM编码_第12张图片DPCM编码_第13张图片DPCM编码_第14张图片DPCM编码_第15张图片DPCM编码_第16张图片DPCM编码_第17张图片DPCM编码_第18张图片

实验结论

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



你可能感兴趣的:(原创)