矢量量化器的设计算法及matlab实现,基于MATLAB实现对图像的矢量量化

本文详细介绍了基于MATLAB实现图像矢量量化的实验过程,包括使用LBG算法建立码表和最佳匹配方法。通过对比不同码书大小(512、256、1024)下的重构图像,探讨了码字大小和码书大小对图像质量的影响,发现码字大小是影响图像清晰度的关键因素。
摘要由CSDN通过智能技术生成

《基于MATLAB实现对图像的矢量量化》由会员分享,可在线阅读,更多相关《基于MATLAB实现对图像的矢量量化(11页珍藏版)》请在人人文库网上搜索。

1、题目:基于MATLAB实现对图像的矢量量化姓 名: 学 号: 系 别: 电子信息工程 专 业: 电子科学与技术 2014年 10月 11日基于MATLAB实现对图像的矢量量化一、实验要求:1.对于图像的数据可以只选用灰度图像;2.实现对四个像素值的矢量量化,自己选择如何建立码表的方法及最佳匹配的方法;3.比较原始图像和重构图像的效果;二、实验内容:1.实验素材:在本次的对图像矢量量化的过程中,选取了琳娜(Linna)图像,256256,12KB,如图2.1所示:图2.12.码表的建立和最佳的匹配方法:本次实验中选取的码表设计方法为LBG算法,该算法基于最佳矢量量化器设计的最佳划分和最佳码书这两。

2、个必要条件,且是Lloyd算法在矢量空间的推广,其特点为物理概念清晰、算法理论严密及算法实现容易。设训练矢量集为,待产生的码书为,其中,则码书设计过程就是需求把训练矢量集分成个子集的一种最佳聚类方案,而子集的质心矢量作为码字。假设平方误差测度用来表征训练矢量和码字之间的失真,即:则码书设计的准则可用下列数学形式表达:最小化 约束条件 ,其中为矩阵,其元素满足:矩阵可看作训练矢量的聚类结果。根据,可计算码字:其中 代表子集中训练矢量的数目,或者说是矩阵第行中非零元素的数目。针对训练矢量集为,其LBG算法的具体步骤如下,流程图如图2.2所示:图2.2步骤1:给定初始码书,令迭代次数,平均失真,给定。

3、相对误差门限。步骤2:用码书中的各码字作为质心,根据最佳划分原则把训练矢量集划分为个胞腔,满足步骤3:计算平均失真判断相对误差是否满足若满足,则停止算法,码书就是所求的码书。否则,转步骤4。步骤4:根据最佳码书条件,计算各胞腔的质心,即由这个新质心形成新码书,置,转步骤2。3.实验方法:在对同一幅琳娜(Linna)图像进行矢量量化时,分别采用在不同的码书条件下:512、256、1024观察比较相应的结果。三、程序代码clear all; I=imread(C:linna.JPG);g=rgb2gray(I);imwrite(g,C:UsersJohnson_LiDesktopMr.Li.JPG。

4、,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);for i=1:mfor j=1:ndata1(i-1)*n+j)=data。

5、(i,j);endendM1=floor(m*n/siz_word);r=mod(m*n,siz_word);if r0M1=M1+1;enddata2=zeros(M1,siz_word);l=1;A=zeros(siz_word,1);r=1;for i=1:m*nA(r)=data1(i);if r=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);for i=1:siz_book*siz_w。

6、ordA(r)=data1(i);if r=siz_wordcode_book(l,:)=A;l=l+1;r=1;elser=r+1;endendMIU=zeros(M1,siz_book); t=1;while t=1for i=1:M1B=zeros(siz_word,1);B=data2(i,:);A=zeros(siz_word,1);A=code_book(1,:);tep=0.0;for l=1:siz_wordtep=tep+(A(l)-B(l)2;endr=1;for j=2:siz_bookA=code_book(j,:);temp=sum(A-B).2);if temp0c。

7、ode_book1(j,l)=code_book1(j,l)/tep;elsecode_book1(j,l)=0.0;endendendtep=0.0;for j=1:siz_bookfor l=1:siz_wordtep=tep+(code_book1(j,l)-code_book(j,l)2;endendif tep/siz_book0.t=0;endcode_book=code_book1;end%编码后图像恢复过程data3=zeros(M1,siz_word);for i=1:M1for j=1:siz_bookif MIU(i,j)=1t=j;endenddata3(i,:)=co。

8、de_book(t,:);enddata5=zeros(m,n);for i=1:mfor j=1:ntep=(i-1)*n+j;i1=floor(tep/siz_word);if i1=0i1=1;endj1=mod(tep,siz_word);if j1=0j1=siz_word;end data5(i,j)=floor(data3(i1,j1)*255);endendfigure(2)imshow(uint8(data5); %显示恢复图像title(矢量量化编码后恢复的图像)四、运行结果及分析:图4.1图4.1显示了提取的琳娜的亮度图像,即黑白图像以及图像直方图的显示;图4.2图4.2。

9、中所示,在码字为4,码书为512的条件下矢量量化后的重构图像;图4.3图4.3中所示,在码字为4,码书为256的条件下矢量量化后的重构图像,图片明显比码书为512时模糊,因为此时所分的区间更大,导致图片解码时不精确度加大;图4.4图4.4中所示,在码字为4,码书为1024的条件下矢量量化后的重构图像,与siz_book=512时的矢量量化后的图片变换很小,这说明影响图片质量的主要因素不是码书的大小了,而是码字的大小,或者其他的因素,导致图片解码后的不够清晰。五、总结首先,在这次的实验中出现错误,就是刚开始的时候在最后的重构图像中,一张图片上会出现3个图像,后来检查出错误的原因,是因为在提取出黑白图像后,没有对黑白图像做矢量量化,还是在原有的彩色图像基础上做的,所以结果可能是对RGB三色或者是YCbCr做的矢量量化,出现了3个图像。因为是第一次用Matlab对图像做矢量量化,很多的原理和概念还不是很清楚,以后在学习中还需努力学习。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值