基于MATLAB的图像LZW编码研究.docx
- 文档编号:3501074
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:11
- 大小:126.38KB
基于MATLAB的图像LZW编码研究.docx
《基于MATLAB的图像LZW编码研究.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的图像LZW编码研究.docx(11页珍藏版)》请在冰豆网上搜索。
基于MATLAB的图像LZW编码研究
成绩
评阅人
中国矿业大学2015-2016学年第二学期
《数字视频技术》课程小设计考核
图像的LZW编码研究
专业班级:
信息14-05班
学生姓名:
李辉、李港深、李少杰
学生学号:
04141394、04141393、04141395
本人郑重声明:
本人认真、独立完成了查找资料、完成作业、编写程序等考核任务,无抄袭行为。
签字:
日期:
2017.05.17
1.引言
1.1A.Lempel和J.Ziv在1978年首次发表了介绍字典编码方法的文章将其称之为LZ78。
在他们的研究基础上,TerryA.Welch在1984年发表了对这种编码算法进行了改进的文章,并首先在高速硬盘控制器上应用了这种算法。
因此后来把这种编码方法称为LZW(Lempel—ZivWalch)压缩编码。
近年来越来越多的研究人员注意到图像压缩的重要性,主要原因在于图像文
件不仅占据内存空间,而且也占据大量的传输带宽,因此存储和传输前对图像进
行压缩就成为必然。
信息数字化的高速进行更是给数据压缩带来严峻的挑战,在不同的领域,出现了各种各样的压缩方法,例如基于熵的统计编码(Huffman编码、Shannon编码、算术编码等),基于字典的ARJ,LZH,PKZIP等压缩方法,分形编码、小波变换等变换编码,分块编码,以及JPEG,MPEG等。
LZW压缩算法是一种无损压缩算法,它主要是用一种代码来表示数据流中出现的重复串,以达到压缩的目的,并且LZW算法可以大大缩小对通讯带宽的需求,具有较高的实用价值。
LZW算法不仅可以用于文字数据的压缩,而且也可以成功地用于某些图像数据的压缩处理,如GIF和TIFF等图像格式,本文正是基于这种LZW编码的。
大量数据的图象信息会给存储器的存储容量,通信干线信道的宽度,以及计
算机的处理速度增加极大的压力,会使得WorldWideWeb变成WorldWideWait。
单纯靠增加存储器容量,提高信道带宽以及计算机处理速度等方法来解决这个问题是不现实的。
很显然,在信道带宽、通信链路一定的前提下,采用编码压缩技术,减少传输数据量,是提高通信速度的重要手段。
没有图象编码压缩技术的发展,大容量图象信息的存储与传输是难以实现的,多媒体、信息高速公路等新技术在实际中的应用也会碰到很大的困难。
LZW压缩算法是一种常用的数据压缩算法,由于它不依赖于任何数据格式,而且具有很高的综合性能指标,因而得到广泛应用。
1.2LZW编码
LZW算法的词典是根据输入的数据动态创建的。
LZW算法先将可能的信源符号创建一个初始词典,然后在编码过程中,遇到词典中没有的短语(信源序列)就加到词典中,动态创建词典。
提取原始文本文件数据中的不同字符,基于这些字符创建一个编译表,然后用编译表中的字符的索引来替代原始文本文件数据中的相应字符,减少原始数据大小。
看起来和调色板图象的实现原理差不多,但是应该注意到的是,我们这里的编译表不是事先创建好的,而是根据原始文件数据动态创建的,解码时还要从已编码的数据中还原出原来的编译表.
2.设计任务
2.1设计任务
实现灰度图像的LZW编码和解码恢复图像
2.2设计目的
(1)了解LZW编码的基本原理及其特点;
(2)理解并熟练对图像进行LZW编码的算法;
(3)学习和熟悉MATLAB图像处理工具箱;
(4)熟悉和掌握MATLAB 程序设计方法;
2.3设计要求
要求实现灰度图像的LZW编码和解码恢复图像;处理结果要求最终图像显示,且计算图像的信息熵,平均码字长度,编码效率,压缩比。
扩展要求:
读写GIF图片。
3.总体设计方案
3.1系统运行环境
Windows8.1/10系统
3.2编程软件平台
MATLABR2013a/R2014a
3.3LZW编码算法原理
LZW算法是一种基于字典的编码——将变长的输入符号串映射成定长的码字——形成
一本短语词典索引(串表),利用字符出现的频率冗余度及串模式高使用率冗余度达到压缩的目的。
该算法只需要一遍扫描,且具有自适应的特点,不需要保存和传送串表。
(1)LZW压缩算法
初始化:
将所有单个字符的串放入串表ST中(共
项,实际操作时不必放入,只
需空出串表的前
项,字符对应码字所对应的的串表索引即可);
读首字符入前缀串w;
设置码长codeBits=n+1;
设置串表中当前表项的索引值next=初始码字=
;
循环:
读下一输入字符c;
若c=EOF(文件结束符),则输出w的码字,结束循环(输出结束码字);
若wc已在串表中,则w=wc,转到循环开始处;
否则,输出w的码字,将wc放入ST中的next中,next++;
令w=c,转到循环开始处;
若next的位数超过码长(>codeBits),则codeBits++;
若串表已满(next的位数已超过最大码长12),则清空串表,输出清表
码字,转到初始化开始处。
(2)LZW还原算法
初始化:
将所有单个字符串放入串表ST中;(共
项【码字为0-
-1】),实
际操作不必放入,只需空出串表前
项,字符对应码字对应字符串表索
引即可)
串表中当前表项索引next=
+2;
设置码长codeBits=n+1;
读取首个码字(所对应的单个字符)入老串old,输出该字符;
循环:
读取下一个码字new;
若new=结束码字,结束循环;
若new=清表码字,则清空串表,转到初始化开始处;
若new大于等于next则输出串newStr=old+old【0】(例外处理);
若new小于next,则输出串newStr;
将newStr【0】+old放入串表ST【next】中,next++;
若next的位数超过码长(大于codeBits),则codeBits++,但是若加
1后的codeBits大于12,则重新让codeBits=12;old=newStr,转到循
环处开始,其中:
newStr=ST【new】(即串表中索引为new的串);
3.4LZW编码算法的特点
(1)LZW压缩技术对于可预测性不大的数据具有较好的处理效果,常用于GIF格式的图像压缩,其平均压缩比在2:
1以上,最高压缩比可达到3:
1。
(2)对于数据流中连续重复出现的字节和字串,LZW压缩技术具有很高的压缩比。
(3)除了用于图像数据处理以外,LZW压缩技术还被用于文本程序等数据压缩领域。
(4)LZW压缩技术有很多变体,例如常见的ARC、RKARC、PKZIP高效压缩程序。
(5)对于任意宽度和像素位长度的图像,都具有稳定的压缩过程。
压缩和解压缩速度较快。
(6)对机器硬件条件要求不高,在Intel80386的计算机上即可进行压缩和解压缩。
3.5算法流程图设计
3.5.1主流程图
3.5.2编码流程图
3.5.3解码流程图
3.6组员任务分工
李少杰:
编写主要程序,编码解码函数程序及相关子程序,修改报告及演示文稿。
李港深:
编写部分程序及部分函数程序,撰写报告。
李辉:
编写部分程序,进行程序调试完善,制作演示文稿。
4.程序实现
4.1主程序
clear;clc
I=rgb2gray(imread('house1.png'));
[m,n]=size(I);
x=double(I(:
)');%转化格式类型
%LZW编码
[S,sz]=LZW(x);
%LZW解码
A=[];
fori=1:
length(sz)
A=[AS{sz(i)}];
end
A=[Azeros(1,m*n-length(A))];
II=uint8(reshape(A,m,n));
[M,N]=size(II);
b=length(S);
sum=M*N;
H=0;%初始化信息熵
fori=0:
255;
[r,c]=find(II==i);%统计每个灰度值的像素点总数
num(i+1)=length(r);
p(i+1)=num(i+1)/sum;%统计每个灰度值的概率
ifp(i+1)~=0
H=H-p(i+1)*log2(p(i+1));%计算信息熵
end
end
%计算平均码字长度
pjmc=b/sum
%计算编码效率
bmxl=H/pjmc
%计算压缩比
ysb=sum*8/b
disp('信息熵');disp(H);disp('平均码字长度');disp(pjmc);
disp('编码效率');disp(bmxl);disp('压缩比');disp(ysb);
imshow(II);
4.2编解码程序
function[S,sz]=LZW(x)
%LZW词典编码
%x为输入序列S为词典sz为输出
n=length(x);%序列长度
S=unique(x);%初始化词典
x=num2cell(x);%转化为细胞数组
S=num2cell(S);%转化为细胞数组
sz=[];%初始化输出序列
temp=[];%当前序列
%开始编码
fori=1:
n
temp=[tempx{i}];%取一个元素放入序列中
forj=1:
length(S)
ifisequal(S{j},temp)
flag=1;
break;
else
flag=0;
end
end
ifflag==1%如果当前序列在词典中
continue;
else%如果当前序列不在词典中
S=[Stemp];%将当前序列加入词典
forj=1:
length(S)
ifisequal(S{j},temp(1:
end-1))
T=j;
break;
end
end
sz=[szT];
temp=temp(end);%重置temp
end
end
forj=1:
length(S)
ifisequal(S{j},temp(end))
T=j;
break;
end
end
sz=[szT];%最后一位加入输出
5.调试结果
原图编解码后
信息熵
6.4501
平均码字长度
0.7295
编码效率
8.8420
压缩比
10.9665
经过多次测试和调整,最终编码结果正确,解码结果正确,程序运行正确。
6.总结
感谢王利娟老师教授《数字视频技术》课程并为我们安排了这次课程设计。
通过这次课设,我们更深地熟悉和掌握了MATLAB 程序设计方法和灰度图像LZW的编码解码过程,学会了运用MATLAB平台对图像进行处理和分析。
提高我们编程能力的同时,也让我们对编解码算法有了更深入的理解。
课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程。
在这次的课程设计中不仅检验了我们所学习的知识,也引发了我们对如何去把握一件事情,如何去做一件事情,如何完成一件事情等问题的思考。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督,提高了团队合作能力,学到了平时在课上学不到的知识,每个人都得到了很大的进步。
通过这次数字视频技术课程设计,我们在多方面都有所提高。
这次课程设计中,综合运用了本专业所学课程的理论知识。
学会了在图像处理过程中,运用编程思维去实现某种功能或效果。
在这次设计过程中,体现出自己的能力以及综合运用知识的能力,体会到了学有所用、学以致用的兴奋感和成就感,同时也暴露出了自己平时学习的不足和薄弱环节,进而加以弥补和改正。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 图像 LZW 编码 研究