SPIHT算法.rar

  • feng京
    了解作者
  • matlab
    开发工具
  • 5KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 0
    下载次数
  • 2021-04-03 17:59
    上传日期
多级树集合分裂(SPIHT)算法的过程详解与Matlab实现实例演示
SPIHT算法.rar
  • SPIHT算法
  • Sn_Out.m
    193B
  • myrefinement.m
    628B
  • SpihtCode.m
    1.9KB
  • mylip_scan.m
    713B
  • mylis_scan.m
    3.8KB
  • Untitled.m
    1.3KB
  • tree_Mat.m
    492B
  • coeff_DOL.m
    767B
内容介绍
function [LSP,LIP,LIS,LisFlag,Sn,N] = mylis_scan(data,data_num,data_dim,N,Sn,LSP,LIP,LIS,LisFlag) rlis = size(LIS,2); % ls 是指向 LIS 当前表项位置的指针,初始位置为1 ls = 1; while ls <= rlis % 读入当前 LIS 表项的类型 switch LisFlag(ls) % ‘D’类表项,包含孩子和非直系子孙 case 'D' % 读入该表项的坐标值 rP = LIS(ls); % 生成‘D’型子孙树 chD = coeff_DOL(data_num,data_dim,rP,'D'); % 判断该子孙树是否重要 isImt = Sn_Out(data,chD,N); if isImt % 如果该子孙树重要,就输入‘1’到 Sn Sn = [Sn,1]; % 生成该表项的孩子树 chO = coeff_DOL(data_num,data_dim,rP,'O'); % 分别判断每个孩子的重要性 for r=1:2 % 判断该孩子的重要性和正负符号 isImt = Sn_Out(data,chO(r),N); if isImt % 如果重要,就输入‘1’和正负标志到 Sn Sn = [Sn,1]; if data(chO(r)) >= 0 Sn = [Sn,1]; else Sn = [Sn,0]; end % 将该孩子添加到重要系数列表 LSP LSP = [LSP,chO(r)]; else % 如果不重要,就输入‘0’到 Sn Sn = [Sn,0]; % 将该孩子添加到不重要系数列表 LIP % 本级阈值下不重要的系数在下一级编码中可能是重要的 LIP = [LIP,chO(r)]; end end % 生成该表项的非直系子孙树 chL = coeff_DOL(data_num,data_dim,rP,'L'); if ~isempty(chL) % 如果‘L’型树非空,则将该表项添加到列表 LIS 的尾端等待扫描 LIS = [LIS,LIS(ls)]; % 表项类型更改为‘L’型 LisFlag = [LisFlag,'L']; % 至此,该表项的‘D’型LIS扫描结束,在LIS中删除该项及其类型符 LIS(ls) = []; LisFlag(ls) = []; else % 如果‘L’型树为空集 % 则该表项的‘D’型LIS扫描结束,在LIS中删除该项及其类型符 LIS(ls) = []; LisFlag(ls) = []; end else % 如果该表项的‘D’型子孙树不重要,就输入‘0’到 Sn Sn = [Sn,0]; % 将指针指向下一个 LIS 表项 ls = ls+1; end % 更新当前 LIS 的表长,转入下一表项的扫描 rlis = size(LIS,2); case 'L' % 对‘L’类表项,不需判断孩子的重要性 % 读入该表项的坐标值 rP = LIS(ls); % 生成‘L’型子孙树 chL = coeff_DOL(data_num,data_dim,rP,'L'); % 判断该子孙树是否重要 isImt = Sn_Out(data,chL,N); if isImt % 如果该子孙树重要,就输入‘1’到 Sn Sn = [Sn,1]; % 生成该表项的孩子树 chO = coeff_DOL(data_num,data_dim,rP,'O'); % 将该‘L’类表项从 LIS 中删除 LIS(ls) = []; LisFlag(ls) = []; % 将表项的四个孩子添加到 LIS 的结尾,标记为‘D’类表项 LIS = [LIS,chO(1:2)]; LisFlag(end+1:end+2) = 'D'; else % 如果该子孙树是不重要的,就输入‘0’到 Sn Sn = [Sn,0]; % 将指针指向下一个 LIS 表项 ls = ls+1; end % 更新当前 LIS 的表长,转入下一表项的扫描 rlis = size(LIS,2); end end % 对 LIS 的扫描结束,将本级阈值的指数减1,准备进入下一级编码 N=N-1;
评论
    相关推荐