实验4 DPCM编码

实验要求:

掌握DPCM编解码系统的基本原理,并用编程语言实现。在DPCM编码器实现的过程中可同时输出预测误差图像和重建图像。将预测误差图像写入文件并将该文件输入Huffman编码器,得到输出码流、给出概率分布图并计算压缩比。将原始图像文件输入Huffman编码器,得到输出码流、给出概率分布图并计算压缩比。最后比较两种系统(1.DPCM+熵编码和2.仅进行熵编码)之间的编码效率(压缩比和图像质量)。压缩质量以PSNR进行计算。

实验原理:

在这里插入图片描述

实验过程:

#include<stdio.h>
#include<stdlib.h>
int main(int argc, char** argv)
{
int height,width;
char *filename_yuv,*filename_error,*filename_decoding;
filename_yuv=argv[1];
height=atoi(argv[2]);
width=atoi(argv[3]);
filename_error=argv[4];
filename_decoding=argv[5];
unsigned char YUV_buffer=NULL,Y_buffer;
unsigned char YUV_buffer_del;
YUV_buffer=new unsigned char[height
width
3/2];
YUV_buffer_del=YUV_buffer;
if((width%21)||(height%21))
{
printf(“please input the right height and width/n”);
}
FILE fp_yuv=NULL,fp_error=NULL,fp_decoding=NULL;
fp_yuv=fopen(filename_yuv,“rb”);
fp_error=fopen(filename_error,“wb”);
fp_decoding=fopen(filename_decoding,“wb”);
if((fp_yuvNULL)||(fp_errorNULL)||(fp_decoding==NULL))
{
printf(“can not open the file/n”);
exit(1);
}
fread(YUV_buffer,sizeof(unsigned char),height
width
3/2,fp_yuv);
Y_buffer=YUV_buffer;
unsigned char error_buffer,decoding_buffer;
error_buffer=new unsigned char[height
width
3/2];
decoding_buffer=new unsigned char[height
width
3/2];
unsigned char *Y_buffer_operate,*error_buffer_operate,*decoding_buffer_operate;
unsigned char *Y_buffer_del,*error_buffer_del,*decoding_buffer_del;
Y_buffer_del=Y_buffer;
error_buffer_del=error_buffer;
decoding_buffer_del=decoding_buffer;
Y_buffer_operate=Y_buffer;
error_buffer_operate=error_buffer;
decoding_buffer_operate=decoding_buffer;
for(int i=0;i<height;i++)
{
for(int j=0;j<width;j++)
{
if(j==0)
{
*error_buffer_operate=*Y_buffer;
*decoding_buffer_operate=Y_buffer_operate;
Y_buffer_operate++;
error_buffer_operate++;
decoding_buffer_operate++;
}
else
{
unsigned char temp_last_xn;
temp_last_xn=decoding_buffer[i
width+j-1];
int temp_pn;
temp_pn=int(Y_buffer_operate-temp_last_xn);
error_buffer_operate=unsigned char(temp_pn/2+128);
decoding_buffer_operate=(error_buffer_operate-128)2+temp_last_xn;
Y_buffer_operate++;
error_buffer_operate++;
decoding_buffer_operate++;
}
}
}
for(int i=0;i<height
width/2;i++)
{
error_buffer_operate++;
decoding_buffer_operate++;
}
fwrite(decoding_buffer,sizeof(unsigned char),height
width
3/2,fp_decoding);
fwrite(error_buffer,sizeof(unsigned char),height
width
3/2,fp_error);
fclose(fp_yuv);
fclose(fp_error);
fclose(fp_decoding);
delete[] Y_buffer_del;
delete[] error_buffer_del;
delete[] decoding_buffer_del;
return 0;
}

实验结果:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验结论:

8比特量化能得到较好的效果,由DPCM 的原理可知量化电平数足够大才能获得优秀的性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值