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.观察两次压缩的图像效果?