IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

le codage de huffman des images


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Espagne

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 8
    Par défaut le codage de huffman des images
    bonjour à tous, j'ai un travail à rendre sur le codage de huffman des images numériques, j'ai trouvé le programme en Matlab de sean danaher suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    function [code,compression]=huffman5(p);
    %HUFFMAN5
    %HUFFMAN CODER FOR V5
    % Format [CODE,COMPRESSION]=HUFFMAN5(P)
    %
    % P is the probability (or number of occurences) of each alphabet symbol
    % CODE gives the huffman code in a string format of ones and zeros
    % COMPRESSION gives the compression rate
    %
    % Huffman5 works by first building up a binary tree(eg p =[.5 .2 .15.15])
    %
    %      a_1     a_4
    %    1/      1/
    %    /       /
    %  b3      b1
    %    \    /  \
    %    0\ 1/   0\
    %      b2      a_3
    %        \
    %        0\
    %          a_2
    %
    % Such that the tree always terminates at an alphabet symbol and the
    % symbols furthest away from the root have the lowest probability.
    % The branches at each level are  labeled 0 and 1.
    % For this example CODE would be 
    %     1    
    %     00
    %     010
    %     011
    % and the compression rate 1.1111   
    % Sean Danaher University of Northumbria at Newcastle UK 98/6/4
    
    p=p(:)/sum(p);    %normalises probabilities
    c=huff5(p);       
    code=char(getcodes(c,length(p)));
    compression=ceil(log(length(p))/log(2))/ (sum(code' ~= ' ')*p);
    %---------------------------------------------------------------
    function c=huff5(p);
    % HUFF5 Creates Huffman Tree
    % Simulates a tree structure using a nested cell structure 
    % P is a vector with the probability (number of occurences)
    %   of each alphabet symbol
    % C is the Huffman tree. Note Matlab 5 version
    % Sean Danaher 98/6/4        University of Northumbria, Newcastle UK
    
    c=cell(length(p),1);			% Generate cell structure 
    for i=1:length(p)		% fill cell structure with 1,2,3...n 
       c{i}=i;					%	(n=number of symbols in alphabet)
    end
    
    while size(c)-2					% Repeat till only two branches
    	[p,i]=sort(p);				% Sort to ascending probabilities
    	c=c(i);							% Reorder tree.
    	c{2}={c{1},c{2}};c(1)=[];	% join branch 1 to 2 and prune 1
    	p(2)=p(1)+p(2);p(1)=[];		% Merge Probabilities
    end
    %---------------------------------------------------------------
    function y= getcodes(a,n)
    % Y=GETCODES(A,N)
    % Pulls out Huffman Codes for V5
    % a is the nested cell structure created by huffcode5
    % n is the number of symbols
    % Sean Danaher 98/6/4   University of Northumbria, Newcastle UK
    global y
    y=cell(n,1);
    getcodes2(a,[])
    %----------------------------------------------------------------
    function getcodes2(a,dum)
    % GETCODES(A,DUM) 
    %getcodes2
    % called by getcodes
    % uses Recursion to pull out codes
    % Sean Danaher 98/6/4   University of Northumbria, Newcastle UK
    
    global y
    if isa(a,'cell')
             getcodes2(a{1},[dum 0]);
             getcodes2(a{2},[dum 1]);
    else   
       y{a}=setstr(48+dum);   
    end
    
    
    le pgm fonctionne très bien mais je n'ai bien assimiler la partie en rouge. la fonction s'appelle getcodes2 et on trouve getcodes2 dans la fonction elle-même dans if!!!!
    pourquoi il n'y a pas d'erreur?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    C'est ce que l'on appelle une fonction récursive

    La fonction s'appelle elle-même tant que la condition isa(a,'cell') est vraie.

Discussions similaires

  1. codage des images numériques
    Par maraval dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 15/03/2010, 14h46
  2. Réponses: 3
    Dernier message: 05/02/2009, 10h13
  3. Réponses: 2
    Dernier message: 28/05/2007, 13h15
  4. Afficher des images sous directX
    Par cyberlewis dans le forum DirectX
    Réponses: 17
    Dernier message: 12/07/2004, 12h07
  5. [TP][MULTI-PROBLEME]Comment afficher des images pcx
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 24/10/2002, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo