基于MATLAB实现对图像的矢量量化

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

题目:基于MATLAB实现对图像的矢量量化姓名:学号:系别:电子信息工程专业:电子科学与技术2014年10月11日基于MATLAB实现对图像的矢量量化一、实验要求:1.对于图像的数据可以只选用灰度图像;2.实现对四个像素值的矢量量化,自己选择如何建立码表的方法及最佳匹配的方法;3.比较原始图像和重构图像的效果;二、实验内容:1.实验素材:在本次的对图像矢量量化的过程中,选取了琳娜(Linna)图像,256×256,12KB,如图2.1所示:图2.12.码表的建立和最佳的匹配方法:本次实验中选取的码表设计方法为LBG算法,该算法基于最佳矢量量化器设计的最佳划分和最佳码书这两个必要条件,且是Lloyd算法在矢量空间的推广,其特点为物理概念清晰、算法理论严密及算法实现容易。设训练矢量集为110,,,MxxxX,待产生的码书为110,,,NyyyC,其中)1(10,,,kiiiixxxx,)1(10,,,kjjjjyyyy,10,10NjMi,则码书设计过程就是需求把训练矢量集X分成N个子集)1,,1,0(NjSj的一种最佳聚类方案,而子集jS的质心矢量jy作为码字。假设平方误差测度用来表征训练矢量ix和码字jy之间的失真,即:102)(),(kljliljiyxyxd则码书设计的准则可用下列数学形式表达:最小化1010),(),,(NjMijiijyxdwCXWf约束条件101Njijw,10Mi其中W为NM矩阵,其元素满足:01ijwjijiSxSx矩阵W可看作训练矢量的聚类结果。根据W,可计算码字:101MiiijjjxwSy其中jS代表子集jS中训练矢量的数目,或者说是矩阵W第1j行)1,,1,0,(Miwij中非零元素的数目。针对训练矢量集为110,,,MxxxX,其LBG算法的具体步骤如下,流程图如图2.2所示:图2.2步骤1:给定初始码书)0(1)0(1)0(0)0(,,,NyyyC,令迭代次数0n,平均失真)1(D,给定相对误差门限)10(。步骤2:用码书)n(C中的各码字作为质心,根据最佳划分原则把训练矢量集X划分为N个胞腔)(1)(1)(0)(,,,nNnnnSSSS,)(niS满足XvyvdyvdvSnjNjnini),,(min),(|)(10)()(步骤3:计算平均失真10)(10)(),(min1MinjiNjnyxdMD判断相对误差是否满足)()()1(/)(nnnDDD若满足,则停止算法,码书)(nC就是所求的码书。否则,转步骤4。步骤4:根据最佳码书条件,计算各胞腔的质心,即)()()1(1niSvninivSy由这N个新质心1,,1,0,)1(Niyni形成新码书)(nC,置1nn,转步骤2。3.实验方法:在对同一幅琳娜(Linna)图像进行矢量量化时,分别采用在不同的码书条件下:512、256、1024观察比较相应的结果。三、程序代码clearall;I=imread('C:\linna.JPG');g=rgb2gray(I);imwrite(g,'C:\Users\Johnson_Li\Desktop\Mr.Li.JPG','JPG')data=imread('Mr.Li.JPG');%调入原始图像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:mforj=1:ndata1((i-1)*n+j)=data(i,j);endendM1=floor(m*n/siz_word);r=mod(m*n,siz_word);ifr0M1=M1+1;enddata2=zeros(M1,siz_word);l=1;A=zeros(siz_word,1);r=1;fori=1:m*nA(r)=data1(i);ifr==siz_worddata2(l,:)=A;l=l+1;r=1;elser=r+1;endendcode_book=zeros(siz_book,siz_word);%LBG算法开始%初始化码书l=1;r=1;A=zeros(siz_word,1);fori=1:siz_book*siz_wordA(r)=data1(i);ifr==siz_wordcode_book(l,:)=A;l=l+1;r=1;elser=r+1;endendMIU=zeros(M1,siz_book);t=1;whilet==1fori=1:M1B=zeros(siz_word,1);B=data2(i,:);A=zeros(siz_word,1);A=code_book(1,:);tep=0.0;forl=1:siz_wordtep=tep+(A(l)-B(l))^2;endr=1;forj=2:siz_bookA=code_book(j,:);temp=sum((A-B).^2);iftemptepr=j;tep=temp;endendMIU(i,r)=1.0;endt=0;code_book1=zeros(siz_book,siz_word);forj=1:siz_bookforl=1:siz_wordtep=0.0;fori=1:M1code_book1(j,l)=code_book1(j,l)+MIU(i,j)*data2(i,l);tep=tep+MIU(i,j);endiftep0code_book1(j,l)=code_book1(j,l)/tep;elsecode_book1(j,l)=0.0;endendendtep=0.0;forj=1:siz_bookforl=1:siz_wordtep=tep+(code_book1(j,l)-code_book(j,l))^2;endendiftep/siz_book0.000001t=0;endcode_book=code_book1;end%编码后图像恢复过程data3=zeros(M1,siz_word);fori=1:M1forj=1:siz_bookifMIU(i,j)==1t=j;endenddata3(i,:)=code_book(t,:);enddata5=zeros(m,n);fori=1:mforj=1:ntep=(i-1)*n+j;i1=floor(tep/siz_word);ifi1==0i1=1;endj1=mod(tep,siz_word);ifj1==0j1=siz_word;enddata5(i,j)=floor(data3(i1,j1)*255);endendfigure(2)imshow(uint8(data5));%显示恢复图像title('矢量量化编码后恢复的图像')四、运行结果及分析:图4.1图4.1显示了提取的琳娜的亮度图像,即黑白图像以及图像直方图的显示;图4.2图4.2中所示,在码字为4,码书为512的条件下矢量量化后的重构图像;图4.3图4.3中所示,在码字为4,码书为256的条件下矢量量化后的重构图像,图片明显比码书为512时模糊,因为此时所分的区间更大,导致图片解码时不精确度加大;图4.4图4.4中所示,在码字为4,码书为1024的条件下矢量量化后的重构图像,与siz_book=512时的矢量量化后的图片变换很小,这说明影响图片质量的主要因素不是码书的大小了,而是码字的大小,或者其他的因素,导致图片解码后的不够清晰。五、总结首先,在这次的实验中出现错误,就是刚开始的时候在最后的重构图像中,一张图片上会出现3个图像,后来检查出错误的原因,是因为在提取出黑白图像后,没有对黑白图像做矢量量化,还是在原有的彩色图像基础上做的,所以结果可能是对RGB三色或者是YCbCr做的矢量量化,出现了3个图像。因为是第一次用Matlab对图像做矢量量化,很多的原理和概念还不是很清楚,以后在学习中还需努力学习。

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功