WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Huffman-Code

 

jiji
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 07.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2008, 17:06     Titel: Huffman-Code
  Antworten mit Zitat      
Hallo
weisst jemand wie ich Huffman-Code zu einem Grauwertbild bestimmen kann?
Private Nachricht senden Benutzer-Profile anzeigen


aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 14.12.2008, 18:09     Titel:
  Antworten mit Zitat      
Hi,

zunächst vom vom Graustufenbild das Histogramm bestimmt werden. Basierend auf dem Histogramm lässt sich dann die Code-Zuordnung generieren.

Ein kleines komplettes Toolset für das Huffman Coding und Decoding findet man in der SciLab Contribution Section.

[url]
http://www.scilab.org/contrib/index.....ntribution&fileID=951
[/url]

Da ich anstelle von MatLab nur SciLab verwende, kann ich hier nur den SciLab-Quellcode angeben...

Code:

function [SB,h,L,QM]=huffman(h);
// HUFFMAN
//      [SB,H,L,QM]=HUFFMAN(H)
//      Huffman-Coding
//
//      H   :   Histogram Vector
//      SB   :   Symbol vector (0,1,..)
//      H   :   Vector with rel. propabilities
//      L   :   Symbol length after Huffman coding
//      QM   :   Stringarray with symbols and their codings

h=full(h);
h=h(:).';
h=h ./sum(h);               // rel. propability
SB=1:1:(length(h));            // Symbols

hcs=cumsum(h);
h=h(hcs>0);
SB=SB(hcs>0);

SB=SB(h>0);
h=h(h>0);

[hs,k]=gsort(h);            // Decreasing sorting
SB=SB(k);                   // by propability

SB=SB(hs>0);               // Eliminate non-existing symbols
hs=hs(hs>0);

NSB=length(SB);               // Number of existing symbols
                          // (propability > 0)

hakt=hs;                   // prepare while-loop
q=length(hakt);
q2=0;

VC=spzeros(NSB,1);            // create Codetree
while q>1,
   vc=[149 .*zeros(NSB-2-q2,1);48;49;149 .*zeros(q2,1)];
   VC=[VC,vc];
   q2=q2+1;
   hakt(length(hakt)-1)=hakt(length(hakt)-1)+hakt(length(hakt));
   hakt=hakt(1:length(hakt)-1);

   [hakt,k]=gsort(hakt);
   k=[k,max(k)+1:NSB];

   SB=SB(k);
   VC=VC(k,:);
   q=q-1;

end

[SB,k]=gsort(SB(:),'g','i');   // Sort by symbols (increasing)
VC=VC(k,:);
[zv,sv]=size(VC);
VC=VC(:,$:-1:1);            // Flip Left<->Right

WB=string(SB);
QM=[];
L=[];

for k=1:1:NSB,               // Codetree auslesen und Symbol-
   q=[];                   // codierungen auslesen
   zneu=k;
   sakt=sv;
   
   while sakt>0,
      [z,s,v]=mtlb_find(VC(zneu,1:sakt));
        z=z(:); s=s(:); v=v(:);
      vtmp=v.' - 48;
      vtmp=vtmp(:,$:-1:1);
      q=[q,vtmp];
      [zneu,sneu,vs]=mtlb_find(VC(:,min(s)));
        zneu=zneu(:); sneu=sneu(:); vs=vs(:);
      zneu=zneu(zneu~=k);
      sakt=min(s)-1;
   end

   Q=[str2code(string(WB(k,:))).',44,(q(:,$:-1:1)),44,str2code(string(length(q))).'];
   QM=[QM;code2str(Q)];
   L=[L;length(q)];
end
h=h(h>0);

endfunction;
 


huffcomp.zip
 Beschreibung:

Download
 Dateiname:  huffcomp.zip
 Dateigröße:  127.12 KB
 Heruntergeladen:  776 mal

_________________

Andreas Geißler
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.