学号学号图像通信课程设计报告设计题目:图像的比特面编码研究专业班级:学生姓名:指导教师:考试形式:面试(答辩)成绩:___________________2013-2014学年第二学期摘要图像带给我们的信息量是巨大的,人类所获取的外界知识约有80%以上的信息来自于视觉,图像所承载的信息具有更真切、更丰富、更直观等特点。然而数字图像信号时高维信息,内容复杂,数据量也是非常巨大。如果将数字图像信号用于通信或存储,往往受到信道和存储设备的限制,在很多情况下无法实现,因此在保证一定的图像质量和满足任务要求条件下,图像的压缩算法变得尤为重要。在图像的无损压缩算法中,比特面编码一种能有效地减少像素间冗余的技术,它是一种固定分辨率的分层编码,即所有图像层的分辨率都和原图像相同。它将图像按比特位分解为一个个位平面,然后单独处理图像的每一个位平面。按比特位分解得到的每一个位平面都是一个二值图像,由于二值图像的相邻像素之间存在很强的相关性,所以对二值图像的压缩算法比较有效,我们可以采取行程长度编码完成对每一个位平面二值图像的压缩编码,从而实现对图像的压缩。由于这是一种无损压缩算法,所以在解码过程中能够完全恢复出原图像,不会对图像的质量有任何影响。在此次课程设计中,我们利用MATLAB软件,以灰度图像为例利用这种算法进行程序设计。一、设计任务、目的和要求1.设计任务(1)学习并掌握《图像通信》的理论知识内容。(2)掌握图像压缩算法进行图像压缩的基本思想和方法。(3)掌握比特面编码压缩算法的原理与方法。(4)利用比特面编码完成对一幅灰度图像的编码和解码。2.设计目的(1)在《图像通信》课程学习的基础上,巩固和加深对图像通信基础理论和基本知识的理解。(2)做到理论与实践相结合,在理论的基础上,学会用程序仿真的方法进行图像压缩。(3)提高在图像信息压缩方面的编程能力,并且将所学的理论知识在实践中巩固。3.设计要求(1)实现图像的比特面编码和解码灰度图像。(2)处理结果要求最终图像显示。(3)计算压缩比。二、总体方案设计1.系统运行环境:Windows72.编程软件平台:MATLAB3.编码算法原理比特面编码是一种通过单独地处理图像的位平面来减少像素间冗余的有效技术。它将一幅多级图像分解为一系列二值图像并采用几种熟知的二值图像压缩方法对每一幅二值图像进行压缩。一副m比特的灰度图像的灰度级可以用基2的多项式表示为:根据以上式子可知,将多项式的m个系数分离到m个1比特的位平面中,这就实现了将一副多级灰度图像表示成由m个二值位平面图像组成的集合。0级位平面就是原图像灰度级的第0位,也就是由上式中的系数0a生成的,m-1级位平面就是原图像灰度级的第m-1位,是由上式中的系数1ma生成的,每个位面根据其系数按0到m-1进行编号,位平面每个像素的取值等于每个像素点在原图像中对应位置的灰度级相应位的多项式系数。0011221122...22aaaammmm对于得到的m个位平面分别采用行程长度编码(RLC)。按照从左到右的扫描顺序去观察二值图像每一行时,一定数量的连续白点和一定数量的连续黑点总是交替出现,把取相同值的连续像素的数目叫做行程长度。用行程长度代替连续的相同像素,再把行程长度转化为二进制符号,使符号长度少于原始数据的长度,从而实现数据的压缩。4.算法流程图设计读入图像比特面分解行程长度编码行程长度解码比特面解码解码出图像求出压缩比图1比特面编码算法流程图三、设计实现1.比特面分解比特面编码中最重要的一步就是把如何图像中每个像素的某个比特取出来,从而构成位平面二值图像。通过查找资料知道在MATLAB应用软件函数库中有取二进制位函数getbit(n,k)可以轻松实现将一幅灰度图像按比特位分解为一个个位平面图像。但由于老师要求不能直接调用与所选编程有密切关系的函数,所以,我们又通过自己编写程序,实现此功能。我们编写程序的思想主要是由十进制正整数转化为二进制数所采用的“除2倒取余”得来的,所以程序中利用求余数函数mod(a,b)来实现。但由于MATLAB中的数据类型为双精度浮点型,所以在程序中也用到了取整函数fix()。如下程序所示A、B、C、E、D、F、G、H即为所求出的位平面图像,其中A为最高位位平面图像,H为最低位位平面图像。clc;closeall;clearall;I=imread('pic.jpg');%读入原图像figure;imshow(I);%将原图像显示出来h=fix(I/2);H1=mod(I,2);%求出原图二进制最低位图像为H1g=fix(h/2);G1=mod(h,2);%求出原图二进制第2位图像为G1f=fix(g/2);F1=mod(g,2);%求出原图二进制第3位图像为F1e=fix(f/2);E1=mod(f,2);%求出原图二进制第4位图像为E1d=fix(e/2);D1=mod(e,2);%求出原图二进制第5位图像为D1c=fix(d/2);C1=mod(d,2);%求出原图二进制第6位图像为C1b=fix(c/2);B1=mod(c,2);%求出原图二进制第7位图像为B1a=fix(b/2);A1=mod(b,2);%求出原图二进制最高位图像为A1A=1-A1;B=1-B1;C=1-C1;D=1-D1;E=1-E1;F=1-F1;G=1-G1;H=1-H1;%由于计算机内用反码存储,对上面求得图像取反得8个位平面图像figure;imshow(A,[]);figure;imshow(B,[]);figure;imshow(C,[]);figure;imshow(D,[]);figure;imshow(E,[]);figure;imshow(F,[]);figure;imshow(G,[]);figure;imshow(H,[]);%将分解得到的8个位平面二值图像分别显示出来2.行程长度编码与解码在行程长度编码与解码中多次用到循环语句和条件语句,所以先要事先通过查找资料了解MATLAB中这些语句的结构形式。由于比特面分解得到8个位平面二值图像,所以要进行8次行程长度编码解码。对每一个位平面进行行程长度编码的过程中,应做到变量名清晰,避免混用。以下程序是对最高位位平面图像A的行程长度编码与解码,位平面图像B、C、D、E、F、G、H行程长度编码和解码与A的编码解码程序类似,只需对以下程序与相应简单修改即可,这里就不再给出。XA=A(:);%把最高位位平面图像由二维矩阵转换为一维数组jA=1;YA(1)=1;%定义变量jA初始值与数组YA(1)的值forzA=1:1:(length(XA)-1)%循环语句对一维数组XA进行行程长度编码if(XA(zA)==XA(zA+1))%条件语句,判断XA的某相邻两值是否相等YA(jA)=YA(jA)+1;%相等则YA(jA)加1elsedataA(jA)=XA(zA);jA=jA+1;YA(jA)=1;%不相等则把XA(zA)赋值给dataA(jA),jA=jA+1;YA(jA)=1endenddataA(jA)=XA(length(XA));%把XA的最后一个元素赋值给dataA的最后一个值Y2A=dec2bin(YA);La=0;%把得到的行程长度数组转换为二进制forkA=1:1:length(Y2A)%循环语句,求行程编码占用的二进制比特数EA=dec2bin(YA(kA));%对YA中的每一个元素求二进制La=La+length(EA);%得到总的二进制比特数endiA=1;formA=1:1:length(YA)%循环语句对行程长度进行解码fornA=1:1:YA(mA)%恢复每一个白游程或黑游程RXA(iA)=dataA(mA);iA=iA+1;%得到行程长度解码endendRA=reshape(RXA,256,256);%把行程长度解码变为二维矩阵figure;imshow(RA,[]);%显示解码得到的最高位位平面图像3.比特面解码通过行程长度解码得到8个互相独立的位平面二进制图像,要想解码出原图像,则应该把这8个位平面合为一个灰度图像,按照与比特面分解相逆的过程,通过按权相加的思想,也容易得出解码的图像,并且求出压缩比。RI=128*RA+64*RB+32*RC+16*RD+8*RE+4*RF+2*R2G+R2H;%由8个位平面图像恢复出原图像figure;imshow(RI);%显示恢复出的原图像L=La+Lb+Lc+Ld+Le+Lf+Lg+Lh;%计算出8个位平面行程长度编码后数据总比特数LL=8*256*256;%原图像总比特数CR=L/LL%计算压缩比四、测试和调试在调试过程中,我们曾多次遇到过各种类型错误,然而正是在一遍遍修改程序的过程中,使得我们对于图像压缩算法尤其是对比特面编码有了更深刻、更透彻的理解,也对编写程序的技巧有所掌握。如在进行比特面分解的时候,由于编写的程序没有考虑到计算机内部是以二进制反码形式进行数据的存储,导致解码出的图像与原图像有很大区别,但当我们意识到这个问题并解决它之后,便可以得到正确的解码图像。在此次程序设计中,我们所选用的待编码传输的原图是8256256bit的灰度图像,通过正确运行我们所编写的比特面编码程序后能够得到以下图像和结果:原图:7a:3a:6a:2a:5a:1a:4a:0a:解码得到的图像:压缩比=0.5442五、结论与心得通过观察经过编码与解码得到的图像可以看出,解码得到的图像和原图像相比完全相同,说明这是一种无损压缩方法。而压缩比达到了0.5442,说明经过该编码得到的图像数据量比未经压缩的原图像数据量少了将近一半。如此一来,有利于图像的传输与存储。通过这次课程设计,使我们更深层次的掌握了《图像通信》的基本理论知识,对图像压缩算法有了系统性的了解,掌握了图像压缩算法进行图像压缩的基本思想和方法,尤其是对比特面编码压缩算法的原理与方法有了更深的了解。与此同时,通过此次课程设计,也锻炼了我们的编程能力,使得我们的综合能力得到提升。参考文献:[1]何小海.《图像通信》.西安电子科技大学出版社.2005:100-113.[2]陈怀琛.吴大正.《MATLAB及电子信息课程中的应用》.电子工业出版社.2006:58-65.[3]姚敏.《数字图像处理》.机械工业出版社.2007:163-180.[4]高成.《Matlab图像处理与应用》.国防工业出版社.2007:168-178.