Matlab:二值图象游程编码

  • 格式:doc
  • 大小:321.50 KB
  • 文档页数:5

二值图像游程编码算法的Matlab实现
实验源程序以及相关结果如下:
>> image1=imread('C:\Program Files\MA TLAB71\work\1\girl.jpg'); %读入图像
>> imshow(image1); %显示原图像
>> % 以下程序是将原图像转换为二值图像
>> image2=image1(:); %将原始图像写成一维的数据并设为image2
>> image2length=length(image2); % 计算image2的长度
>> for i=1:1:image2length % for 循环,目的在于转换为二值图像
If image2(i)>=127
image2(i)=255;
else image2(i)=0;
end
end
>> image3=reshape(image2,146,122); % 重建二维数组图像,并设为image3
>> figure,imshow(image3);
>> % 以下程序为对原图像进行游程编码,压缩
>> X=image3(:); %令X为新建的二值图像的一维数据组
>> x=1:1:length(X); % 显示游程编码之前的图像数据
>> figure,plot(x,X(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); % data(j)代表相应的像素数据
j=j+1;
image4(j)=1;
end
end
>> data(j)=X(length(X)); % 最后一个像素数据赋给data
>> image4length=length(image4); % 计算游程编码后的所占字节数,记为image4length >> y=1:1:image4length ; % 显示编码后数据信息
>> figure,plot(y,image4(y));
>> CR=image2length/image4length; % 比较压缩前于压缩后的大小
>> % 下面程序是游程编码解压
>> l=1;
>> for m=1:image4length
for n=1:1:image4(m);
rec_image(l)=data(m);
l=l+1;
end
end
>> u=1:1:length(rec_image); % 查看解压后的图像数据
>> figure,plot(u,rec_image(u));
>> figure,imshow(rec2_image); % 显示解压恢复后的图像
通过matlab可以看出,程序运行过程中各个变量的值如下图:
CR=12.084,说明该游程编码,压缩率为12.084。