实验4 DPCM编码
来源:互联网 发布:淘宝上开网店步骤 编辑:程序博客网 时间:2024/05/16 12:12
一、DPCM实验原理
需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是
因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实
际内嵌了一个解码器,如编码器中虚线框中所示。
二、实验代码分析
在实验2中的BMP2YUV的工程中添加以下函数即可,以下为添加代码:
//预测器为左侧预测
for (int j = 0; j<height; j++) //逐行遍历
{
for (i = 0; i<width; i++)
{
if (i==0) //每列第一个元素保持原来的样值不变,只是变换相应的数据类型
{
//量化
k = (*(yBuff + j*width + i) - 128) / 2 + 128; //k先是为量化后的预测误差,后用来存放反量化后的预测误差。
*(qBuff + j*width + i) = (unsigned char)k;
//反量化
k = ((*(qBuff + j*width + i )-128) * 2) + 128;
*(reBuff + j*width + i) = (unsigned char)k;
}
else
{ //当前差值信号为当前样值与上个预测样值的差值 并进行了量化
k = (*(yBuff + j*width + i) - *(reBuff + j*width + i - 1)) / 2 + 128;
*(qBuff + j*width + i) = (unsigned char)k;
//当前重建信号为 反量化后的差值信号与上一个重建信号的和
k = ((*(qBuff + j*width + i )-128) * 2) + *(reBuff + j*width + i - 1);
*(reBuff + j*width + i) = (unsigned char)k;
}
}
}
fwrite(reBuff,1,width*height,reBuff);
fwrite(yuv.U,1,width*height/4,reBuff);
fwrite(yuv.V,1,width*height/4,reBuff);
fwrite(qBuff,1,width*height,qBuf);
fwrite(yuv.U,1,width*height/4,qBuf);
fwrite(yuv.V,1,width*height/4,qBuf);//将预测误差图像和重建图像写入文件
三、实验结果
以下每幅图像按照不同文件名,顺序分别为原始bmp图、转换后的yuv图、差值图、重建后的yuv图、原始图的符号概率密度图、预测误差图的符号概率密度图
1、Birds.bmp
2、Camman256B.bmp
3、Clown256B.bmp
阅读全文
0 0
- 实验4 DPCM编码
- 数据压缩实验4-DPCM编码
- 实验四-dpcm编码
- 实验四 DPCM编码
- 【实验五】DPCM编码
- 实验四 DPCM编码
- 实验四:DPCM编码
- 数据压缩实验四:DPCM编码
- 数据压缩实验四:DPCM编码
- 实验四——DPCM编码
- DPCM编码
- DPCM编码
- 【数据压缩】实验四 DPCM
- 数据压缩 DPCM编码
- 进入编码(RLC,DPCM)
- DPCM差分预测编码
- DPCM
- DPCM
- Android 中关于 【Cursor】 类的介绍
- 9.高级控件(三)之 RecyclerView
- linux下jdk&tomcat&mysql
- linux:linux常用命令
- 一些知识点学习
- 实验4 DPCM编码
- 兄弟郊游问题-南阳理工学院
- 随机数函数
- 51Nod-1564-区间的价值
- jmeter 使用cookie和jdbc获取注册 验证码
- EPOLL&POLL*SELECT对比区别
- iOS学习笔记-075.核心动画01——简介
- Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)
- angularjs环境搭建