《数据压缩与信源编码》实验指导书.docx

上传人:b****8 文档编号:10196729 上传时间:2023-02-09 格式:DOCX 页数:21 大小:158.18KB
下载 相关 举报
《数据压缩与信源编码》实验指导书.docx_第1页
第1页 / 共21页
《数据压缩与信源编码》实验指导书.docx_第2页
第2页 / 共21页
《数据压缩与信源编码》实验指导书.docx_第3页
第3页 / 共21页
《数据压缩与信源编码》实验指导书.docx_第4页
第4页 / 共21页
《数据压缩与信源编码》实验指导书.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

《数据压缩与信源编码》实验指导书.docx

《《数据压缩与信源编码》实验指导书.docx》由会员分享,可在线阅读,更多相关《《数据压缩与信源编码》实验指导书.docx(21页珍藏版)》请在冰豆网上搜索。

《数据压缩与信源编码》实验指导书.docx

《数据压缩与信源编码》实验指导书

《数据压缩与信源编码》

实验指导书

适用专业:

信息工程

课程代码:

6088619

总学时:

40总学分:

2.5

编写单位:

电气与电子信息学院

编写人:

李斌

审核人:

审批人:

批准时间:

2015年11月10日

 

目录

实验一码书的设计和使用…………………………………2

实验二基于DCT变换的图像压缩技术……………………8

实验三基于小波变换的图像压缩技术…………………15

 

实验一码书的设计和使用

一、实验目的

采用矢量量化算法(LBG)获得图像压缩所需要的码书,通过码书实现图像压缩编码。

二、实验内容

对给定的一幅图像进行码书设计、编码和解码。

三、实验仪器、设备及材料

操作系统:

Windowsxp;

软件:

MATLAB

四、实验原理

要想得到好的性能编码,仅采用标量量化是不可能的。

当把多个信源符号联合起来形成多维矢量,再对矢量进行标量量化时自由度将更大,同样的失真下,量化基数可进一步减少,码率可进一步压缩。

这种量化叫矢量量化。

一种有效和直观的矢量量化码书设计算法——LBG算法(也叫GLA算法)是由Linde、Buzo和Gray于1980年首先提出来的。

该算法基于最佳矢量量化器设计的最佳划分和最佳码书这两个必要条件,且是Lloyd算法在矢量空间的推广,其特点为物理概念清晰、算法理论严密及算法实现容易。

设训练矢量集为

,待产生的码书为

,其中

,则码书设计过程就是需求把训练矢量集

分成

个子集

的一种最佳聚类方案,而子集

的质心矢量

作为码字。

假设平方误差测度用来表征训练矢量

和码字

之间的失真,即:

则码书设计的准则可用下列数学形式表达:

最小化

约束条件

其中

矩阵,其元素满足:

矩阵

可看作训练矢量的聚类结果。

根据

,可计算码字:

其中

代表子集

中训练矢量的数目,或者说是矩阵

中非零元素的数目。

针对训练矢量集为

,其LBG算法的具体步骤如下:

步骤1:

给定初始码书

,令迭代次数

,平均失真

,给定相对误差门限

步骤2:

用码书

中的各码字作为质心,根据最佳划分原则把训练矢量集

划分为

个胞腔

满足

步骤3:

计算平均失真

判断相对误差是否满足

若满足,则停止算法,码书

就是所求的码书。

否则,转步骤4。

步骤4:

根据最佳码书条件,计算各胞腔的质心,即

由这

个新质心

形成新码书

,置

,转步骤2。

五、实验步骤

1.码书的设计

clearall;

data=imread('cameraman.tif');%调入原始图像

data=double(data)/255;%归一化

[m,n]=size(data);%求出图像的行数和列数

figure

(1)

subplot(1,2,1);

imshow(data);%显示原始图像

title('原始图像')

subplot(1,2,2);

imhist(data);

title('直方图')

siz_word=4;%设置码字的大小

siz_book=512;%设置码书的大小

data1=zeros(m*n,1);

fori=1:

m

forj=1:

n

data1((i-1)*n+j)=data(i,j);

end

end

M1=floor(m*n/siz_word);

r=mod(m*n,siz_word);

ifr>0

M1=M1+1;

end

data2=zeros(M1,siz_word);

l=1;

A=zeros(siz_word,1);

r=1;

fori=1:

m*n

A(r)=data1(i);

ifr==siz_word

data2(l,:

)=A;

l=l+1;

r=1;

else

r=r+1;

end

end

code_book=zeros(siz_book,siz_word);

 

2.编码

%LBG算法开始

%初始化码书

l=1;

r=1;

A=zeros(siz_word,1);

fori=1:

siz_book*siz_word

A(r)=data1(i);

ifr==siz_word

code_book(l,:

)=A;

l=l+1;

r=1;

else

r=r+1;

end

end

MIU=zeros(M1,siz_book);

t=1;

whilet==1

fori=1:

M1

B=zeros(siz_word,1);

B=data2(i,:

);

A=zeros(siz_word,1);

A=code_book(1,:

);

tep=0.0;

forl=1:

siz_word

tep=tep+(A(l)-B(l))^2;

end

r=1;

forj=2:

siz_book

A=code_book(j,:

);

temp=sum((A-B).^2);

iftemp

r=j;

tep=temp;

end

end

MIU(i,r)=1.0;

end

t=0;

code_book1=zeros(siz_book,siz_word);

forj=1:

siz_book

forl=1:

siz_word

tep=0.0;

fori=1:

M1

code_book1(j,l)=code_book1(j,l)+MIU(i,j)*data2(i,l);

tep=tep+MIU(i,j);

end

iftep>0

code_book1(j,l)=code_book1(j,l)/tep;

else

code_book1(j,l)=0.0;

end

end

end

tep=0.0;

forj=1:

siz_book

forl=1:

siz_word

tep=tep+(code_book1(j,l)-code_book(j,l))^2;

end

end

iftep/siz_book<0.000001

t=0;

end

code_book=code_book1;

end

 

3.解码

%编码后图像恢复过程

data3=zeros(M1,siz_word);

fori=1:

M1

forj=1:

siz_book

ifMIU(i,j)==1

t=j;

end

end

data3(i,:

)=code_book(t,:

);

end

data5=zeros(m,n);

fori=1:

m

forj=1:

n

tep=(i-1)*n+j;

i1=floor(tep/siz_word);

ifi1==0

i1=1;

end

j1=mod(tep,siz_word);

ifj1==0

j1=siz_word;

end

data5(i,j)=floor(data3(i1,j1)*255);

end

end

figure

(2)

imshow(uint8(data5));%显示恢复图像

title('矢量量化编码后恢复的图像')

六、实验注意事项

认真听指导教师的讲解,按照要求一步一步做实验。

实验完成后,写出规范的实验报告。

七、思考题

1.码书的大小对图像编码、解码的影响?

2.码字的大小对图像编码、解码的影响?

 

实验二基于DCT变换的图像压缩技术

一、实验目的

利用离散余弦变换进行图像压缩。

二、实验内容

对给定的一幅图像进行分块变换,将变换得到的DCT系数进行编码、传输和解码。

三、实验仪器、设备及材料

操作系统:

Windowsxp;

软件:

MATLAB

4、实验原理

1.DCT变换

离散余弦变换(DCT)是一种与离散傅立叶变换紧密相关的正交变换,8×8的二维离散余弦变换可以将图像的空间表达式转换到频率域,只用少量的数据点来表达图像,用f(x,y)表示8×8的图像块象素值,F(u,v)表示二维离散余弦变换后的值,具体表达式如下:

 

(4.1)

其反变换如下式:

 

(4.2)

其中,

(4.3)

 

二维离散余弦变换核具有可分离性,即可以先对每行进行一维离散余弦变换,

再对每列进行一维离散余弦变换,因此,二维离散余弦变换可表示为:

(4.4)

 

(4.5)

 

如果直接按照公式计算,其计算量很大,所以,实际应用中普遍采用快速傅立叶变换(FFT)算法来实现离散余弦变换的快速算法。

2.量化编码

数据压缩中的量化处理,不是对A/D转换量化,而是对正交变换后的数据进行量化处理,量化输入值的动态范围很大,而量化的输出只能取有限个整数,量化后的数值用较少的比特数便可表示。

量化处理总是把一批输入量化到一个输出级上,这样降低了数值的精度,但减少了数据量。

DCT的输出系数中,左上角的数据表示低频分量,人眼比较敏感,应该用较高的精度来表示,而右下角的数据可以用较低的精度来表示,因此,我们可以定义一个量化表对不同的数据采用不同的量化等级,这个量化表可以根据期望的压缩比进行调整,一般来说,量化表元素值越大压缩比越大,当然图像失真度也越大。

3.“Z”字型扫描

量化后的数据本来已经可以直接进行游程编码,但为了提高游程编码的效率,我们必须尽量增加零游程的长度。

基于量化后系数的排列特征,采用“Z”字型扫描能有效增加零游程的长度。

“Z”字型扫描轨迹如图2.2所示:

 

4.哈夫曼(Huffman)编码及解码

哈夫曼编码是1952年由Huffman提出的编码方法,基本思想是根据源数据符合出现的概率大小进行编码,出现概率大的符号分配越短的码字,出现概率越小的符号分配越长的码字,从而达到用尽量少的比特数表示数据源,标准哈夫曼编码步骤如下:

(1)统计数据源符号出现的概率,得到不同概率的信息符号;

(2)将数据源符号按概率递减顺序排列;

(3)把两个最小概率相加作为新符号的概率,并按

(2)重排;

(4)重复

(1)、

(2),直到概率为1;

(5)在每次合并信源时,将合并的信源分别赋“0”和“1”;

(6)寻找从每一信源符号到概率为1处的路径,记录路径上的“0”和“1”;

(7)从树根开始写出每一符号的“0”、“1”。

用标准哈夫曼编码对图像进行编码时效率很高,但需要对原始图像扫描两遍,第一遍要精确统计出每个像素值出现的概率,第二遍是建立哈夫曼树并编码,数据压缩和解压速度较慢,因此,出现了一种改良的哈夫曼编码,它的变长码字不是实时产生而是一个固定的表,在编码和解码过程中不用计算符号概率和排序,直接查表得到,但这个表必须经过大量的统计工作并精心设计才能达到较高的编码效率。

在静态图像压缩国际标准(JPEG标准)中,专家组已经对大量自然图像进行了统计,得到了适合于静态自然图像编码的哈夫曼表,在实际编码过程中,我们可直接应用此表进行编码和解码。

 

五、实验步骤

I=imread('cameraman.tif')

I=im2double(I)%转换图像矩阵为双精度型。

J=dct2(I);

T=dctmtx(8)%产生二维DCT变换矩阵

a1=[1611101624405161;

1212141926586055;

1413162440576956;

1417222951878062;

182237566810910377;

243555648110411392;

49647887103121120101;

7292959811210010399];

fori=1:

8:

200

forj=1:

8:

200

P=I(i:

i+7,j:

j+7);

K=T*P*T';

I2(i:

i+7,j:

j+7)=K;

K=K./a1;%量化

K(abs(K)<0.03)=0;

I3(i:

i+7,j:

j+7)=K;

end

end

figure;

imshow(I2);

title('DCT变换后的频域图像');%显示DCT变换后的频域图像

fori=1:

8:

200

forj=1:

8:

200

P=I3(i:

i+7,j:

j+7).*a1;%反量化

K=T'*P*T;

I4(i:

i+7,j:

j+7)=K;

end

end

figure;

imshow(I4);

title('复原图像');

B=blkproc(I,[8,8],'P1*x*P2',T,T')

%计算二维DCT,矩阵T及其转置是DCT函数P1*X*P2的参数

mask=[11110000

11100000

11000000

10000000

00000000

00000000

00000000

00000000]

%二值掩模,用来压缩DCT系数,只留下DCT系数中左上角的10个

B2=blkproc(B,[88],'P1.*x',mask)%只保留DCT变换的10个系数

I2=blkproc(B2,[88],'P1*x*P2',T',T)%重构图像

figure

imshow(I)

title('原始图像');

figure

imshow(I2);

title('压缩图像');

figure

imshow(J);

figure

mesh(J)%画出J的立体网状图

colorbar('horiz')%在水平条方向用不同的颜色表示曲面的高度

 

六、实验注意事项

认真听指导教师的讲解,按照要求一步一步做实验。

实验完成后,写出规范的实验报告。

七、思考题

1.利用DCT变换对图像编码有哪些优点?

2.DCT系数的多少对图像的压缩比有什么影响?

实验四基于小波变换的图像压缩技术

一、实验目的

利用小波变换进行图像压缩。

二、实验内容

对一幅照片利用小波变换进行多次压缩处理,并观察压缩效果。

三、实验原理

正交基在传统的信号表示中被广泛地采用,如傅氏变换。

基函数的正交性使相应的表示系数能容

易地用内积计算,然而,这些变换一般揭示的是信号的整体性质,难以表示其局部特性,小波变换发展了局部化思想,是一种信号的时间-尺度(时间-频率)分析方法,它具有多分辨率分析的特点,而且在时频两域都具有表征信号局部特征的能力,是一种窗口大小固定不变但其形状可改变,时间窗和频率窗都可以改变的时频局部化分析方法。

即在低频部分具有较高的频率分辨力和较低的时间分辨力,在高频部分具有较高的时间分辨力和较低的频率分辨力,很适合于探测正常信号中夹带的瞬态反常现象

并展示其成分,所以被誉为分析信号的显微镜,利用连续小波变换进行动态系统故障检测与诊断具有良

好的效果。

若记母小波为_Ψ(t),伸缩和频移因子分别为a和b,则由母小波Ψ(t)生成的小波为:

其中,母小波Ψ(t)必须满足下列条件:

对应于傅氏分析中的傅氏级数、傅氏变换、快速傅氏变换,在小波分析中也有相应的小波级数、小波变换和Mallat算法。

小波分析广泛应用于信号处理、图像处理、量子场论、地震勘探、语音识别与合成、音乐、雷达、CT成像、彩色复印、流体湍流、天体识别、机器视觉、机械故障诊断与监控、分形以及数字电视等科技领域,原则上讲,传统上使用傅里叶分析的地方,都可以用小波分析取代。

小波分析优于傅里叶变换的地方是,它在时域和频域同时具有良好的局部化性质。

小波分析应用于图像压缩具有压缩比高、压缩速度快、压缩后能保证图像的特征基本不变的特点,

且在传递过程中可以抗干扰。

小波分析进行图像压缩的基本原理是:

根据二维小波分解算法,一幅图像

作小波分解后,可得到一系列不同分辨率的图像,而表现一幅图像最主要的部分是低频部分,如果去掉

图像的高频部分只保留低频部分,则可以达到图像压缩的目的。

基于小波分析的图像压缩方法有很

多,较成功的有小波包最优基、小波域纹理模型方法、小波变换零树压缩、小波变换向量量化压缩等。

利用小波分解去掉图像的高频部分而仅保留图像的低频部分是一种最简单的图像压缩处理方法。

三、实验仪器、设备及材料

操作系统:

Windowsxp;

软件:

MATLAB

4、实验步骤

%装载原始图像并将其转化为索引图像

loadwbarb;

subplot(221);image(X);colormap(map)

title('原始图像');

axissquare

disp('压缩前图像X的大小:

');

whos('X')

%对图像用bior3.7小波进行2层小波分解

[c,s]=wavedec2(X,2,'bior3.7');

%提取小波分解结构中第一层低频系数和高频系数

ca1=appcoef2(c,s,'bior3.7',1);

ch1=detcoef2('h',c,s,1);

cv1=detcoef2('v',c,s,1);

cd1=detcoef2('d',c,s,1);

%分别对各频率成分进行重构

a1=wrcoef2('a',c,s,'bior3.7',1);

h1=wrcoef2('h',c,s,'bior3.7',1);

v1=wrcoef2('v',c,s,'bior3.7',1);

d1=wrcoef2('d',c,s,'bior3.7',1);

c1=[a1,h1;v1,d1];

%显示分解后各频率成分的信息

subplot(222);image(c1);

axissquare

title('分解后低频和高频信息');

%下面进行图像压缩处理

%保留小波分解第一层低频信息,进行图像的压缩

%第一层的低频信息即为ca1,显示第一层的低频信息

%首先对第一层信息进行量化编码

ca1=appcoef2(c,s,'bior3.7',1);

ca1=wcodemat(ca1,440,'mat',0);

%改变图像的高度

ca1=0.5*ca1;

subplot(223);image(ca1);colormap(map);

axissquare

title('第一次压缩');

disp('第一次压缩图像的大小为:

');

whos('ca1')

%保留小波分解第二层低频信息,进行图像的压缩,此时压缩比更大

%第二层的低频信息即为ca2,显示第二层的低频信息

ca2=appcoef2(c,s,'bior3.7',2);

%首先对第二层信息进行量化编码

ca2=wcodemat(ca2,440,'mat',0);

%改变图像的高度

ca2=0.25*ca2;

subplot(224);image(ca2);colormap(map);

axissquare

title('第二次压缩');

disp('第二次压缩图像的大小为:

');

whos('ca2')

输出结果如下所示:

压缩前图像X的大小:

NameSizeBytesClass

X256x256524288doublearray

Grandtotalis65536elementsusing524288bytes

第一次压缩图像的大小为:

NameSizeBytesClass

ca1135x135145800doublearray

Grandtotalis18225elementsusing145800bytes

第二次压缩图像的大小为:

NameSizeBytesClass

ca275x7545000doublearray

Grandtotalis5625elementsusing45000bytes

_

 

六、实验注意事项

认真听指导教师的讲解,按照要求一步一步做实验。

实验完成后,写出规范的实验报告。

七、思考题

1.比较第一次压缩的压缩比和第二次压缩的压缩比?

2.观察两次压缩的图像效果?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1