游程编码实验报告.docx
- 文档编号:12825095
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:10
- 大小:442.51KB
游程编码实验报告.docx
《游程编码实验报告.docx》由会员分享,可在线阅读,更多相关《游程编码实验报告.docx(10页珍藏版)》请在冰点文库上搜索。
游程编码实验报告
重庆交通大学信息科学与工程学院
综合性设计性实验报告
专业:
通信工程专业11级
学号:
0222
姓名:
********
实验所属课程:
移动通信原理与应用
实验室(中心):
信息技术软件实验室
指导教师:
****************
2014年5月
教师评阅意见:
签名:
年月日
实验成绩:
一、题目
二值图像的游程编码及解码
二、仿真要求
对一幅图像进行编码压缩,然后解码恢复图像。
三、仿真方案详细设计
实验过程分为四步:
分别是读入一副图象,将它转换成为二进制灰度图像,然后对其进行游程编码和压缩,最后恢复图象(只能恢复为二值图像)。
1、二值转换
所谓二值图像,就是指图像上的所有像素点的灰度值只用两种可能,不为“0”就为“1”,也就是整个图像呈现出明显的黑白效果。
2、游程编码原理
游程编码是一种无损压缩编码,对于二值图有效。
游程编码的基本原理是:
用一个符号值或串长代替具有相同值的连续符号,使符号长度少于原始数据的长度。
据进行编码时,沿一定方向排列的具有相同灰度值的像素可看成是连续符号,用字串代替这些连续符号,可大幅度减少数据量。
游程编码分为定长行程编码和不定长行程编码两种类型。
游程编码是连续精确的编码,在传输过程中,如果其中一位符号发生错误,即可影响整个编码序列,使行程编码无法还原回原始数据。
3、游程编码算法
一般游程编码有两种算法,一种是使用1的起始位置和1的游程长度,另一种是只使用游程长度,如果第一个编码值为0,则表示游程长度编码是从0像素的长度开始。
这次实验采用的是前一种算法。
两种方法各有优缺点:
前一种存储比第二种困难,因此编程也比较复杂。
而后一种需要知道第一个像素值,故压缩编码算法中需给出所读出的图的第一个像素值。
压缩流程图:
解压流程图:
四、仿真结果及结论
上图为压缩编码后的图像
五、总结与体会
通过这次试验,我来了解一些关于游程编码的基本原理,所谓游程编码,其实它就是一种统计类型的编码,更是一种无损压缩编码。
原理是用一个符号值或串长代替具有相同值的连续符号,使符号长度少于原始数据的长度。
只在各行或者各列数据的代码发生变化时,一次记录该代码及相同代码重复的个数,从而实现数据的压缩,,而起始位置和宽度是关键。
二值图像是指只有黑(用255表示)白(用0表示)两种亮度值的图像。
把灰度值接近于255或者0的其他灰度都相应转化成255和0,即灰度图像就变成了黑白二值图像,通过对游程编码的原理可以看到一个灰度值由两个数值里来编码,这样效率很差,即便是游程足够长,用等长编码效率都不是太好。
通过这次试验我对编码有了更深的一些认识,但还不足以独立实现,需要大量查阅资料,总的来说,我对原理很明确,对具体编码这一块儿还不是太熟,以后会在这方面多多实践。
六、主要仿真代码
实验代码:
image1=imread('D:
\我的图片\实验图.jpg');%读入图像
imshow(image1);%显示原图像
title('原始彩色图像');
imgGray=rgb2gray(image1);%转为黑白图像
figure;%建立一个新窗口
imshow(imgGray);%显示转化后的黑白图像
title('转化后的黑白图像');
imwrite(imgGray,'');
image2=imgGray(:
);%将原始图像写成一维的数据并设为image2
[c,r]=size(imgGray(:
:
1));
image2=imgGray(:
);%同上
image2length=length(image2);%统计长度
fori=1:
1:
image2length%f转换为二值图像
ifimage2(i)>=127
image2(i)=255;%纯黑色为255
end
ifimage2(i)<127
image2(i)=0;%纯白色为0
end
end
image3=reshape(image2,c,r);%重建二维数组图像,并设为image3
figure,imshow(image3)
title('压缩后的二值图像');
%以下程序为对原图像进行游程编码,压缩
X=image3(:
);%令X为新建的二值图像的一维数据组
x=1:
1:
length(X);%显示游程编码之前的图像数据
figure,plot(x,X(x));
title('编码前的图像数据');
j=1;
image4=[];
image4
(1)=1;
forz=1:
1:
(length(X)-1)
ifX(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));%最后一个像素数据赋给data
image4length=length(image4);%统计游程编码后的所占字节长度
y=1:
1:
image4length;%显示编码后数据信息
figure,plot(y,image4(y));
title('编码后的数据信息');
CR=image2length/image4length;%比较压缩前于压缩后的大小
%下面程序是游程编码解压
l=1;
form=1:
image4length
forn=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));
title('解压后的图像数据');
rec2_image=reshape(rec_image,c,r);%重建二维图像数组
figure,imshow(rec2_image);%显示解压恢复后的图像
title('解压恢复后的图像');
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游程 编码 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)