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

Octave Discussion :

Instruction dec2bin / matrice


Sujet :

Octave

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Instruction dec2bin / matrice
    Bonjour,
    j'espère ne pas avoir poster au mauvais endroit concernant ma question :

    Je suis débutant en Octave (Mathlab) et je n'arrive à comprendre une instruction et surtout d'obtenir une matrice n lignes x m colonnes.
    Je mets un truc archi simple pour être clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    I = [ 'ceci est un original'] ;
    J = double(I);
    K = dec2bin(K,8);
    Donc un vecteur chaine de caractère , dont je récupère les codes décimaux de type vecteur une ligne , 20 colonnes, (Je peux le transformer en une matrice de 2 lignes 5 colonnes avec reshape par exemple ) et quand je binarise j'obtiens 20 lignes et chaque ligne un code de 8 bits.
    Je suis très surpris du résultat, mais apparemment c'est comme cela que c'est décrit dans les tutoriels, mais alors comment fait t'on pour avoir un affichage d'une matrice 2 lignes 5 colonnes par exemple ? Car reshape ne change rien, les concaténations n'ont plus.

    Y a t il une instruction spécifique pour remédier à cela ?
    Merci.

  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 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Avec MATLAB, je ferais comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    I = 'ceci est un original';
     
    J = double(I);
     
    J = reshape(J, 2, [])
     
    J = num2cell(J);
     
    K = cellfun(@(x) dec2bin(x,8), J, 'UniformOutput', false)
    ce qui donne :
    J =
    
        99    99    32   115    32   110   111   105   105    97
       101   105   101   116   117    32   114   103   110   108
    
    
    K = 
    
        '01100011'    '01100011'    '00100000'    '01110011'    '00100000'    '01101110'    '01101111'    '01101001'    '01101001'    '01100001'
        '01100101'    '01101001'    '01100101'    '01110100'    '01110101'    '00100000'    '01110010'    '01100111'    '01101110'    '01101100'
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup !
    Et désolé pour l'erreur du choix de forum, j'essaierai de ne pas me tromper la prochaine fois.
    Donc ok je vais regarder de près la syntaxe car il y a pas mal de chose nouvelle que je n'ai jamais vu, et surtout la ligne 9.

    Encore une question, avec l'exemple de code, comment doit je faire pour afficher la réponse, je l'a re_écris en format code tout simplement ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par neck75 Voir le message
    Encore une question, avec l'exemple de code, comment doit je faire pour afficher la réponse, je l'a re_écris en format code tout simplement ?
    Je ne comprends pas ta question
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    c'est juste le résultat quand on fait un essai dans un terminal.
    On copie le résultat pour le coller avec son message sur le forum.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 53 166
    Points
    53 166
    Par défaut
    Ceci devrait répondre à ta question : http://www.developpez.net/forums/d30...i/#post3986690
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    ok merci.

    Sinon j'essaye de comprendre les instructions de la ligne 9, j'ai du mal à suivre, sinon j'ai essayé le bout de code et j'ai pas obtenu la même chose (??)

    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
    J =
     
        99    99    32   115    32   110   111   105   105    97
       101   105   101   116   117    32   114   103   110   108
     
    K =
     
    {
      [1,1] = 01100011
      [2,1] = 01100101
      [1,2] = 01100011
      [2,2] = 01101001
      [1,3] = 00100000
      [2,3] = 01100101
      [1,4] = 01110011
      [2,4] = 01110100
      [1,5] = 00100000
      [2,5] = 01110101
      [1,6] = 01101110
      [2,6] = 00100000
      [1,7] = 01101111
      [2,7] = 01110010
      [1,8] = 01101001
      [2,8] = 01100111
      [1,9] = 01101001
      [2,9] = 01101110
      [1,10] = 01100001
      [2,10] = 01101100
    }

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    C'est la même chose je te rassure, juste que Dut a utilisé MATLAB, qui affiche le tableau différemment

  9. #9
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Ok d'accord, et si je veux avoir ce même affiche type matrice avec octave que faut il changer dans le code ?
    Sinon après avoir récupéré une matrice avec des codes binaires, je souhaitais transformer en image, j'ai voulu utiliser imagesc mais erreur , pourtant j'ai déjà utilisé cette instruction en chargeant avant une image type .png en niveau de gris, pas de problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    i = ['c est un original ! '];
    j = double(i);
    k = dec2bin(j,8);
    l = reshape(k,10,16);
    imagesc(l), colormap gray
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    error: Invalid call to image.  Correct usage is:
     
     -- Function File:  image (IMG)
     -- Function File:  image (X, Y, IMG)

  10. #10
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonsoir,
    j'ai continué cette histoire de 'binarisation' de vecteur puis transformation en matrice, je mets de coté l'affichage d'une image, car déjà il y a trop d'instruction nouvelles qui m'ont été donné dans les réponses précédentes, dont je n'ai pas réussi à trouver complètement la signification.

    Donc un morceau de code qui correspond à mon exercice :

    Le scrip :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    close all
    % chargement de l'image fournie au format pgm 
    ima = double(imread('asterix.png'));
    ima = round(sum(ima,3)/3);
    % message que l'on veut cacher transformer en vecteur binaire (caractères codés sur 8 bits) 
    message = ['ceci est un original'];
    message = double(message);
    message = dec2bin(message,8);
    [n,m] = size(message);
    % appel de la fonction pour convertir en une image binaire le message de taille n x m 
    Image = Text2Image(message,n,m);
    La fonction :
    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
     
    %je fabrique une matrice binaire au format 450 x 450
    function y = Text2Image(message,n,m);
    %je complète par une matrice de 1 le dessous de la matrice message
    dessous = ones(430,8);
    dessous_bin = dec2bin(dessous);
    dessous_bin = reshape(dessous_bin,430,8);
    %concaténation
    message = [message;dessous_bin];
    %je complète par une matrice de 1 le coté droit de la matrice message
    droite = ones(450,442);
    droite_bin = dec2bin(droite);
    droite_bin = reshape(droite_bin,450,442);
    %concaténation
    message = [message,droite_bin];
    J'ai essayé avec bin2dec de voir ré_apparaître les codes de la phrase mais rien, quelle erreur ai je faite ou un oubli d'une commande ?

    Après la suite c'est de cacher chaque bit dans un pixel de l'image 'astérix.png' de début,

  11. #11
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2011
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonsoir ,

    j'ai tout repris le code, suite à des petits essais avec une matrice de petite taille, concernant reshape et les transformations dec2bin et bin2dec, cela fonctionne comme demandé. Car au bout du compte avec un dessin et en essayant de comprendre le résultat de help concernant les instructions citées plus haut, j'y suis arrivé.
    Merci pour l'aide de super fort en Matlab/Octave, cependant ce n'est pas facile pour à la fois ne pas donner bêtement une réponse, et savoir guidr.

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestion de matrice
    Par bzd dans le forum C
    Réponses: 4
    Dernier message: 12/08/2002, 18h19
  2. Instruction pour créer un fichier text ???
    Par Soulsurfer dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2002, 11h17
  3. [Crystal Report][VB6] instruction PrintReport
    Par yyyeeeaaahhh dans le forum SDK
    Réponses: 4
    Dernier message: 29/07/2002, 14h58
  4. [TASM] Problème concernant l'instruction LGDT
    Par Ninkosen dans le forum Assembleur
    Réponses: 3
    Dernier message: 15/07/2002, 19h09
  5. Comment définir le type matrice ?
    Par charly dans le forum Langage
    Réponses: 7
    Dernier message: 15/06/2002, 21h01

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