?? 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<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 + -