HUNAN UNIVERSITY
多媒体技术基础
实验报告
学生姓名
孔睿琦
学生学号
201426020107
专业班级
数媒
1401
2016 年 11 月 20 日
实验 2:编码解码
一、问题描述
使用 matlab 实现对 lena 灰度图像和二值图像的 DPCM 编码和解码,以及游长编码的实
现。
二、问题分析
在进行编码之前,首先应该理解两种编码方式的原理、过程,梳理好之后再落实到代码上。
将图片的像素当做信号,一张图片可以转化为一个一维的信号流,从而利用两种编码方式
进行压缩。
三、算法分析
DPCM
差分脉冲编码调制简称差值编码,是对模拟信号幅度抽样的差值进行量化编码的调制方式
(抽样差值的含义请参见“增量调制”)。这种方式是用已经过去的抽样值来预测当前的抽样值,
对它们的差值进行编码。差值编码可以提高编码频率,这种技术已应用于模拟信号的数字
通信之中。
DPCM 与预测编码类似,只是它有一个量化步骤。量化步骤和 PCM 中的量化步骤类似,可
以是均匀量化,也可以是非均匀量化
对于有些信号(例如图像信号)由于信号的瞬时斜率比较大,很容易引起过载,因此,不能
用简单增量调制进行编码,除此之外,这类信号也没有像话音信号那种音节特性,因而也
不能采用像音节压扩那样的方法,只能采用瞬时压扩的方法。但瞬时压扩实现起来比较困
难,因此,对于这类瞬时斜率比较大的信号,通常采用一种综合了增量调制和脉冲编码调
制两者特点的调制方法进行编码,这种编码方式被简称为脉码增量调制,或称差值脉码调
制,用 DPCM 表示。
原理是减少或除去声音信号的多余成分以提高通信的有效性。
DPCM 的操作流程是,首先生成预测值,然后用原始信号值减去预测信号生成误差值,接
着量化误差值,得到量化后的误差值,并进行传输。重建时,利用量化后的误差值和预测
信号来重构信号,从而得到图像。
第 2 页
游长编码
又称为游程编码 Run-length coding。是一种统计编码,属于无损压缩,是栅格数据压缩的
重要编码方法。
它的原理是,用一个符号值或串长代替具有相同值的连续符号,使符号长度少于原始数据
的长度。只在各行或者各列数据的代码发生变化时,一次记录该代码及相同代码重复的个
数,从而实现数据的压缩。
游程编码的记录方式有两种:①逐行记录每个游程的重点列号;②逐行记录每个游程的长
度。
比如,对于数据
A A A B B
A C C C A
第一种方式,记录为
(A,3),(B,5),
(A,1),(C,4),(A,5)
第二种方式记录为
A3,B2,
A1,C3,A1
游程编码是连续精确的编码,在传输过程中,如果其中有一位符号发生错误,就会影响整
个编码序列。
游程编码有 4 位元表示法、8 位元表示法等方式,利用 n(4 or 8)个位元来存储整数,4 位可
表现的最大整数值为 15,8 位可表示的最大整数位 255。
为了充分利用其在表示二值数据时的优势,在处理灰度图像时,把 0~255 范围内的数值都
转化为 8 位二进制,存储在矩阵中,这样灰度图像和二值图像的数据都变成了 0 和 1 构成
的字符串流。但是这样耗费了大量的空间,运算较为复杂。
四、详细设计(从算法到程序)
DPCM
主函数:得到原图,分别转化为灰度图像和二值图像,调用编码函数 my_dpcmEncoder 和
解码函数 my_dpcmDecoder,编码函数返回的是量化后的误差值 en,解码函数返回的是重
构的信号值,把重构的信号流重新转化为图片的尺寸并输出,得到解码后的图像。
编码函数:
首先进行变量的初始化,重构信号 f_rec、预测信号 f_pre 和误差值 e、量化后的误差值 en
都是 1 行 Num 列的零矩阵,num=m*n。预测信号的前两个初始化为原始信号的第一个信号,
重构信号的第一个值也置为 f(1)。
接着进行主体的计算,结合书本公式:
第 3 页