www.pudn.com > Upload_EZW128.zip > ezw_encode_128.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=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