ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:501.79KB ,
资源ID:18927011      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18927011.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(多级树集合分裂SPIHT算法的过程详解与Matlab实现Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

多级树集合分裂SPIHT算法的过程详解与Matlab实现Word文档下载推荐.docx

1、最低频子带LL_N中的系数和最高频子带中的系数没有孩子。设X是一个小波系数坐标集:X=| (r,c) |,对于正整数n,定义函数Sn (X) 如下:ifmax| Cr,c |= 2 nthenSn (X) = 1elseSn (X) = 0如果Sn (X) = 1,则坐标集X关于阈值2 n 是重要的,否则是不重要的。2、分集规则首先引入下面四个集合符号: (1)O (r,c) 节点(r,c)所有孩子的集合; (2)D (r,c) 节点(r,c)所有子孙的集合(包括孩子); (3)L (r,c) 节点(r,c)所有非直系子孙的集合(即不包括孩子); L (r,c) = D (r,c) O (r,

2、c)(4)H 所有树根的坐标集。(对N级小波分解,H就是LL_N、HL_N、LH_N和HH_N中所有系数的坐标构成的集合)根据SPIHT算法树结构的特点,除了LL_N、LL_1、HL_1、LH_1和HH_1之外,对任意系数的坐标(r,c),都有:(由于Matlab矩阵下标起始值为1,公式作了相应调整)O (r,c) = (2*r-1,2*c-1), (2*r-1,2*c), (2*r,2*c-1), (2*r,2*c) SPIHT算法的分集规则如下: (1) 初始坐标集为(r,c) | (r,c)H 、D(r,c) | (r,c)H 。 (2) 若D(r,c) 关于当前阈值是重要的,则D(r,

3、c) 分裂成 L (r,c) 和O (r,c)。 (3) 若L (r,c) 关于当前阈值是重要的,则L (r,c) 分裂成 4 个集合 D (rO,cO), (rO,cO) O (r,c)。 3、有序表 SPIHT算法引入了三个有序表来存放重要信息: (1) LSP 重要系数表; (2)LIP 不重要系数表; (3)LIS 不重要子集表。 这三个表中,每个表项都使用坐标(r,c)来标识。在LIP和LSP中,坐标(r,c)表示单个小波系数;而LIS中,坐标(r,c)代表两种系数集,即D(r,c) 或L (r,c),分别称为D型表项、L型表项,在Matlab实现时,用一个新的列表 LisFlag

4、来标识 LIS 中各个表项的类型,LisFlag的元素有D、L两种字符。上一篇文章我们讨论了SPIHT算法与EZW算法的关系,介绍了SPIHT算法的树结构、分集规则和有序表的构建。在此基础上,我们接下来讨论算法的编码原理。下文给出了比较详细的数学描述,吃透了这一过程,就比较容易写出程序代码了。SPIHT算法的编码过程如下:(1)初始化 输出初始阈值T的指数 N = floor ( log2 ( max| Cr,c | ) ) (Matlab函数 floor( num ) 给出不大于数值 num 的最大整数) 定义: LSP 为空集 LIP = (r,c) | (r,c)H LIS = D(r,

5、c) | (r,c)H 且(r,c)具有非零子孙 初始的LIS中各表项类型均为D, LIS 和 LIP 中 (r,c) 的排列顺序与EZW算法零树结构的扫描顺序相同(即按从上到下、从左到右的“Z”型次序排列)。(2)排序扫描 1)扫描LIP队列 对LIP队列的每个表项 (r,c) : 输出SnOut(r,c)(函数SnOut判断(r,c)的重要性); 如果SnOut(r,c)= 1,则向排序位流Sn输出1和(r,c)的符号位(由1、0表示),然后将(r,c)从LIP队列中删除,添加到LSP队列的尾部。 如果SnOut(r,c)= 0,则向排序位流Sn输出0。 2)扫描LIS队列对LIS队列的每

6、个表项 (r,c) : 如果(r,c)是D型表项 输出SnOut(D (r,c); * 如果SnOut(D (r,c)= 1 向排序位流Sn输出1; 对每个(rO,cO) O (r,c) 输出SnOut(rO,cO) * 如果SnOut(rO,cO)= 1,则向排序位流Sn输出1和(rO,cO)的符号位,将(rO,cO)添加到LSP的尾部; * 如果SnOut(rO,cO)= 0,则向排序位流Sn输出0,将(rO,cO)添加到LIP的尾部。 判断L (r,c) 是否为空集 如果L (r,c) 非空,则将(r,c)作为L型表项添加到LIS的尾部; 如果L (r,c)为空集,则将D型表项(r,c)

7、从LIS中删除。 * 如果SnOut(D (r,c)= 0 则向排序位流Sn输出0。 如果(r,c)是L型表项 输出SnOut(L (r,c); * 如果SnOut(L (r,c)= 1,则向排序位流Sn输出1,然后将(r,c)的4个孩子(rO,cO)作为D型表项依次添加到LIS的尾部,将L型表项(r,c)从LIS中删除; * 如果SnOut(L (r,c)= 0,则向排序位流Sn输出0。(3)精细扫描 将上一级扫描后的LSP列表记为LSP_Old,对于(r,c) LSP_Old , 将系数Cr,c的绝对值转换为二进制表示Br,c; 输出Br,c中第N个最重要的位(即对应于2N权位处的符号1或

8、0)到精细位流Rn。(4)更新阈值指数 将阈值指数N减至N1,返回到步骤(2)进行下一级编码扫描。上一篇文章已经详细介绍了SPIHT算法的编码过程,接下来有关编码和解码的部分就直接把代码写出来啦,我的代码里有详细的中文注释,基本上把程序的每个步骤都作了说明,呵呵,利人也利己!1、首先给出编码的主程序function T,SnList,RnList,ini_LSP,ini_LIP,ini_LIS,ini_LisFlag=spihtcoding(DecIm,imDim,codeDim)% 函数 SPIHTCODING() 是SPIHT算法的编码主程序% 输入参数:DecIm 小波分解系数矩阵;%

9、imDim 小波分解层数; codeDim 编码级数。% 输出参数:T 初始阈值,T=2N,N=floor(log2(max|c(i,j)|),c(i,j)为小波系数矩阵的元素 SnList 排序扫描输出位流 RnList 精细扫描输出位流 ini_L* 初始系数(集合)表 LSP:重要系数表 LIP:不重要系数表 LIS:不重要子集表,其中的表项是D型或L型表项的树根点 LisFlag:LIS中各表项的类型,包括D型和L型两种global Mat rMat cMat% Mat是输入的小波分解系数矩阵,作为全局变量,在编码的相关程序中使用% rMat、cMat是Mat的行、列数,作为全局变量,

10、在编码、解码的相关程序中使用%-% - Threshold - %Mat=DecIm;MaxMat=max(max(abs(Mat);N=floor(log2(MaxMat);T=2N;% 公式:N=floor(log2(max|c(i,j)|),c(i,j)为小波系数矩阵的元素%-% - Output Intialization - %SnList=;RnList=;ini_LSP=;ini_LIP=coef_H(imDim);rlip=size(ini_LIP,1);ini_LIS=ini_LIP(rlip/4+1:end,:);rlis=size(ini_LIS,1);ini_LisFl

11、ag(1:rlis)=D;% ini_LSP:扫描开始前无重要系数,故LSP=;% ini_LIP:所有树根的坐标集,对于N层小波分解,LIP是LL_N,LH_N,HL_N,HH_N 所有 系数的坐标集合; 函数 COEF_H() 用于计算树根坐标集 H% ini_LIS:初始时,LIS是LH_N,HL_N,HH_N 所有系数的坐标集合;在SPIHT算法中, LL_N 没有孩子。% ini_LisFlag:初始时,LIS列表的表项均为D型。%-% - Coding Input Initialization - %LSP=ini_LSP;LIP=ini_LIP;LIS=ini_LIS;LisFl

12、ag=ini_LisFlag;% 将待输出的各项列表存入相应的编码工作列表%-% - Coding Loop - %for d=1:codeDim %-% % - Coding Initialization - % Sn=; LSP_Old=LSP; % 每级编码产生的Sn都是独立的,故Sn初始化为空表 % 列表LSP_Old用于存储上级编码产生的重要系数列表LSP,作为本级精细扫描的输入 %-% % - Sorting Pass - % % - LIP Scan - % %-% Sn,LSP,LIP=lip_scan(Sn,N,LSP,LIP); % 检查LIP表的小波系数,更新列表LIP、

13、LSP和排序位流 Sn %-% % - LIS Scan - % LSP,LIP,LIS,LisFlag,Sn,N=lis_scan(N,Sn,LSP,LIP,LIS,LisFlag); % 这里,作为输出的N比作为输入的N少1,即 out_N=in_N-1 % 各项输出参数均作为下一编码级的输入 %-% % - Refinement Pass - % Rn=refinement(N+1,LSP_Old); % 精细扫描是在当前阈值T=2N下,扫描上一编码级产生的LSP,故输入为(N+1,LSP_Old), % 输出为精细位流 Rn %-% % - Output Dataflow - % Sn

14、List=SnList,Sn,7; RnList=RnList,Rn,7; % 数字7作为区分符,区分不同编码级的Rn、Sn位流end 编码主程序中调用到的子程序有:COEF_H() :用于计算树根坐标集 H ,生成初始的LIP队列;LIP_SCAN() :检查LIP表的各个表项是否重要,更新列表LIP、LSP和排序位流 Sn ;LIS_SCAN() :检查LIS表的各个表项是否重要,更新列表LIP、LSP、LIS、LisFlag和排序位流 Sn ;REFINEMENT() :精细扫描编码程序,输出精细位流 Rn 。(1)下面是计算树根坐标集 H 的程序function lp=coef_H(i

15、mDim)% 函数 COEF_H() 根据矩阵的行列数rMat、cMat和小波分解层数imDim来计算树根坐标集 HimDim 小波分解层数,也可记作 Nlp rMat*cMat矩阵经N层分解后,LL_N,LH_N,HL_N,HH_N 所有系数的坐标集合global rMat cMatrow=rMat/2(imDim-1);col=cMat/2(imDim-1);% row、col是 LL_N,LH_N,HL_N,HH_N 组成的矩阵的行、列数lp=listorder(row,col,1,1);% 因为 LIP 和 LIS 中元素(r,c)的排列顺序与 EZW 零树结构的扫描顺序相同% 直接调

16、用函数 LISTORDER() 即可获得按EZW扫描顺序排列的LIP列表(2)这里调用了函数 LISTORDER() 来获取按EZW扫描顺序排列的LIP列表,以下是该函数的程序代码:function lsorder=listorder(mr,mc,pr,pc)% 函数 LISTORDER() 生成按Z型递归结构排列的坐标列表% 函数递归原理:对一个mr*mc的矩阵,其左上角元素的坐标为(pr,pc);首先将矩阵按“田”% 字型分成四个对等的子矩阵,每个子矩阵的行、列数均为mr/2、mc/2,左上角元素的坐标% 从上到下、从左到右分别为(pr,pc)、(pr,pc+mc/2)、(pr+mr/2,

17、pc)、(pr+mr/2,pc+mc/2)。% 把每个子矩阵再分裂成四个矩阵,如此递归分裂下去,直至最小矩阵的行列数等于2,获取最小% 矩阵的四个点的坐标值,然后逐步向上回溯,即可得到按Z型递归结构排列的坐标列表。lso=pr,pc;pr,pc+mc/2;pr+mr/2,pc;pr+mr/2,pc+mc/2;% 列表lso是父矩阵分裂成四个子矩阵后,各子矩阵左上角元素坐标的集合mr=mr/2;mc=mc/2;% 子矩阵的行列数是父矩阵的一半lm1=;lm2=;lm3=;lm4=;if (mr1)&(mc1)% 按Z型结构递归 ls1=listorder(mr,mc,lso(1,1),lso(1

18、,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;lsorder=lso;lm1;lm2;lm3;lm4;% 四个子矩阵结束递归回溯到父矩阵时,列表lsorder的头四个坐标值为列表lso的元素% 这四个坐标值与后面的各个子矩阵的坐标元素有重叠,故需消去% 当函数输出的列表长度length(lsorde

19、r)与矩阵的元素个数mr*mc*4不相等时,% 就说明有坐标重叠发生。len=length(lsorder);lsorder=lsorder(len-mr*mc*4+1:len,:本文给出SPIHT编码的精细扫描程序,其中包括一个能够将带小数的十进制数转换为二进制表示的函数,这个转换函数可以实现任意精度的二进制转换,特别是将小数部分转换为二进制表示。希望对有需要的朋友有所帮助。下一篇文章将给出SPIHT的解码程序。请关注后续文章,欢迎 Email 联系交流。4、精细扫描程序function Rn=refinement(N,LSP_Old)% 函数 REFINEMENT()为精细编码程序,对上一级编码产生的重要系数列表LSP_Old,读取每个% 表项相应小波系数绝对值的二进制表示,输出其中第N个重要的位,即相应于 2N 处的码数N 本级编码阈值的指数 LSP_Old 上一级编码产生的重要系数列表Rn 精细扫描输出位流global Mat

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1