成绩
机 器 视 觉 课 程 设 计
题目: 用游程编码对二值图像进行压缩及解压
学生姓名
梁冬梅
学
号 2006116165
指导教师
王 宾
院
专
年
系
业
级
信息学院
通信工程
06 级
教务处制
用游程编码对二值图像进行压缩及解压
1. 代码
% 载入原图像并转换为二值图像
load trees;
image1=im2bw(X,map,0.4);
figure,imshow(X,map);
%显示原图像
title('载入 matlab 原有图像 tree');
figure,imshow(image1);
title('转换得到的二值图像');
X=image1(:);
x=1:1:length(X);
figure,plot(x,X(x));
title('编码之前的图像数据');
% 游程编码程序段
%令 X 为新建的二值图像的一维数据组
% 编码之前的图像数据
j=1;
image4(1)=1;
for z=1:1:(length(X)-1)
if (X(z)==X(z+1))
image4(j)=image4(j)+1;
else data(j)=X(z);
j=j+1;
image4(j)=1;
end
end
data(j)=X(length(X));
image1length=length(image1);
image4length=length(image4);
y=1:1:image4length ;
figure,plot(y,image4(y));
title('编码后的图像数据');
CR=image4length/image1length;
% 游程编码解压
i=1;
for m=1:image4length
for n=1:1:image4(m);
rec_image(i)=data(m);
i=i+1;
end
end
% 计算游程编码后的所占字节数
% 编码后数据信息
% 压缩比
u=1:1:length(rec_image);
figure,plot(u,rec_image(u));
title('解压后的图像数据');
% 解压后的图像数据
rec2_image=reshape(rec_image,258,350); % 重建二维二维图像数组
figure,imshow(rec2_image);
title('解压恢复后的图像数据');
% 解压恢复后的图像
2. 实验结果
2.1 实验得到的图
2.2 实验得到的数据及分析
2.2.1
压缩比 CR=16.7229
原图像数据是 90300*1 的矩阵
2.2.2
image1:压缩前的数据
image4:压缩后的数据
2.2.3
rev2_image:复原后的图像
rec_image:复原后的数据
3. 遇到的问题和解决方案
在使用reshape(A,m,n)恢复原图像时,选用m和n的数值不一样会用不同的结果:
1.当m*n不等于90030,即图像数据的个数时,系统出错,无解压结果
2.当 m*n=90030,但与原图像的矩阵行数列数不一致时,恢复出来的图像失真
如 m=300,n=301(m*n=90030)时
解决方法:发现可在 workspace 中查看实验所使用到的数据,压缩的二值图像 image1 是
258*350 的矩阵,将 m 和 n 设置为相应值,便得到几乎无失真的原图像