分解后的小波图像数据为:
一、在开始编码之前,首先要求出初始阈值T1:
MaxDecIm=max(max(abs(DecIm)));
T=zeros(1,codeDim);
T(1)=2^flor(log2(MaxDecIm));
二、然后是建立小波树结构,构建扫描次序表。这个扫描次序表非常重要,后面的编码、解码过程都要按照扫描次序表逐个处理数据矩阵的各个元素。构建过程如下:用(r,c)表示数据矩阵上各元素的位置。row、col作为全局变量,表示数据矩阵的行、列数。
1、小波树结构的特点:
(1)对于LL-N低频子带的点(r,c),有3个孩子:(r,c+W)、(r+H,c)和(r+H,c+W),其中W、H分别是LL-N子带的宽和高;
(2)第N~2高频子带(LH、HL、HH)的点都有4个孩子,即: tp=[2*r-1,2*c-1;2*r-1,2*c;2*r,2*c-1;2*r,2*c];
(3)第1高频子带的点没有孩子。根据小波树的这个特点,可编写如下“小波树”函数treeMat(),输入矩阵内任一点的位置(r,c),给出该点的子孙列表cp 。
function cp=treeMat(r,c) %这个函数是一个递归函数
global row col dim % dim是小波分解级数
HLL=row/2^dim;
WLL=col/2^dim;
if (r<=HLL)&&(c<=WLL)
tp1=[r,c+WLL;r+HLL,c;r+HLL,c+WLL];
cP=[tp1;treeMat(r,c+WLL);treeMat(r+HLL,c);treeMat(r+HLL,c+WLL)];
elseif (r>row/2)||(c>col/2)
cP=[];
else
tp=[2*r-1,2*c-1;2*r-1,2*c;2*r,2*c-1;2*r,2*c];
tm1=[];tm2=[];tm3=[];tm4=[];
if (tp(4,1)<=row/2)&&(tp(4,2)<=col/2)
t1=treeMat(tp(1,1),tp(1,2));
tm1=[tm1;t1];
t2=treeMat(tp(2,1),tp(2,2));
tm2=[tm2;t2];
t3=treeMat(tp(3,1),tp(3,2));
tm3=[tm3;t3];
t4=treeMat(tp(4,1),tp(4,2));
tm4=[tm4;t4];
end
cP=[tp;tm1;tm2;tm3;tm4];
end
示例,当row=8,col=8,dim=2时,LL-N低频子带的点(1,1) (1,2) (2,1) (2,2) 的子孙分布如下:
由这个小波树列表tree_p,我们可以进一步构建函数childMat(),给出矩阵数据Mat和矩阵任一点的位置(r,c),返回该点的子孙数据列表chMat。
function chMat=childMat(Mat,chRows,chCols)
global row col dim
chPoint=treeMat(chRows,chCols);
chMat=[];
[mRows,mCols]=size(chPoint);
for iRows=1:mRows
chMat=[chMat;chPoint(iRows,1),chPoint(iRows,2),Mat(chPoint(iRows,1),chPoint(iRows,2))];
end
2、构建扫描次序表
本文EZW算法的扫描次序为Morton式,其特征是从(1,1)开始,每4个点组成一个“Z”型扫描单元,从微观到宏观上都是严格的“Z”型结构,可以用递归方法来构建扫描次序表。扫描次序表scanlist由两部分组成,一个是将数据矩阵Mat按照morton扫描次序转换成数据列表matlist,一个是按照扫描次序组成的矩阵各点位置的(r,c)列表lsorder。
function scanlist=morton(Mat)
global row col
matlist=mat2list(Mat);
scanorder=listorder(row,col,1,1);
scanlist=[];
for i=1:row*col
scanlist=[scanlist;i scanorder(i,:) matlist(i)];
end
function mls=mat2list(Mat) % 该函数为递归函数
[r,c]=size(Mat);
if (r==2)&&(c==2)
mls=[Mat(1,1);Mat(1,2);Mat(2,1);Mat(2,2)];
else
M1=Mat(1:r/2,1:c/2);
M2=Mat(1:r/2,c/2+1:c);
M3=Mat(r/2+1:r,1:c/2);
M4=Mat(r/2+1:r,c/2+1:c);
lt1=mat2list(M1);
lt2=mat2list(M2);
lt3=mat2list(M3);
lt4=mat2list(M4);
mls=[lt1;lt2;lt3;lt4];
end
function lsorder=listorder(mr,mc,pr,pc) % 该函数为递归函数
lso=[pr,pc;pr,pc+mc/2;pr+mr/2,pc;pr+mr/2,pc+mc/2];
mr=mr/2;mc=mc/2;
lm1=[];lm2=[];lm3=[];lm4=[];
if (mr>1)&&(mc>1)
ls1=listorder(mr,mc,lso(1,1),lso(1,2));
lm1=[lm1;ls1];
ls2=listorder(mr,mc,lso(2,1),lso(2,2));
lm2=[lm2;ls2];
ls3=listorder(mr,mc,lso(3,1),lso(3,2));
lm3=[lm3;ls3];
ls4=listorder(mr,mc,lso(4,1),lso(4,2));
lm4=[lm4;ls4];
end
lsorder=[lso;lm1;lm2;lm3;lm4];
len=length(lsorder);
lsorder=lsorder(len-mr*mc*4+1:len,1:2);
分享到:
相关推荐
详细讲述了嵌入式小波零树(EZW)算法的原理和过程,并给出了matlab代码。
【老生谈算法】EZW算法的过程详解和Matlab代码.docx
图像压缩编码算法EZW算法的Matlab原代码
这是使用MATLAB语言实现小波分析在图像压缩中应用的一个算法--"嵌入式小波零树编码算法(EZW)"的一个带有界面的小程序
用MATLAB实现EZW算法,包括小波分解和重构,这里用二次分解
【老生谈算法】多级树集合分裂(SPIHT)算法的过程详解与Matlab实现.docx
EZW图像感知编码算法的Matlab源码,可以实现图像编解码,lena图像
数字图像压缩,基于小波变换的数字图像压缩编码,采用嵌入式零树ezw的编码方法的matlab程序
该压缩包为数字图像处理中的嵌入式零树小波算法的MATLAB源代码,上机调试过,可完美运行。
EZW Matlab EZW Matlab EZW_Matlab
提供书中matlab源代码。方便练习,下面是书中摘要,摘抄于此,供大家理解 本书以MATLAB R2011a为平台编写。从信号处理的角度阐述小波分析的基本原理及其应用。从信号时频联合分析引入小波变换, 将小波 变换工具箱的...
EZW的算法实现及算法理解,基本原理,方法步骤,内容很详细的解释,算法实现编程
matlab实现EZW压缩并重构。小波课程图像处理课程基本算压缩方法实现。
在EZW算法的基础上提出了一种适合大型图像压缩的改进算法,该算法首先将巨型图像分解为若干幅小的图像块,对这些小图像子块进行小波变换后,先用EZW对其进行编码,再用Huffman技术对其进行二次编码。该方法既能够...
C实现EZW编辑器实例代码 C实现EZW编辑器实例代码,该源... LIST.H LIST.C - 零树结构定义和操作 UNEZW.C - EZW解码器 …… 这里,读者重点要掌握的是EZW.C和LIST.C中的内容,充分理解零树的概念。
EZW 算法实现 包括对图像的编码和解码
嵌入式零树小波编码算法,很经典的一个算法,这个文档是英文版的。
EZW压缩.zipEZW压缩MATLAB实现
一篇介绍嵌入式系统图像压缩编码的论文 结合符号编码和零量化系数估计的EZW算法
shapiro在1993年提出了改进的零树编码算法以适应这种孤立零点的情况,称为嵌入零树小波编码算法,简称位EZW算法。