EZW算法的过程详解和Matlab代码
更新时间:2023-11-13 13:00:01 阅读量: 教育文库 文档下载
- EZW算法推荐度:
- 相关推荐
EZW算法的过程详解和Matlab代码(1)构建扫描次序表(修正小波树结构) 我们以一幅16*16的Lena局部图像经过3级小波分解后的小波数据为例详细的说明EZW算法的编解码过程,并给出相应的Matlab代码。原始图像如下
分解后的小波图像数据为:
一、在开始编码之前,首先要求出初始阈值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代码(2)编码过程 首先根据实际需要确定扫描次数D=codeDim,然后进行D次主扫描和辅扫描。 1、 初始化
首先获取扫描次序表scanlist,表中每行的数字依次是该元素的(1)扫描序号、(2)对应于数据矩阵中位置的行号r、(3)对应于数据矩阵中位置的列号c、(4)值Mat(r,c),即
scanlist (i) = [ i, r, c, Mat(r,c) ]
编码扫描的对象就是次序表scanlist,而非数据矩阵Mat。然后构建初始符号矩阵flagMat,其中每个元素均为字符“Z”。 2、 主扫描
在第d次(1<= d <=codeDim)扫描中,输入阈值为T(d),首先依次对次序表的每一行scanlist(i)按照如下步骤扫描:
(1) 如果上一次扫描得到的flagMat中,处于位置(r,c)的符号为“O”,则表示相应的Mat(r,c)是重要的,不需要通过本次扫描再次编码,故作跳过处理。
(2) 将scanlist(i,4)(即Mat(r,c))的绝对值与阈值T(d) 比较,如果是重要的系数,则令flagMat(r,c)的值为P或N,并存入主扫描表scancode中,并将Mat(r,c)的值以及相应的行、列数(r,c)存入重要数列表imptvalue中,将符号P或N存入重要数符号列表imptflag中。
(3) 如果是不重要的系数,则首先检查flagMat(r,c),若是符号“X”,则表示这个点是不重要的,作跳过处理不再扫描。
(4) 如果点(r,c)处于第一分解级,即r>row/2或c>col/2,没有子孙系数,且其系数是不重要的,则该点flagMat的符号为Z,存入主扫描表scancode中。
(5) 如果点(r,c)满足r 至此,扫描结束。然后,将扫描后得到的符号矩阵flagMat转存到scanflag中,再将flagMat中的字符P、N都置换为O,字符X和T都置换为Z,使得flagMat的元素只有字符O、Z两种,作为输出到下一次扫描中使用。 function [imptvalue,imptflag,scancode,scanflag,flaglist]=mainscan(Mat,scanlist,flaglist,imptvalue,imptflag,threshold) global row col scancode=[]; for i=1:row*col if flaglist(scanlist(i,2),scanlist(i,3))=='O' continue; elseif abs(scanlist(i,4))>=threshold if scanlist(i,4)>=0
正在阅读:
EZW算法的过程详解和Matlab代码11-13
土地租赁合同(广告牌安装)05-28
精品2019学年七年级地理上学期第一次月考试题 粤教版(新版)人教版09-11
2021年转正述职报告范文合集5篇04-27
物联网就在你我身边-5G考试题 - 图文09-27
测量学试题库及答案02-26
教师见习期培训心得体会03-07
难忘的迎新活动作文400字06-17
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 算法
- 详解
- 过程
- 代码
- Matlab
- EZW
- 生态文明与生态伦理综述
- 毕业论文题目征集表-中山大学药学院
- 2018年普通高等学校招生全国统一考试(海南卷)地理
- 关于贯彻落实市政府办公厅《关于印发淄博市房地产开发项目竣工综合验收备案管理办法的通知》的通知
- 六年级数学1.3解稍复杂的方程练习题及答案
- 药品批发企业GSP认证材料
- 青岛版五年级下册分数的意义和性质测试题(三)
- 2019年消化系统用药市场现状调研分析及发展前景报告目录
- 幼儿文学课教案
- 高级软件测试工程师简历
- 教学大纲 放射肿瘤学
- 道路运输驾驶员继续教育多媒体课程-货物运输1
- 周兴福:名儒重臣周洪谟之研究 2doc
- 全国大学生工程训练综合能力竞赛
- 14TB精品儿童资源目录二(英文资源)
- 《数字电子技术基础》习题答案(王毓银)版的
- Xx县水库移民后期扶持及经济发展等项目项目监理实施细则(含基本农田水利配套建设)
- 重庆市设计概算编制规定
- 哈尔滨工业大学干部任前公示
- 道路旅客运输及客运站管理规定考核试题