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

Images Discussion :

Algorithme de Compression rle


Sujet :

Images

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut Algorithme de Compression rle
    Bonjour tout le monde

    J'ai un petit problème concernant le codage rle appliqué sur une image en niveaux de gris, en parcourant la matrice de l'image , le résultat de la compression Run Lenght encoding est eronné (après qu'il donne un bon résultat sur la première ligne, il le stocke dans un tableau à deux dimensions mais dès qu'il passe à la deuxième ligne de la matrice, il ne donne pas un bon résultat peut-être le probleme réside dans les indices) et je ne sais pas pourquoi .

    le programme que je poste est un exemple de mon travail appliqué sur une matrice que j'ai créée
    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    clear;
    c=0;
    m=1;
    n=1;
    d=0;
     
     
    a=zeros(2,8);
    a(1,1)=5;
    a(1,2)=5;
    a(1,3)=5;
    a(1,4)=2;
    a(1,5)=2;
    a(1,6)=3;
    a(1,7)=6;
    a(1,8)=4;
     
     
    a(2,1)=4;
    a(2,2)=4;
    a(2,3)=4;
    a(2,4)=9;
    a(2,5)=9;
    a(2,6)=9;
    a(2,7)=7;
    a(2,8)=7;
     
     
    s=size(a);
    z=1;
    i=1;
    while i<=s(1)
     
        k=z;
        c=0;
        j=1;
        while j<=s(2)
            if(a(i,k)==a(i,j) )
                c=c+1;
            else
     
                b(n,m)=c;
     
                b(n,m+1)=a(i,k);
                k=j;
     
                %j=j-2;
                %k
                % j
                n=n+1;
                m=1;
                c=1;
                %                  if k==s(2)
                %                       b(n,m)=c;
                %                  b(n,m+1)=a(i,k);
                %                  n=n+1;
                %                  m=1;
     
                % end
            end
            %           if (j==s(2))
            %                b(n,m)=c;
            %                b(n,m+1)=a(i,k);
            %                n=n+1;
            %                 m=1;
     
            %           end
            if (j==s(2) & i<s(1))
                z=1;
                k=1;
                while (a(i,j)==a(i+1,z))
                    c=c+1;
                    z=z+1;
                end
                b(n,m)=c;
                b(n,m+1)=a(i,k);
                n=n+1;
                m=1;
     
            end
            if (j==s(2) & i==s(1))
                b(n,m)=c;
                b(n,m+1)=a(i,k);
                n=n+1;
                m=1;
            end
            j=j+1;
        end
        i=i+1;
    end%while1
    z
    d
    display(a)
    b
    length(a)
    Mes amis , toutes vos propositions seront les bienvenues , vous pouvez me suggérer d'autres programmes si vous voulez ou bien travailler sur le mien

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    - Pour commencer, il serait plus judicieux de mettre des variables plus parlantes autres que a, b, c ... ne comportant qu'une seule lettre.
    - Des commentaires rendrait de même le code plus lisible, et nous montreraient clairement les différentes étapes de ton code.
    de penser à ceux qui essaient de décripter ton code pour t'aider.

    Une discussion qui pourrait t'aider

    Dernière remarque, la définition de ta variable a peut se faire plus facilement (et lisiblement) comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a =[ 5     5     5     2     2     3     6     4;
         4     4     4     9     9     9     7     7];

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut
    Merci bien Monsieur mais si vous pouvez seulement m'aider un peu plus parce que j'ai trouvé dans la discution que vous m'avez donné le codage appliqué sur un vecteur mais malheureusement pas sur une matrice.

    Je suis encore un débutant en Matlab donc si quelqu'un a des propositions sur l'operation inverse ( décompression ) je serais vraiment trop satisfait et reconnaissant

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jack Atlus Voir le message
    parce que j'ai trouvé dans la disscution que vous m'avez donné le codage appliqué sur un vecteur mais malheureusement pas sur une matrice.
    Indexage linéaire
    Pour l'opération inverse, tu peux regarder les fonctions ones, ou repmat, ainsi que reshape. (doc Nom_de_la_fonction sur Matlab pour obtenir leur documentation)

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut
    pour que les choses soient comprises , le programme suivant consiste a appliquer le codage rle sur une matrice 2 lignes et 8 colonnes , cette matrice est inclus dans la variable b . en compte dans cette matrice le nombre d'occurrence de chaque chiffre par exemple dans la première ligne de cette matrice : 5 5 5 2 2 2 doit donner sur un tableau nommé c : 3 5 c'est a dire 3 fois de 5 et 3 2 c'est a dire 3 fois de 2 . Ce tableau contient 2 colonnes une pour le chiffre et l'autre pour le nombre d'occurrence consécutives.

    voici le programme que j'ai développé en matlab :

    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
     
    clear;
    ct=0;
    m=1;
    n=1;
    c=zeros(7,2);
     
     
     
    b=zeros(2,8);
    b(1,1)=5;
    b(1,2)=5;
    b(1,3)=5;
    b(1,4)=2;
    b(1,5)=2;
    b(1,6)=2;
    b(1,7)=3;
    b(1,8)=4;
     
     
    b(2,1)=8;
    b(2,2)=8;
    b(2,3)=9;
    b(2,4)=9;
    b(2,5)=9;
    b(2,6)=9;
    b(2,7)=7;
    b(2,8)=7;
     
    %s=size(b);
     
    for i=1:2
          k=1;
     
         for j=1:8
     
              if(b(i,k)==b(i,j)) 
                     ct=ct+1;
     
     
     
              else
                     c(n,m)=ct;
                     c(n,m+1)=b(i,k);
                     k=j;
                     j=j-1;
                     n=n+1;
                     m=1;
                     ct=0;
     
     
              end
     
         end
     
    end
     
    b
    c

    mais le resultat reste erroné :

    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
     
    b =
     
         5     5     5     2     2     2     3     4
         8     8     9     9     9     9     7     7
     
     
    c =
     
         3     5
         2     2
         0     3
         2     8
         3     9
         0     0
         0     0
    bon je crois que c'est tout . S'il vous plais si on arrive a résoudre ce probleme donner moi des propositions pour la décompression et merci

Discussions similaires

  1. Algorithme de compression
    Par yahia_sahli dans le forum VHDL
    Réponses: 3
    Dernier message: 26/03/2008, 07h40
  2. Quel est le meilleur algorithme de compression pour le XML
    Par onlytoine dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 07/09/2007, 14h08
  3. Un algorithme de compression
    Par babar56 dans le forum C
    Réponses: 19
    Dernier message: 09/04/2006, 10h18
  4. algorithme de compression des data en format PNG
    Par vbany dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 07/04/2006, 14h08
  5. Algorithme de compression
    Par nebneb37 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 01/06/2005, 18h45

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