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

📄 ezw_encode_128.m

📁 本代码经过本人多次调试运行过
💻 M
字号:
clear,clc
load indices
format long
% Prepare for RASTER scan [Sha93]
xm=mapping_128;
xm=xm(:);
load lena.mat
%load kitten.mat
%x=kitten;
%subplot 121
%imshow(mat2gray(mat)),title(' ORIGINAL ')
%mat=transform_128(x(50:50+127,50:50+127));
%[a b c d]=wfilters('db4');
mat=anal2d(x(50:50+127,50:50+127),3,3);
%subplot 122
%xr=itransform_128(mat);
%imshow(mat2gray(xr)),title(' RECREATED ')
x=xm;
seqt(x)=mat;
T=2^round(log2(max(max(abs(mat)))));
T=T/2
mat=mat.*[abs(mat)>=T==1];
seq(x)=mat;
ztr=[];
sig_coeff=[];
num_of_passes=1;
refine=[];
kkk=0;
beta=[];
sym=[];
%---------------------------------------------------------------------------------------
% For the subband LL3

%---------------------------------------------------------------------------------------
while num_of_passes<=9 % Number of dominant passes
    kkk=kkk+1;
%---------------------------------------------------------------------------------------
% This is only for level 3
%---------------------------------------------------------------------------------------
for ii=513:1024
    if(isempty(sig_coeff) | sum([sig_coeff==ii])==0) % Added new
        count=0;
        for kk=1:4
            if(seq(indices(ii,kk))==0),count=count+1; end
            for mm=1:4
                if seq(indices(indices(ii,kk),mm))==0,count=count+1; end
            end
        end
        if count==20 & seq(ii)==0,
            ztr=[ztr ii];
            for kk=1:4
                seq(indices(ii,kk))=inf;
                for mm=1:4
                    seq(indices(indices(ii,kk),mm))=inf;
                end
            end
        end
    end % Added new
end
%---------------------------------------------------------------------------------------
% Start of level 2
for ii=1025:4096
    if(isempty(sig_coeff) | sum([sig_coeff==ii])==0) % Added new
        count=0;
        if(seq(ii)~=inf & seq(ii)~=0),
            for kk=1:4
                if(seq(indices(ii,kk))==0),count=count+1;end
            end
        elseif seq(ii)==0 & seq(ii)~=inf,
            for kk=1:4
                if(seq(indices(ii,kk))==0),count=count+1;end
            end
            if count==4 & seq(ii)==0,
                ztr=[ztr ii];
                for kk=1:4
                    seq(indices(ii,kk))=inf;
                end
            end
        end 
    end
end
%---------------------------------------------------------------------------------------
% Start of encoding
for ii=1:128*128
    if(isempty(sig_coeff) | sum([sig_coeff==ii])==0),
        if (seq(ii)>0 & seq(ii)~=inf),sym=[sym 'p'];
        elseif (seq(ii)<0 & seq(ii)~=inf),sym=[sym 'n'];
        elseif seq(ii)==0
            if(ii<4097 & ~isempty(find(ztr==ii) & seq(ii)~=inf))
                sym=[sym 'r'];
            elseif(ii<4097 & seq(ii) ~= inf & isempty(find(ztr==ii)))
                sym=[sym 'z']; % This Was i earlier
            elseif(ii>4096 & seq(ii)~=inf) 
                sym=[sym 'z'];
            end
        end    
    end
end
% Encoding ends for one dominant pass
%---------------------------------------------------------------------------------------
zero_tree_roots_positions=ztr; % Well just for debugging
% Prepare for further passes
sig_coeff=[sig_coeff find(seq~=0 & seq~=inf)] ; % Index of where significant coeff occur
%-----------------------------------------------------------
% Perform the Subordinate / Refinement pass
ref=dec2bin(abs(round(seqt(sig_coeff))),length(dec2bin(round(max(max(abs(seqt))))))); % Try not calculating the calculated % Change this,this takes long time
ref=ref(:,2:end);
kp=find(sym~='z');
sym=sym(1:kp(length(kp))); % Remove predictably insignificant , AFTER LONG TIME I WAS SATISFIED WITH THIS, IT MAY BE WRONG
if kkk<length(dec2bin(max(max(abs(seqt)))))
    sym=[sym (ref(:,kkk))']; % This is also a problem check
end
seq=seqt; % Copy back the original sequence
T=T/2
seq=seq.*[abs(seq)>=T==1];
seq(sig_coeff)=0; % Only those coefficients not yet found to be significant are scanned & 
                  % coefficients previously found to be significant are made zero
%---------------------------------------------------------------------------------------
num_of_passes=num_of_passes+1
drawnow
ztr=[]; % Check out
end % End of while
symlen=[sym 0];
save symlen
%finalexamd

⌨️ 快捷键说明

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