📄 ezwdecode00.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 + -