多级树集合分裂(SPIHT)算法的过程详解与Matlab实现(7)解码过程——扫描解码


提示:任何排序算法的执行路径都是使用分支点的比较结果进行定义的。如果解码器和编码器使用相同的排序算法,则对于编码器输入的系数比较结果,解码器通过执行相同的路径就可获得排序信息。

所以,只需将编码器数学表述中的“输出”改为“输入”,解码器即可恢复数据的排序信息;在恢复数据排序信息的同时,解码器还要负责图像的重构,对于确认恢复的重要系数,通过排序扫描和精细扫描两个步骤更新系数的量化值,逐步提高逼近精度和重构图像的质量。

global rMat cMat
% rMat、cMat是Mat的行、列数,作为全局变量,在编码、解码的相关程序中使用

% 读入当前 LIS 的表长
rlis=size(LIS,1);
% ls 是指向 LIS 当前表项位置的指针,初始位置为1
ls=1;
while ls<=rlis
    % 读入当前 LIS 表项的类型
    switch LisFlag(ls)
        % ‘D’类表项,包含孩子和非直系子孙
        case 'D'
            % 读入该表项的坐标值
            rP=LIS(ls,1);
            cP=LIS(ls,2);
            % 根据 Sn 判断该表项‘D’型子孙树是否重要
            if Sn(1)==1
                % 每次判断都是读入 Sn 的首位数,判断后立即删除这一位数
                Sn(1)=[];
                % 生成该表项的孩子树
                chO=coef_DOL(rP,cP,'O');
                % 分别判断每个孩子的重要性
                for r=1:4
                    % 读入孩子的坐标值
                    rO=chO(r,1);
                    cO=chO(r,2);
                    % 判断该孩子的重要性
                    if Sn(1)==1
                        Sn(1)=[];
                        % 判断该孩子的正负符号
                        if Sn(1)==1
                            Sn(1)=[];
                            % 生成该孩子的系数值
                            DecodeMat(rO,cO)=1.5*2^N;
                        else
                            Sn(1)=[];
                            DecodeMat(rO,cO)=-1.5*2^N;
                        end
                        % 将该孩子添加到重要系数列表 LSP
                        LSP=[LSP;chO(r,:)];
                    else
                        % 如果不重要,则这个孩子的系数值为 0
                        DecodeMat(rO,cO)=0;
                        Sn(1)=[];
                        % 将

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值