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 :

Convertir une matrice 3D en matrice 2D avec chaine de caracteres [Débutant]


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Convertir une matrice 3D en matrice 2D avec chaine de caracteres
    Bonjour à tous,
    Je travaille sur un projet d'imagerie, plus précisément de reconstruction d'objet 3D (méthode de décalage de phase, projection de lumière structurée).

    mon probleme est le suivant:

    je cherche à convertir une matrice de dimension (3,m,n) en une matrice de dimension (m,n), où les colonnes ont été remplacées par des chaines de caracteres.
    les colonnes de la matrice 3D originale sont des permutations du triplet {1,2,3}.

    mon but est d'attribuer à chacune de ces permutations
    un numero spécifique{1,...,6},et ainsi d'obtenir une sorte de 'carte' de la matrice 3D d'origine.

    Comme je travaille avec des images d'au moins 600x800, et que l'analyse se fait quasiment en temps réel, je ne dois pas avoir de boucles dans mon algorithme.


    merci de voter aide, à bientot

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Je suis pas sur d'avoir bien compris ton problème, mais voici une petite idée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    M1 = arrayfun(@(x) num2str(x), M(1,:,:), 'UniformOutput', false);
    M2 = arrayfun(@(x) num2str(x), M(2,:,:), 'UniformOutput', false);
    M3 = arrayfun(@(x) num2str(x), M(3,:,:), 'UniformOutput', false);
    Sachant que arrayfun te permet d'éviter la boucle pour la conversion des num en string.

    Voilà, j'espère que ca pourra t'aider...

    Bon courage,
    Duf

  3. #3
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    Une autre petite idé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
     
    p = 1000;
    q = 1000;
     
    M = zeros(3,p,q);
    for i=1:p
        for j=1:q
            M(:,i,j) = randperm(3);
        end
    end
     
    tic 
     
    M1 = reshape(M(1,:,:)+ 5*M(2,:,:)+7*M(3,:,:),p,q);
     
    M1(M1==32)= 1; % cas [1 2 3]
    M1(M1==30)= 2; % cas [1 3 2]
    M1(M1==22)= 3; % cas [3 1 2]
    M1(M1==20)= 4; % cas [3 2 1]
    M1(M1==28)= 5; % cas [2 1 3]
    M1(M1==24)= 6; % cas [2 3 1]
     
    toc
    % En 0.14 secondes sur ma machine pour 1000*1000
    ++ bonne chance

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    merci Mr samurai
    par contre, je suis pas bien sûr d'avoir compris cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    M1 = reshape(M(1,:,:)+ 5*M(2,:,:)+7*M(3,:,:),p,q);

    avec la suite du code, je suppose que les coefficients 1,5 et 7 servent à lever l'indétermination sur la somme des termes de la permutation?(sinon on aurait toujours 6 comme résultat?)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par grohino Voir le message
    merci Mr samurai
    par contre, je suis pas bien sûr d'avoir compris cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    M1 = reshape(M(1,:,:)+ 5*M(2,:,:)+7*M(3,:,:),p,q);

    avec la suite du code, je suppose que les coefficients 1,5 et 7 servent à lever l'indétermination sur la somme des termes de la permutation?(sinon on aurait toujours 6 comme résultat?)


    voilà ce qui arrive quand on répond trop vite à un message...j'ai oublié une chose: dans quelle matrice restockes-tu les informations extraites?
    ma question n'est peut etre pas futée, mais j'ai le cerf-volant en ce moment...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    ok...

    c'était vraiment une question stupide, mais tant qu'on l'a pas posée...

    les élés sont stockés dans M1, j'avais un doute la dessus, j'ai toujours un peu peur de me planter en laissant un meme nom pour des modifications de matrice.

    merci beaucoup à vous!

  7. #7
    Membre éprouvé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2007
    Messages
    979
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 979
    Points : 1 256
    Points
    1 256
    Par défaut
    Salut,

    Si on avais mis uniquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    M1 = M(1,:,:)+ 5*M(2,:,:)+7*M(3,:,:);
    M1 serait une matrice 3D de taille [1,p,q].
    Alors que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    M1 = reshape(M(1,:,:)+ 5*M(2,:,:)+7*M(3,:,:),p,q);
    produit une matrice 2D de taille [p,q].

    Plus clairement , shape c'est forme . Et la fonction RESHAPE réarrange les données dans une autre forme (en p lignes et q colonnes dans notre cas).

    ++ bonne chance

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/01/2014, 10h06
  2. Réponses: 2
    Dernier message: 05/01/2012, 21h38
  3. Pb avec chaines de caracteres
    Par optixpro dans le forum C++
    Réponses: 2
    Dernier message: 03/11/2006, 17h37
  4. probleme glibc avec chaine de caracteres.
    Par Mr_Chut dans le forum C
    Réponses: 16
    Dernier message: 25/07/2006, 14h06
  5. Pb Update avec chaine de caractere
    Par JuJu° dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/05/2003, 15h58

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