【数据压缩】DPCM编码实验

一.DPCM编码原理

在一个DPCM系统中,需要设计预测器和量化器两部分。

在本次实验中,我们采取左向预测和8bit均匀量化。

左向预测:

即将当前像素的左边像素作为预测,两像素值相减即为当前像素的预测误差值。

对于第一列像素,默认取其预测值均为128.

8bit均匀量化:

图像本身是8bit(灰度值为0-255),所以如果相减值就会变为-255——+255

为了进行8bit量化,要将预测误差值(即像素相减的差)/2+128,使其范围为0-255。(量化插值b=a/2)。之后需要进行反量化值c,将量化插值b乘2(c=b*2)。之后再将反量化值c与左侧像素预测值相加得到本像素预测值。

二.实验过程内容分析

1.本次实验需要三个文件

一个输入文件,一个预测误差图像文件,一个重建图像文件

    char* orifilename = NULL;char* prefilename = NULL;char* recfilename = NULL;orifilename = argv[1];prefilename = argv[2];recfilename = argv[3];FILE* fp1 = fopen(orifilename, "rb");FILE* fp2 = fopen(prefilename, "wb");FILE* fp3 = fopen(recfilename, "wb");

2.分配三个主要缓冲区

(1)oribuffer是原灰度图像的缓冲区

(2)prebuffer是预测误差图像的缓冲区

(3)recbuffer是重建图像的缓冲区

    for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){if (j == 0){*(recbuffer + i * width + j) = 128;*(prebuffer + i * width + j) = *(oribuffer + i * width + j) - 128;}else{p1 = *(oribuffer + i * width + j) - *(oribuffer + i * width + j - 1);//误差if (p1 % 2 == 0)p2 = p1 / 2 + 128;//8bit量化elsep2 = (p1 - 1) / 2 + 128;//8bit量化*(prebuffer + i * width + j) = unsigned char(p2);p3 = unsigned char(p2 * 2);//反量化*(recbuffer + i * width + j) = *(oribuffer + i * width + j - 1) + p3;}}}

三.实验结果分析

原图像预测误差图像重建图像

输出码流:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部