基于行程编码的图像编码程序设计.docx
《基于行程编码的图像编码程序设计.docx》由会员分享,可在线阅读,更多相关《基于行程编码的图像编码程序设计.docx(10页珍藏版)》请在冰点文库上搜索。
![基于行程编码的图像编码程序设计.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/e24f4965-40cf-483c-8ad9-b346ea44a596/e24f4965-40cf-483c-8ad9-b346ea44a5961.gif)
基于行程编码的图像编码程序设计
《图像信息系统》课程设计
【课程设计选题】基于行程编码的图像编码程序设计
一、课程设计的目的与要求
1.1、课程设计目的
1.2、课程设计选题
1.3、课程设计方案制定
1.4、课程设计要求
二、设计的主要内容及基本原理
2.1、图像压缩编码的背景意义
2.2、行程编码(Run-LengthEncoding)
三、图像编码程序总体方案设计
3.1、图像编码程序流程图
3.2、用MATLAB实现图像编码程序源代码及注释
四、课程设计总结与体会
一、课程设计的目的与要求
【课程设计选题】基于行程编码的图像压缩编码程序设计
1.1、课程设计目的
1、提高分析问题、解决问题的能力,进一步巩固图像信息系统中的基本原理与方法。
2、熟悉掌握一门计算机语言,可以进行图像信息系统原理应用的开发设计。
1.2、课程设计选题
1、对一幅数字图像进行行程压缩编码,计算出压缩率(即编码效率),并显示编码前的图像;
2、对编码后的数据进行解压,并显示解压后的图像;
3、对原始图像数据和解压后图像数据进行失真测试。
1.3、课程设计方案制定
1、程序运行环境是Windows平台。
2、开发工具选用matlab、VC++、VB、C#等。
建议选用matlab作为编程开发工具,可以达到事半功倍的效果、并可降低编程难度。
3、以组件化的思想构建整个软件系统。
具体的功能模块根据选定的不同题目做合理的划分。
1.4、课程设计要求
1、理解各种图像压缩编码方法确切意义。
2、独立进行方案的制定,系统结构设计要合理。
3、在程序开发时,则必须清楚主要实现函数的目的和作用,需要在程序书写时说明做适当的注释。
如果使用matlab来进行开发,要理解每个函数的具体意义和适用范围,在写课设报告时,必须要将主要函数的功能和参数做详细的说明。
4、通过多幅不同形式的图像来检测该系统的稳定性和正确性。
二、设计的主要内容及基本原理
2.1、图像压缩编码的背景意义
图像由于其表示方法的原因导致其完整、真实的保存一幅图片时,所占用的物理空间是极其庞大的。
例如一幅1024*468、256色的图像,就需要存储1024*468*24=11501568个位,相当于1024*468*3=1437696个字节,约合1040kb的信息。
Bmp图像就是一种真实记录每一个颜色信息的图像格式。
因此,bmp的存储空间要求的就比较大。
而这种图像在网络环境中几乎是不可接受的,因此对图像进行数据压缩是一个值得我们重视的问题。
图像编码压缩的目的是节省图像存储空间,减少传输信道的容量,缩短图像加工处理时间,针对不同的应用目的可以使用不同的压缩方法。
图像的数据压缩可分成两类,一类是无损压缩,另一类是有损压缩。
无损压缩利用数据的统计冗余进行压缩,可以保证在数据压缩和还原过程中,图像信息没有损失或失真,图像还原(解压缩)时,可完全恢复,即重建后的图像与原始图像完全相同。
例如,在多媒体应用中常用的有行程编码(RLE)、增量调制编码(DM)、霍夫曼(Huffman)编码、LZW编码等。
有损压缩方法利用人眼视觉对图像中的某些频率成分不敏感的特性,采用一些高效的有限失真数据压缩算法,允许压缩过程中损失一定的信息。
采用有损压缩的数据进行图像重建时,重建后的图像与原始图像虽有一定的误差,但并不影响人们对图像含义的正确理解,却换来了较大的压缩比,大幅度减少了图像信息中的冗余信息。
在本课程设计中,我们主要针对的是无损压缩中的行程编码方式的主要算法及其算法实现。
该编码原理十分简单,就是将一行中颜色值相同的相邻像素用一个计数值和该颜色值来代替,例如aaabccccccddee可以表示为3a1b6c2d2e.如果一副图像是由很多块颜色相同的大面积区域组成的,那么采用行程编码压缩的效率会非常的惊人,但是如果图像中每两个相邻点的颜色都不同,用这种方法不但不能压缩,反而数据量增加一倍。
在本次课程设计中我们还实现了图像直方图,灰度拉伸,直方图均衡化,图像亮度变换,灰度变换等功能。
2.2、行程编码(Run-LengthEncoding,RLE)
行程编码也称游程编码,常用RLE(Run-LengthEncoding)表示,是一种利用空间冗余度压缩图像的方法,对某些相同灰度级成片连续出现的图形,行程编码也是一种高效的编码方法。
特别是对二值图像,效果尤为显著。
该压缩编码技术相当直观和经济,运算也相当简单,因此解压缩速度很快。
RLE压缩编码尤其适用于计算机生成的图形图像,对减少存储容量很有效果。
2.21RLE算法的基本原理
RLE(Run-LengthEncoding行程长度编码)算法是Windows系统中使用的一种图像文件压缩方法,其基本思想是:
将一扫描行中颜色值相同的相邻像素用两个字节来表示,第一个字节是一个计数值,用于指定像素重复的次数;第二个字节是具体像素的值[2]。
主要通过压缩除掉数据中的冗余字节或字节中的冗余位,从而达到减少文件所占空间的目的。
例如,有一表示颜色像素值的字符串RRRRRGGBBBBBB,用RLE压缩方法压缩后可用5R2G6B来代替,显然后者的串长度比前者的串长度小得多。
译码时按照与编码时采用的相同规则进行,还原后得到的数据与压缩前的数据完全相同。
因此,RLE是无损压缩技术。
对于拥有大面积,相同颜色区域的图像,用RLE压缩方法非常有效。
由RLE原理派生出许多具体行程压缩方法
(1)PCX行程压缩方法
该算法实际上是位映射格式到压缩格式的转换算法,该算法对于连续出现1次的字节Ch,若Ch>0xc0则压缩时在该字节前加上0xc1,否则直接输出Ch,对于连续出现N次的字节Ch,则压缩成0xc0+N,Ch这两个字节,因而N最大只能为ff-c0=3fh(十进制为63),当N大于63时,则需分多次压缩。
(2)BI_RLE8压缩方法
在WINDOWS3.0、3.1的位图文件中采用了这种压缩方法。
该压缩方法编码也是以两个字节为基本单位。
其中第一个字节规定了用第二个字节指定的颜色重复次数。
如编码0504表示从当前位置开始连续显示5个颜色值为04的像素。
当第二个字节为零时第二个字节有特殊含义:
0表示行末;1表示图末;2转义后面2个字节,这两个字节分别表示下一像素相对于当前位置的水平位移和垂直位移。
这种压缩方法所能压缩的图像像素位数最大为8位(256色)图像。
这种压缩方式包括绝对方式和编码方式。
编码方式
在此方式下每两个字节组成一个信息单元。
第一个字节给出其后面相连的象素的个数。
第二个字节给出这些象素使用的颜色索引表中的索引。
例如:
信息单元0304,03表示其后的象素个数是3个,04表示这些象素使用的是颜色索引表中的第五项的值。
压缩数据展开后就是040404.同理0405可以展开为05050505.信息单元的第一个字节也可以是00,这种情况下信息单元并不表示数据单元,而是表示一些特殊的含义。
这些含义通常由信息单元的第二个字节的值来描述。
这些值在0x00到0x02之间。
具体含义如下:
第二个字节的值
00线结束
01位图结束
02象素位置增量。
表示紧跟在这个字节后面的信息单元里的两个字节中所包含的无符号值指定了下个象素相对于当前象素的水平和垂直偏移量。
例如:
00020608表示的含义是下一个象素的位值是从当前位置向右移动5个象素,向下移动8个象素。
绝对方式
绝对方式的标志是第一个字节是0,第二个字节是0x03到0xff之间的值。
第二个字节的值表示跟随其后面的象素的字节数目。
每个字节都包含一个象素的颜色索引。
每个行程编码都必须补齐到字的边界。
(3)BI_RLE4压缩方法
该方法也用于WINDOWS3.0/3.1位图文件中,它与BI_RLE8编码类似,唯一不同是:
BI_RLE4的一个字节包含了两个像素的颜色,因此,它只能压缩的颜色数不超过16的图像。
因而这种压缩应用范围有限。
(4)紧缩位压缩方法(Packbits)
该方法是用于Apple公司的Macintosh机上的位图数据压缩方法,TIFF规范中使用了这种方法,这种压缩方法与BI_RLE8压缩方法相似,如1c1c1c1c2132325648压缩为:
831c2181325648,显而易见,这种压缩方法最好情况是每连续128个字节相同,这128个字节可压缩为一个数值7f。
这种方法还是非常有效的。
2.22RLE特点
RLE所能获得的压缩比有多大,这主要是取决于图像本身的特点。
如果图像中具有相同颜色的图像块越大,图像块数目越少,获得的压缩比就越高。
反之,RLE对颜色丰富的自然图像就显得力不从心,在同一行上具有相同颜色的连续像素往往很少,而连续几行都具有相同颜色值的连续行数就更少。
如果仍然使用RLE编码方法,不仅不能压缩图像数据,反而可能使原来的图像数据变得更大。
因此,具体实现时,需要和其它的压缩编码技术联合应用。
2.23RLE算法的局限性
在RLE数据压缩中,只有当重复的字节数大于3时才可以起到压缩作用,并且还需要一个特殊的字符用作标志位,因此在采用RLE压缩方法时,必须处理以下几个制约压缩比的问题。
(1)在原始图像数据中,除部分背景图像的像素值相同外,没有更多连续相同的像素。
因此如何提高图像中相同数据值的问题是提高数据压缩比的关键;
(2)如何寻找一个特殊的字符,使它在处理的图像中不用或很少使用的问题;
(3)在有重复字节的情况下,如何提高重复字节数(最多为255)受限的问题。
三、图像编码程序总体方案设计
3.1、图像编码程序流程图
图像行程编码主流程图如下图所示
3.2、用MATLAB实现图像编码程序源代码及注释
源程序及相关注释:
>>image1=imread('C:
\ProgramFiles\MATLAB71\work\1\1.jpg');%读入图像
>>imshow(image1);%显示原图像
>>%以下程序是将原图像转换为二值图像
>>image2=image1(:
);%将原始图像写成一维的数据并设为image2
>>image2length=length(image2);%计算image2的长度
>>fori=1:
1:
image2length%for循环,目的在于转换为二值图像
Ifimage2(i)>=127
image2(i)=255;
elseimage2(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;
>>forz=1:
1:
(length(X)-1)%行程编码程序段
ifX(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;
>>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));
>>rec2_image=reshape(rec_image,146,122);%重建二维二维图像数组
>>figure,imshow(rec2_image);%显示解压恢复后的图像
CR=12.084 ,说明该行程编码,压缩率为12.084
通过MATLAB可以看出,程序运行过程中各个变量的值如下图:
五、课程设计总结与体会
在这次不到两周的课程设计当中,我深深地感觉到自己知识的不足之处,看到了自己非常缺乏实践经验,理论联系实际的能力也极需要得到提高。
这次的课程设计也让我看到了团队的力量,我认为我们的工作是一个团队的工作,虽然我的团队只有两个人,但是我们作为一个整体,我们发扬了团队的合作精神,大家一起取长补短。
最终完成了这次课设的全部过程。
合作让我明白了在课程设计中只有一个人知道原理是远远不够的,必须让我们一个组的人都知道,否则一个人的错误,就有可能导致整个组的失败。
团结协作是我们成功的一项非常重要的保证。
而这次设计也正好锻炼我们这一点,这也是非常宝贵的。
对我而言,知识上的收获重要,精神上的丰收更加可喜。
让我知道了学无止境的道理。
我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。
挫折是一份财富,经历是一份拥有。
这次课程设计必将成为我人生旅途上一个非常美好的回忆。
最后,通过这次课程设计,加深了我对数字图像处理的理解与掌握,同时也让我更加熟练的运用MATLAB进行编程,虽然在此课设中我们对图像进行的编码方法并不是非常完美,且存在一定的缺陷,但是我们会以此作为一个前进的平台,努力向更好的境界发展。