📄 mainpass.m
字号:
function [D,X,sublist,sub_list] = mainpass(X,threshold,sublist,sub_list) %主扫描程序D=[];global N;global C;[m,n]=size(X);R=zeros(m); % matrix R is a reference matrix, same size as X; '0' means %this coefficient is not a descendant from zerotree root; %R矩阵与X同样大小,用于标识是否为子孙系数,‘0’为非[a,b]=size(N); if C(1,1)==0 if abs(X(1,1))>=threshold % X(1,1) is DC coefficient sublist=[sublist, abs(X(1,1))]; %在sublist中存放重要系数的数据 sub_list=[sub_list;N(1,1),N(1,2)];%在sub_list中存放重要系数的坐标 C(1,1)=1; if X(1,1)>0 D=[D,'p']; else D=[D,'n']; end X(1,1)=0; else D=[D,'z']; end end for k=2:4, if C(N(k,1),N(k,2))==0 if abs(X(N(k,1),N(k,2)))>=threshold sublist=[sublist, abs(X(N(k,1),N(k,2)))]; % 扩充存放重要系数; sub_list=[sub_list;N(k,1),N(k,2)]; C(N(k,1),N(k,2))=1; if X(N(k,1),N(k,2))>0 % determine the sign D=[D,'p']; % >0,assign a "p" else D=[D,'n'];% <0,assign a "n" end X(N(k,1),N(k,2))=0;%在小波系数矩阵中,所有重要系数都被标为0 else result = checkdescendants1( k,X,threshold,0); if result==1 D=[D,'z']; else D=[D,'t']; R(N(k,1),N(k,2))=1; % Zerotree, make all its descendants R=checkchildren(k,R); % refference matrix component to 1. end end end end for k=5:a, if C(N(k,1),N(k,2))==0 if abs(X(N(k,1),N(k,2)))>=threshold, sublist=[sublist, abs(X(N(k,1),N(k,2)))]; sub_list=[sub_list;N(k,1),N(k,2)]; C(N(k,1),N(k,2))=1; if X(N(k,1),N(k,2))>0, % determine the sign D=[D,'p']; % >0,assign a "p" else D=[D,'n'];% <0,assign a "n" end X(N(k,1),N(k,2))=0; elseif R(N(k,1),N(k,2))==0 result = checkdescendants1( k,X,threshold,0); %检查子孙系数中是否有重要系数 if result==1, D=[D,'z']; % isolated zero else D=[D,'t'];% zerotree R(N(k,1),N(k,2))=1; R=checkchildren(k,R); % 如果是零树,则将他所有的子孙系数在R矩阵中置0 end end end end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -