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

📄 lzwdecode2.m

📁 matlab写的lzw和huffman的编码
💻 M
字号:
function decode=lzwdecode2(code,si,max)

%lzwdecode(code) used to  decode of lzw .the parameter code is a 1*m!
% and it return the lzw decode 1*n
%LZW解码,输入code为LZW编码序列,si为要解码生成图像的 row*col ,max 为解码字典的初始化最大值,默认为255
%返回 decode 为一个2维图像数据
curcode=[];        %识别序列
nn=0;
if nargin==2 
    
max=255; 
end


for f=0:max
dictcode(f+1,1)=f; %字典条目,注意实际数与下标相差一
dictcode(f+1,2)=-1; %字典条目,注意实际数与下标相差一
end
n=max+1;


len=length(code);

curcode=code(1);
decode2(1,:)=dictcode(code(1)+1,:);     %解码输出


for d=2:len
    


if code(d)+1> n %证明出现了,连续的符号,怎么处理????????????
    
hi22=find(dictcode(code(d-1)+1,:)==-1)-1;
curcode=dictcode(code(d-1)+1,1:hi22);  
curcode=[curcode curcode(1)];
n=n+1; %向字典增加条目 
vc=length(curcode);
for ll=1:vc
dictcode(n,ll)=curcode(ll); 
decode2(d,ll)=curcode(ll);     %解码输出
end
dictcode(n,vc+1)=-1;
decode2(d,vc+1)=-1;
if code(d+1)+1 <= n
curcode=code(d);
end 
 
else

hi1=find(dictcode(code(d)+1,:)==-1);
for ass=1:hi1
decode2(d,ass)=dictcode(code(d)+1,ass);     %解码输出
end 
n=n+1;
hi=find(dictcode(curcode+1,:)==-1)-1;
for ll=1:hi
dictcode(n,ll)=dictcode(curcode+1,ll);  %向字典增加条目 
end
dictcode(n,hi+1)=decode2(d,1);
dictcode(n,hi+2)=-1;
curcode=code(d); 
end

end

%对所得的解码输出进行,还原图像

hang=si(1);
lie=si(2);
leng=length(decode2(1,:));
xx=0;
for d=1:len %组成一个一维数组
for kk=1:leng
if  decode2(d,kk)~=-1   
xx=xx+1;    
dedata(xx)= decode2(d,kk);  
else
break;    
end
end
end
len2=length(dedata);
%把一维数组reshape为二维数组
hang=si(1);
lie=si(2);


for g=1:len2
  
dc(ceil(g/lie),mod(g-1,lie)+1)=dedata(g); 
end
decode=dc;   

%decode=reshape(dedata,si(2),si(1));
%decode=rot90(decode);
%decode=flipud(decode);

⌨️ 快捷键说明

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