DPCM:差分脉冲编码,其关键是预测。
预测的基本原理:利用信源符号之间的相关性,用当前样值以前的若干个样值线性组合作为当前样值的预测值。当仅适用前一样值且预测系数为1时,则为DPCM。若样本序列在时间上有较强的相关性,并且预测阶数和量化比特数选择的足够好,则误差信号的幅度将远远小于原始信号,从而得到较好的压缩。
原理框图:
m(k)—输入抽样信号 m’ (k)—预测抽样信号
e(k) —输入信号与预测信号的差值,e(k)= m(k)-m’ (k)
eq(k)—量化后的预测信号差值
m~(k)—重建信号, m~(k)=eq(k)+m’ (k)
实验中的主要误差来源于量化。且编码器中嵌套了一个解码器。
代码实现:
变量定义:
unsigned char* pBuf = NULL;//存储重建图像值 unsigned char* eBuf_p = NULL;//存储量化后的差值 int eBuf ;//存储差值
开辟内存:
pBuf = (unsigned char*)malloc(frameWidth * frameHeight); eBuf_p =(unsigned char*)malloc(frameWidth * frameHeight);
一阶(8比特量化):
for( int j=0;j<frameHeight;j++)//j:行 {//对第一列的像素单独操作 eBuf=yBuf[j*frameWidth]-128; eBuf_p[j*frameWidth]=(eBuf+255)/2; yBuf[j*frameWidth]=128+(eBuf_p[j*frameWidth]-127)*2; pBuf[frameWidth*j]