实验3 LZW编码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验3 LZW编码
一、实验目的
1了解图像压缩的意义和手段;
2熟悉LZW编码的基本性质;
3熟练掌握LZW编码的方法与应用;
4掌握利用MA TLAB编程实现数字图像的LZW编码。
二、实验原理
LZW算法的词典是根据输入的数据动态创建的。LZW算法先将可能的信源符号创建一个初始词典,然后在编码过程中,遇到词典中没有的短语(信源序列)就加到词典中,动态创建词典。提取原始文本文件数据中的不同字符,基于这些字符创建一个编译表,然后用编译表中的字符的索引来替代原始文本文件数据中的相应字符,减少原始数据大小。看起来和调色板图象的实现原理差不多,但是应该注意到的是,我们这里的编译表不是事先创建好的,而是根据原始文件数据动态创建的,解码时还要从已编码的数据中还原出原来的编译表.
三、实验报告内容
1.用MATLAB编程实现对图像的LZW编码
2叙述实验过程;
3提交实验的原始图像和结果图像。
解:matlab程序源代码:
建立LZW.m函数
function [S,sz]=LZW(x)
% LZW词典编码
% x为输入序列 S为词典 sz为输出
n = length(x); % 序列长度
S = unique(x); % 初始化词典
x = num2cell(x); % 转化为细胞数组
S = num2cell(S); % 转化为细胞数组
sz = []; % 初始化输出序列
temp = []; % 当前序列
% 开始编码
for i = 1:n
temp = [temp x{i}]; % 取一个元素放入序列中
for j = 1:length(S)
if isequal(S{j},temp)
flag = 1;
break;
else
flag = 0;
end
end
if flag == 1 % 如果当前序列在词典中
continue;
else% 如果当前序列不在词典中
S = [S temp]; % 将当前序列加入词典for j = 1:length(S)
if isequal(S{j},temp(1:end-1)) T = j;
break;
end
end
sz = [sz T];
temp = temp(end); % 重置temp end
end
for j = 1:length(S)
if isequal(S{j},temp(end))
T = j;
break;
end
end
sz = [sz T]; % 最后一位加入输出
建立main.m主函数
% LZW编码测试应用于图像压缩中
clear;clc
I = imread('图片三.jpg');
[m,n] = size(I);
x = double(I(:)'); % 转化格式类型
% LZW编码
[S,sz]=LZW(x);
% LZW解码
A = [];
for i = 1:length(sz)
A = [A S{sz(i)}];
end
A = [A zeros(1,m*n-length(A))];
II = reshape(A,m,n);
imshow(uint8(II))
原始图像
结果图像
四、思考题
1.LZW编码有什么特点?
答:
l)LZW压缩技术对于可预测性不大的数据具有较好的处理效果,常用于TIF格式的图像压缩,其平均压缩比在2:1以上,最高压缩比可达到3:1。
2)对于数据流中连续重复出现的字节和字串,LZW压缩技术具有很高的压缩比。
3)除了用于图像数据处理以外,LZW压缩技术还被用于文本程序等数据压缩领域。
4)LZW压缩技术有很多变体,例如常见的ARC、RKARC、PKZIP高效压缩程序。
5)对于任意宽度和像素位长度的图像,都具有稳定的压缩过程。压缩和解压缩速度较快。
6)对机器硬件条件要求不高,在 Intel 80386的计算机上即可进行压缩和解压缩
2.LZW编码是无损编码还是有损编码?
答:无损编码