文档介绍:Forpersonaluseonlyinstudyandresearch;mercialuse蒁基于LBG的矢量量化图像压缩编码实验膀膅一、实验原理薅矢量量化:芀要想得到好的性能编码,仅采用标量量化是不可能的。当把多个信源符号联合起来形成多维矢量,再对矢量进行标量量化时自由度将更大,同样的失真下,量化基数可进一步减少,码率可进一步压缩。这种量化叫矢量量化。芀应用:薆在航天、军事、气象、医学、多媒体等领域中经常需要大量存储和传输各种静态图像和视频图像。为了提高传输效率和减少存储空间,必须采取有效的压缩编码算法消除图像中所包含的各种冗余信息并在给定的失真条件下使用尽量少的比特数来描述图像。矢量量化(VQ)作为一种有效的有损压缩技术,其突出优点是压缩比大以及解码算法简单,因此它已经成为图像压缩编码的重要技术之一。矢量量化压缩技术的应用领域非常广阔,如军事部门和气象部门的卫星(或航天飞机)遥感照片的压缩编码和实时传输、雷达图像和军用地图的存储与传输、数字电视和DVD的视频压缩、医学图像的压缩与存储、网络化测试数据的压缩和传输、语音编码、图像识别和语音识别等等。肂LGB算法:芃一种有效和直观的矢量量化码书设计算法——LBG算法(也叫GLA算法)是由Linde、Buzo和Gray于1980年首先提出来的。该算法基于最佳矢量量化器设计的最佳划分和最佳码书这两个必要条件,且是Lloyd算法在矢量空间的推广,其特点为物理概念清晰、算法理论严密及算法实现容易。莀设训练矢量集为,待产生的码书为,其中,,,则码书设计过程就是需求把训练矢量集分成个子集的一种最佳聚类方案,而子集的质心矢量作为码字。假设平方误差测度用来表征训练矢量和码字之间的失真,即:羆螄则码书设计的准则可用下列数学形式表达:肁最小化蒀约束条件,莇其中为矩阵,其元素满足:节螀矩阵可看作训练矢量的聚类结果。根据,可计算码字:薀螈其中代表子集中训练矢量的数目,或者说是矩阵第行中非零元素的数目。羄针对训练矢量集为,其LBG算法的具体步骤如下:袃步骤1:给定初始码书,令迭代次数,平均失真,给定相对误差门限。蚀步骤2:用码书中的各码字作为质心,根据最佳划分原则把训练矢量集划分为个胞腔,满足羅蚆步骤3:计算平均失真蚂蝿判断相对误差是否满足莆肄若满足,则停止算法,码书就是所求的码书。否则,转步骤4。莁步骤4:根据最佳码书条件,计算各胞腔的质心,即蝿螇由这个新质心形成新码书,置,转步骤2。袆膀衿二、实验目的膈采用矢量量化算法(LBG)获得图像压缩所需要的码书,通过码书实现图像压缩编码。芄三、实验内容膃对给定的一幅图片罿四、实验步骤芅对训练图片,采用LBG算法获取最佳码书设计;羅采用熵编码实现图像索引编号的压缩。羂五、程序代码聿clearall;蚅data=imread('');%调入原始图像蒃data=double(data)/255;%归一化螀[m,n]=size(data);%求出图像的行数和列数腿figure(1)肆subplot(1,2,1);膅imshow(data);%显示原始图像螃title('原始图像')艿subplot(1,2,2);蒇imhist(data);蚃title('直方图')薂siz_word=4;%设置码字的大小荿siz_book=512;%设置码书的大小袈data1=zeros(m*n,1);莅fori=1:m芁forj=1:n莈data1((i-1)*n+j)=data(i,j);肅end螃end肀M1=floor(m*n/siz_word);蒈r=mod(m*n,siz_word);蒆ifr>0蒅M1=M1+1;肃end薈data2=zeros(M1,siz_word);袇l=1;羃A=zeros(siz_word,1);袂r=1;蚈fori=1:m*n芈A(r)=data1(i);蚄ifr==siz_word蚁data2(l,:)=A;螈l=l+1;虿r=1;膂else蚃r=r+1;袈end螅end袄code_book=zeros(siz_book,siz_word);蒂%LBG算法开始羈%初始化码书膆l=1;薆r=1;膁A=zeros(siz_word,1);羈fori=1:siz_book*siz_word薇A(r)=data1(i);肄ifr==siz_word羀code_book(l,:)=A;肇l=l+1;羈r=1;螆else肃r=r+1;膇end肅end膄MIU=zeros(M1,siz_book);螂芇t=1;蒆whilet==1袆fori=1:M1薁B=zeros(siz_word,1);薁B=data2(i,:);羇A=zeros(siz_word,1);莃A=code_book(1,:);薄tep=;蚁forl=