【数据压缩】DPCM 压缩系统的实现和分析

数据压缩试验四:使用 DPCM 编码进行图像压缩 使用 DPCM 编码进行图像压缩 基本原理 DPCM,即差分脉冲编码调制(Differential Pulse Code Modulation),通过对图像进行预测编码并缩减图片预测误差的动态范围来实现图像的压缩。本次试验中只对亮度信号 Y 通道进行编码压缩,将图片的第一列像素值作为原始参考值进行预测,通过与左侧的像素值取差计算预测误差,然后进行量化编码。以下为 DPCM 编码端与解码端的原理图 ... 阅读详情

一.实验原理

1.预测编码的基本原理

  由于信源的相邻符号通常是相关的,利用信源相邻之间的相关性。根据某一模型利用以往的样本值对新样本进行预测,然后将样本的实际值与其预测值相减得到一个误差值,最后对这个误差值进行编码。
  如果这个模型足够好,且样本序列在时间上相关性较强,则误差信号的幅度将远远小于原始信号,从而得到较大的数据压缩。

2.DPCM

  DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。在DPCM中,需要注意的是预测器输入的是预测器的输入是已经编码的样本。因为在解码端,同样无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。
  在一个DPCM系统中,有两个因素需要设计:预测器与量化器。理想情况下,预测器和量化器应该联合设计。但在实际中,采用一种次优的设计方法:分别进行线性预测器和量化器的优化设计。下图则为DPCM编码端与解码端的图示:
dpcm图示
  在本次实验中,采用的是固定预测器和均匀量化器。预测器采用的是左侧量化,对于图像中处于最左侧的一列像素,前面没有像素可以预测,则用预测灰度值的平均值128进行量化。

二.代码分析

    int limit(int x)
    {
        if(x>255) return 255;
        if(x<0) return 0;
        return x;
    }

    ......
    qn = (int *)malloc(Info_header.biWidth*Info_header.biHeight*sizeof(int));
    q = (unsigned char *)malloc(Info_header.biWidth*Info_header.biHeight);
    rebuild = (unsigned char *)malloc(Info_header.biWidth*Info_header.biHeight);
    int scale = 512 / (1 << Qbits);

    for (int i = 0; i < Info_header.biHeight; i++)
    {
            qn[i*Info_header.biWidth ] = y_buf[i*Info_header.biWidth ] - 128;           
            qn[i*Info_header.biWidth ] = qn[i*Info_header.biWidth ] +1/ scale;
            rebuild[i*Info_header.biWidth + j] = limit(qn[i*Info_header.biWidth + j] * scale + 128);        
            q[i*Info_header.biWidth + j] = qn[i*Info_header.biWidth + j] +127;
        for (int j = 1; j < Info_header.biWidth; j++)//从第二列开始进入for循环
        {           
            qn[i*Info_header.biWidth + j] = y_buf[i*Info_header.biWidth + j] - rebuild[i*Info_header.biWidth + j - 1];
            qn[i*Info_header.biWidth + j] = qn[i*Info_header.biWidth + j]+1 / scale;        
            rebuild[i*Info_header.biWidth + j] = limit(qn[i*Info_header.biWidth + j] * scale + rebuild[i*Info_header.biWidth + j - 1]);
            q[i*Info_header.biWidth + j] = qn[i*Info_header.biWidth + j] +127;
        }

    }

  处理程序在实验二BMP2YUV基础上进行即可,其中y_buf数组中已存储着图像的灰度值,作为编码器的输入。scale为量化因子,以4bit量化为例子,因为1<<=16,scale = 512/16=32。qn值除以32后,取值范围中共16位可选电平,符合16bit的量化要求。

  由于像素灰度值的取值范围为0~255,任意两个像素的灰度值之差为-255~255,所以定义量化误差qn的数据类型为int类型;另外定义了一个字节大小的量化误差数组“q”,用于接受变换后的qn数据。假设进行8bit量化,而qn的可能位长为9bit,在量化时,若直接将其除于2,由于除法直接向下取整,范围变为-127~127,量化间隔仅有255个<2^8,所以量化语句写成:

qn[i*Info_header.biWidth + j] = qn[i*Info_header.biWidth + j]+1 / scale;    

在qn原值加一再除以量化因子,则量化后范围变为-127~128,qn+127=q。q的取值范围则为0~255,符合8bit 256个量化级的要求。
在编码端重建图像时,应注意重建值有可能超过0~255的灰度区间,利用limit(int x)进行限制其取值。

三.实验结果

将八幅不同类型的样图进行DPCM变换,观测其重建图像,与差分数据的显示效果。对差分文件进行Huffman 编码,将其符号的分布统计得到下表结果。观测统计结果,得到结论:进行DPCM变换后,由于传输的是原值与预测值的一个差值,这个数值往往比较小,由于程序中将数值上抬127。与图标中128左右的概率分布较多相符。

原始图像重建图像差分图像符号分布
bird这里写图片描述这里写图片描述这里写图片描述
camman这里写图片描述这里写图片描述这里写图片描述
clown这里写图片描述这里写图片描述这里写图片描述
fruit这里写图片描述这里写图片描述这里写图片描述
noise这里写图片描述这里写图片描述这里写图片描述
modie这里写图片描述这里写图片描述这里写图片描述
zone这里写图片描述这里写图片描述这里写图片描述

8bit量化6bit量化4bit量化
这里写图片描述这里写图片描述这里写图片描述

压缩性能比较:

文件名称源文件大小普通huffman变换后大小压缩比DPCM+huffman后大小压缩比
birds.bmp384kb304kb1.26148kb2.59
camman.bmp64kb50kb1.2832kb2.00
clown.bmp64kb54kb1.1839kb1.64
fruit.bmp64kb54kb1.1834kb1.88
lena.bmp64kb53kb1.2037kb1.73
noise.bmp64kb54kb1.1863kb1.01
odie.bmp64kb10kb6.49kb7.11
zone.bmp64kb55kb1.1664kb1

(源文件格式为:从bmp中提取灰度值转换的yuv)
由实验结果:空间冗余较大的图像,如odie.bmp,经过dpcm+熵编码会得到较大的压缩效率;而对应的空间冗余较少的图像,极端的如噪声分布图像 noise.bmp,经过dcpm+熵编码,依旧得不到很高的压缩比。这也符合霍夫曼编码规律,概率分布越集中,则压缩效率越高。综上,利用DPCM进行预测编码时,空间冗余越大,压缩效率越高。

实验四——DPCM编码 一.实验原理     DPCM是差分预测编码调制的缩写,是比较典型的系统。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始值来做预测,是因为在解码端无法得到原始样本,只能用存在误差的解码之后的数据,因此DPCM编码器中实际内嵌了一个解码器。     在一个 DPCM系统中,有两个因素需要设计:预测器 和量化。理想情况下系统中,预测器和量化采取联合优化的方式。而在实 阅读详情

相关推荐

数据压缩【实验四】DPCM压缩系统的实现和分析

目录DPCM编码原理算法实现输出结果压缩质量分析压缩PSNR峰值信噪比原理算法 DPCM编码 原理 DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。 在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器和量化器应进行联合优化。实际中,采用一种次优的设计方法:

weixin_48930495的博客 1270

数据压缩实验4——DPCM编码

1 实验目的

JCL的博客 692

【数据压缩】实验:DPCM压缩系统的实现与分析

预测编码指根据某一模型利用旧的样本值对新样本值进行预测,然后将样本的实际值与其预测值相减得到误差值,对于这一误差值进行编码。如果模型足够好且样本序列在时间上相关性较强,那么误差信号的幅度将远远小于原始信号,从而得到较大的数据压缩结果。预测编码方法分线性预测和非线性预测编码方法。线性预测编码方法也称差值脉冲编码调制法,简称DPCM。DPCM编解码过程如下图:编码器(Encoder)中Q是量化器,P是预测器。输入信号Xn是某一像素点的实际灰度值,Pn是对该像素点的预测值,dn 是预测误差,^(dn)是量化预测误

weixin_48946798的博客 586

【作业】DPCM+量化图片实验

量化器 量化 用一个很小的集合表示一个大集合(可能是无限大)的值。 如A/D转换 量化是有失真压缩的一个有效工具 量化器的描述 量化误差:e(x)=x−x^e(x)=x-\hat xe(x)=x−x^ 量化的均方误差 所有输入值的平均量化误差 需要知道输入的概率分布 量化区间的数目:MMM 决策边界:bi,i=0,1,...,Mb_i, i=0,1,...,Mbi​,i=0,1,...,M 重构水平:yi,i=0,1,...,My_i, i=0,1,...,Myi​,i=0,1,..

weixin_41177606的博客 574

数据压缩实验:DPCM 压缩系统的实现和分析

文章目录一、实验内容二、实验原理三、实验步骤四、代码部分五、实验结果分析 一、实验内容 DPCM编码,简称差值编码,是对模拟信号幅度抽样的差值进行量化编码的调制方式(抽样差值的含义请参见“增量调制”)。这种方式是用已经过去的抽样值来预测当前的抽样值,对它们的差值进行编码。 在本次实验中,我们采用固定预测器和均匀量化器。预测器采用左侧、上方预测均可。量化器采用8比特均匀量化。 在DPCM编码器实现的过程中可同时输出预测误差图像和重建图像。将预测误差图像写入文件并将该文件输入Huffman编码器,得到输出码流、

weixin_44218153的博客 571

数据压缩实验四:DPCM 压缩系统的实现和分析

一:实验原理 1.DCPM编码原理 DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。DCPM编码是对模拟信号幅度抽样的差值进行量化编码的调制方式,这种方式是用已经过去的抽样值来预测当前的抽样值,对它们的差值进行编码。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码

yee_0217的博客 1159

DPCM 压缩系统的实现和分析

DPCM压缩系统的实现和分析

Haolin_Liu的博客 685

dpcm算法研究 语音压缩编码算法:差分脉冲编码调制算法的实现

差分脉冲编码调制算法研究 : 用Matlab实现DPCM算法 ,文件包括源码、运行结果分析、实验问报告文档。该文件演示了DPCM压缩文件和对文件进行解压缩的过程以及一些参数的分析,含有详细注释。

数据压缩实验四 DPCM 压缩系统的实现和分析

DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。掌握DPCM编解码系统的基本原理。初步掌握实验用C语言编程实现DPCM编码器并分析 其压缩效率。

Alfred512的博客 1298

DPCM的基本原理,DPCM就是通过预测和差分编码方式来减少冗余,实现数据压缩的目的

DPCM的基本原理 任何信号,不论语音或图像,采用直接采样-量化-编码的方式进行编码,都会发现码组之间具有很强的相关性。由于相关性的存在,传输数据中存在大量不需要传输的信息,称为冗余。 DPCM就是通过预测和差分编码方式来减少冗余,实现数据压缩的目的。

DPCM 压缩系统的实现和分析 数据压缩实验4

DPCM 压缩系统的实现和分析,掌握DPCM编解码系统的基本原理。初步掌握实验用C语言编程实现DPCM编码器并分析其压缩效率。

数据压缩 实验四 DPCM压缩系统的实现和分析

实验原理DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器虚线框中所示。DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。

MayNine的博客 575

折叠式共源共栅放大器设计/备忘

w折叠式共源共栅基本结构如图

Czy1377004611的博客 3万+

【数据压缩】DPCM压缩系统的实现和分析

一、DPCM编解码原理 DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。 在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想情况下,预测器和量化器应进行联合优化。实际中,采用一种次优的设计方法:分别进行线性预测器和量化器的优化设计。 二、DPCM编码系统的设计 在本次

spadeK2020的博客 412

SpringBoot文件上传实战:MultipartFile重复读取的3种方法(附避坑指南)

本文详细介绍了SpringBoot中处理MultipartFile重复读取的3种实用方法,包括字节数组缓存法、临时文件法和流重置法,并提供了避坑指南和性能优化技巧。特别适合需要多次读取上传文件内容的开发者,帮助解决InputStream流只能读取一次的问题。

weixin_28710999的博客 398

STM32HAL库 基于外部Flash+FatFs模拟U盘方式进行固件拷贝升级(详解)

STM32HAL库 基于外部Flash+FatFs模拟U盘方式进行固件拷贝升级

qq_36075612的博客 1万+

[数据压缩作业6]DPCM压缩系统的实现和分析

DPCM 压缩系统

m0_59620643的博客 451

从零到一:基于Matlab的二阶系统时域性能指标计算与可视化实战

本文提供了一份基于Matlab的二阶系统时域性能指标计算与可视化实战指南。通过详细的代码示例,手把手教你如何利用Matlab计算超调量、调节时间等关键指标,并绘制阶跃响应曲线进行可视化分析,帮助控制工程学习者和从业者快速掌握系统性能评估方法。

weixin_29096377的博客 269

[数据压缩]DPCM压缩系统的实现和分析

实验目的 掌握DPCM编解码系统的基本原理。初步掌握实验用C/C++/Python等语言编程实现DPCM编码器,并分析其压缩效率。 实验原理 DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。在DPCM系统中,需要注意的是预测器的输入是已经解码以后的样本。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器,如编码器中虚线框中所示。 在一个DPCM系统中,有两个因素需要设计:预测器和量化器。理想...

lii_by的博客 663

Signoff Criteria --- ocv/aocv/pocv之AOCV介绍

Advanced on chip variation,相比较于OCV来说,对于悲观度的去除很有效。相比较与ocv对于整个design中的lauch/capture path设置统一的derate值,aocv通过将cell derate值与cell的逻辑深度以及实际的位置结合起来进行derate值的设定。那么这种derate如何能够设置到具体的cell呢,其实是我们在跑STA时候会读入相关的aocv lib file,里面有专门对相关的cell进行的aocv derate值的描述。> table: \

sinat_27691203的博客 7854

扣子(Coze)搭建智能体完整实战指南 —— 从零基础入门到写小说及其他需求扩展开发

随着大语言模型进入应用爆发期,我们正在经历从“寻找提示词”向“构建智能体”的范式转移。扣子(Coze)作为字节跳动推出的一站式AI智能体开发与运营平台,极大地降低了AI应用开发的门槛,让非技术人员也能快速搭建具备感知、决策、行动能力的智能体。 本文将手把手带你从零开始,在扣子平台上搭建一个功能完备的**小说创作智能体**,并基于此展示如何将同一套架构扩展到其他需求场景。无论你是写作爱好者、内容创作者,还是希望用AI赋能日常工作的职场人士,这套完整的技术方案都将帮助你快速上手。

huanghm88的专栏 638

【数据压缩-实验4】DPCM压缩系统的实现和分析

DPCM压缩系统的实现与分析

weixin_58208902的博客 903

大唐杯5G考前冲刺篇(回顾全文重点必看)

大唐杯习题复习指南

nimo观察者 1万+

数据压缩(九)——DPCM压缩系统的实现与分析

实验内容:将预测误差图像写入文件并将该文件输入Huffman编码器,得到输出码流、给出概率分布图并计算压缩比。最后比较两种系统(1.DPCM+熵编码和2.仅进行熵编码)之间的编码效率(压缩比和图像质量)。压缩质量以PSNR进行计算。 文章目录(一)DPCM编解码原理DPCM编解码的关键代码(二)PSNR原理PSNR的关键代码Huffman编码原理对Huffman编码 (一)DPCM编解码原理...

CRR的博客 873

ER图从入门到精通:数据库建模全攻略

本文为数据库建模领域的 ER 图全面指南,系统解析从基础概念到实战应用的核心要点。首先介绍 ER 图的定义、三大组成元素(实体、属性、关系)及三种基础关系类型(一对一、一对多、多对多);其次详解绘制流程,涵盖工具选择(如 Visio、PowerDesigner)、需求分析方法及实体 - 属性 - 关系的分步建模技巧;进一步探讨弱实体、复合属性等高级概念,结合范式理论讲解模型优化策略;针对实体属性混淆、关系类型误判等常见问题提供解决方案;最后通过电商系统、图书馆管理系统等实际案例展示 ER 图设计全流程。

邓邓子的博客 4213

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 【数据压缩】Huffman编解码器
下一篇: 【数据压缩】JPEG原理分析及JPEG解码器的调试
caidejun
博客等级 码龄10年 10粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值