多级树集合分裂(SPIHT)算法的过程详解和Matlab实现(4)编码过程——排序扫描

本文详细介绍了SPIHT算法的LIP和LIS队列扫描过程,并提供了相应的Matlab实现代码,涉及小波分解系数矩阵、重要性判断等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 本文给出SPIHT编码的排序扫描代码,排序扫描分为LIP队列扫描和LIS队列扫描两个步骤,其中LIS队列扫描较为复杂,在编程时容易出现错误,要倍加注意。

2、LIP队列扫描程序

function [Sn,LSP,LIP]=lip_scan(Sn,N,LSP,LIP)
% 函数 LIP_SCAN() 检查LIP表的各个表项是否重要,更新列表LIP、LSP和排序位流 Sn
% 输入参数:Sn —— 本级编码排序位流,为空表
%                     N —— 本级编码阈值的指数
%                     LSP —— 上一级编码生成的重要系数列表
%                     LIP —— 上一级编码生成的不重要系数列表
% 输出参数:Sn —— 对上一级编码生成的LIP列表扫描后更新的排序位流
%                     LSP —— 对上一级编码生成的LIP列表扫描后更新的重要系数列表
%                     LIP —— 经本级LIP扫描处理后更新的不重要系数列表

global Mat
% Mat是输入的小波分解系数矩阵,作为全局变量,在编码的相关程序中使用

rlip=size(LIP,1);
% r 是指向 LIP 当前读入表项位置的指针
r=1;
% 由于循环过程中列表 LIP 的表长会变化,不适合用 for 循环,故采用 while 循环
while r<=rlip
% 读入当前表项的坐标值
    rN=LIP(r,1);
    cN=LIP(r,2);
% 调用 SNOUT() 函数来判断该表项是否重要
    if SnOut(LIP(r,:),N)
        % 若重要,则输入‘1’到 Sn
        Sn=[Sn,1];
        % 输入正负符号‘1’或‘0’到 Sn
        if Mat(rN,cN)>=0
            Sn=[Sn,1];
        else
            Sn=[Sn,0];
        end
        % 将该表项添加到重要系数列表 LSP
        LSP=[LSP;LIP(r,:)];
        % 将该表项从 LIP 中删除
        LIP(r,:)=[];
    else
        % 若不重要,则输入‘0’到 Sn
        Sn=[Sn,0];
        % 将指针指向下一个表项
        r=r+1;
    end
    % 判断当前 LIP 的表长
    rlip=size(LIP,1);
end

3、LIS队列扫描程序

function [LSP,LIP,LIS,LisFlag,Sn,N]=lis_scan(N,Sn,LSP,LIP,LIS,LisFlag)
% 函数 LIS_SCAN() 检查LIS表的各个表项是否重要,更新列表LIP、LSP、LIS、LisFlag和排序位流 Sn
% 输入参数:N —— 本级编码阈值的指数
%                     Sn —— 本级编码排序位流,为空表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值