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

📄 haffuman.m

📁 图像处理中压缩编码部分的霍夫曼编码应用实例:MATLAB版源代码
💻 M
字号:
function g=haffuman(data)
%haffuman() use to code the data 
%the input data is the sign and their probability !
%进行哈夫曼编码,
%输入data为二维灰度图象数据,输出为g:2维元胞矩阵,里面第一列为符号(像素值),第二列为:输出的哈夫曼编码
sgailv=getsignpro(data);
paixu=paixuhuff(sgailv)
n=size(paixu);
n1=n(1);
paixu2=paixu;


for v=1:n1
paixu2(v,1)=v;    
end


b=0;
n1=n1-1;

for k=n1:-1:1
 paixu2(k,2)= paixu2(k,2)+ paixu2(k+1,2);
 b=b+1;
 dt(1,b)= paixu2(k,1);
 dt(2,b)= paixu2(k+1,1);
 paixu2(k+1,:)=[] ;
 paixu2=paixuhuff( paixu2);
end

%下面对dt进行编码 dt矩阵的长为 n1 按上面的初始的排序顺序,建立一个元胞矩阵返回。
ret(dt(1,n1),2)={0};
ret(dt(2,n1),2)={1};
for k=n1:-1:1
for t=1:2
    
 if dt(t,k)~=-1   


 for k2=(k-1):-1:1     

   if dt(1,k2)~=-1 & dt(2,k2)~=-1
       
     if  dt(t,k)==dt(1,k2)
   bn=ret{dt(t,k),2};        
       ret(dt(1,k2),2)={[0 bn]};
      ret(dt(2,k2),2)={[1 bn]}; 
      dt(1,k2)=-1;
  elseif dt(t,k)==dt(2,k2)
       bn=ret{dt(t,k),2};    
      ret(dt(1,k2),2)={[0 bn]};
      ret(dt(2,k2),2)={[1 bn]};      
      dt(2,k2)=-1;
  end    
   end    
end
end
end
end



n1=n1+1;
for k=1:n1
 ret(k,1)={paixu(k,1)};
 sign=paixu(k,1);
 mazi=ret{k,2}   
end
g=ret;

⌨️ 快捷键说明

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