⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ezwdecode00.asv

📁 改进版ezw编码
💻 ASV
字号:
function DecodeMat=ezwdecode(Mat,T1,decodeDim,CodeList,LenSubCL,QuantiFlagList,LenSubQFL,IntervalList)
global row col
recvalue=[];
scanorder=listorder(row,col,1,1);
flagMat(1:row,1:col)='Z';

for level=1:decodeDim
    scancode=CodeList(1:LenSubCL(level));
    CodeList=CodeList(LenSubCL(level)+1:end);
    quantiflag=QuantiFlagList(1:LenSubQFL(level));
    QuantiFlagList=QuantiFlagList(LenSubQFL(level)+1:end);
    rIlist=IntervalList(1:LenSubQFL(level));
    IntervalList=IntervalList(LenSubQFL(level)+1:end);
    
    Num_O=0;
    for m=1:length(scancode)
        if (scancode(m)=='P')||(scancode(m)=='N')
            Num_O=Num_O+1;
        end
    end
    
    decode=[];
    sclen=length(scancode);
    quantifier=[];
    
    maxInterValue=2*T1;
    threshold=T1/2^(level-1);
    intervalNum=maxInterValue/threshold-1;
    
    for i=1:intervalNum
        quantifier=[quantifier;threshold*i threshold*(i+0.5) threshold*(i+1) threshold*(i+0.25) threshold*(i+0.75)];
    end
    
    DecodeMat=Mat;
    qrNum=1;
    scNum=1;
    oNum=0;
    xNum=0;
    
    if ~isempty(recvalue)
        [rvRow,rvCol]=size(recvalue);
        for i=1:rvRow
            if quantiflag(qrNum)==1
                qValue=quantifier(rIlist(qrNum),5);
                if recvalue(i)<0
                    qValue=-qValue;
                end
                recvalue(i,1)=qValue;
                DecodeMat(recvalue(i,2),recvalue(i,3))=qValue;
                qrNum=qrNum+1;
            else
                qValue=quantifier(rIlist(qrNum),4);
                if recvalue(i)<0
                    qValue=-qValue;
                end
                recvalue(i,1)=qValue;
                DecodeMat(recvalue(i,2),recvalue(i,3))=qValue;
                qrNum=qrNum+1;
            end
        end
    end
    
    for r=1:row*col
        if flagMat(scanorder(r,1),scanorder(r,2))=='O'
            oNum=oNum+1;
            continue;
        elseif flagMat(scanorder(r,1),scanorder(r,2))=='X'
            xNum=xNum+1;
            continue;
        elseif scNum<sclen
            scNum=r-oNum-xNum;
            if scancode(scNum)=='P'
                flagMat(scanorder(r,1),scanorder(r,2))='P';
                decode=[decode 'P'];
                if quantiflag(qrNum)==1
                    qValue=quantifier(rIlist(qrNum),5);
                    recvalue=[recvalue;qValue,scanorder(r,1),scanorder(r,2)];
                    DecodeMat(scanorder(r,1),scanorder(r,2))=qValue;
                    qrNum=qrNum+1;
                else
                    qValue=quantifier(rIlist(qrNum),4);
                    recvalue=[recvalue;qValue,scanorder(r,1),scanorder(r,2)];
                    DecodeMat(scanorder(r,1),scanorder(r,2))=qValue;
                    qrNum=qrNum+1;
                end
            elseif scancode(scNum)=='N'
                flagMat(scanorder(r,1),scanorder(r,2))='N';
                decode=[decode 'N'];
                if quantiflag(qrNum)==1
                    qValue=-quantifier(rIlist(qrNum),5);
                    recvalue=[recvalue;qValue,scanorder(r,1),scanorder(r,2)];
                    DecodeMat(scanorder(r,1),scanorder(r,2))=qValue;
                    qrNum=qrNum+1;
                else
                    qValue=-quantifier(rIlist(qrNum),4);
                    recvalue=[recvalue;qValue,scanorder(r,1),scanorder(r,2)];
                    DecodeMat(scanorder(r,1),scanorder(r,2))=qValue;
                    qrNum=qrNum+1;
                end
            elseif scancode(scNum)=='Z'
                decode=[decode 'Z'];
                DecodeMat(scanorder(r,1),scanorder(r,2))=0;
            elseif scancode(scNum)=='T'
                flagMat(scanorder(r,1),scanorder(r,2))='T';
                decode=[decode 'T'];
                DecodeMat(scanorder(r,1),scanorder(r,2))=0;
                chTree=treeMat(scanorder(r,1),scanorder(r,2));
                [rowch,colch]=size(chTree);
                for rc=1:rowch
                    if flagMat(chTree(rc,1),chTree(rc,2))~='O'
                        flagMat(chTree(rc,1),chTree(rc,2))='X';
                    end
                end
%                 if ~isempty(chTree)
%                     [rowch,colch]=size(chTree);
%                     for l=1:rowch
%                         if flagMat(chTree(l,1),chTree(l,2))=='O'
%                             chTree(l,:)=[];
%                         end
%                         [rch,cch]=size(chTree);
%                         if l>=rch
%                             break;
%                         end
%                     end
%                     [rowch,colch]=size(chTree);
%                     for rc=1:rowch
%                         flagMat(chTree(rc,1),chTree(rc,2))='X';
%                     end
%                 end
            end
        end
    end
    Decodeflag=flagMat;
    NumO=0;
    for i=1:row
        for j=1:col
            switch flagMat(i,j)
                case {'P','N','O'}
                    flagMat(i,j)='O';
                    NumO=NumO+1;
                otherwise
                    flagMat(i,j)='Z';
            end
        end
    end
%     level
%     decode    
%     sclen
%     scNum
%     Num_O
%     oNum
%     NumO
%     xNum
%     recvalue
%     DecodeMat
%     Decodeflag
%     flagMat
    if level<decodeDim
        button = questdlg('Need the nest decode processing ?','Decode Level','Yes','No','Yes');
        if button(1)=='N'
            break;
        end
    end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -