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 :

Extraire matrices contenues dans une cell array [Débutant]


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 9
    Par défaut Extraire matrices contenues dans une cell array
    Bonjour,

    Je programme depuis peu avec Matlab et je suis malheureusement bloqué depuis quelques jours sur mon script.
    Je travaille sur une image raster dans laquelle je souhaite extraire une série d'objets (103 au total) dans le but de les analyser un par un et en obtenir leur morphométrie (périmètre, aire, axe mineur, axe majeur, excentricité, etc.).
    Pour réaliser cette opération, j'utilise un active contour (snake) afin de tracer le contour de mes objets. Le problème est que cet algorithme fonctionne que sur une image à la fois. Je suis donc contraint de créer une fenêtre pour chaque objet (fenêtre de 20x20 pixels). Pour cela, j'ai construit une cell array contenant une matrice (de 20x20) pour mes 103 objets.

    Mon problème est le suivant : je souhaiterais pouvoir enregistrer chacune de mes matrices contenues dans la cell array dans mon workspace, soit une matrice = une variable dans mon workspace.

    Je sais faire ça de manière individuelle comme le montre le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     image1 = cellArray{1}; % permet d'extraire la matrice 1 (parmi les 103) de la cell array
     image2 = cellArray{2}; % etc...
    En revanche, je ne sais pas comment répéter cette opération sur l'ensemble de mes 103 matrices (soit d'utiliser une boucle for end).

    Votre aide serait la bienvenue.

    Merci d'avance,
    Rdmato33

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Salut,

    J'aimerai comprendre ce qui motive ton désir? C'est justement pour cette raison que les tableaux de cellules sont très pratique sur matlab, afin d'éviter d'avoir des noms de variables dynamiques. C'est faisable avec un boucle, peut être sans, mais je ne vois pas ce que cela t'apporterait.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 9
    Par défaut
    Merci Gooby pour ta réponse.

    Comme évoqué précédemment, je souhaiterais utiliser un algorithme d’active contour. Au début du script (étapes 1 et 2 de l’algorithme), je dois appeler une image, la convertir en .pgm puis la lire.
    L’algorithme peut ensuite se mettre en marche.

    Voici un aperçu ci-dessous. Dans ce cas de figure, j’applique mon algorithme sur la matrice 96 de ma cell array. Pour information, ‘samples ‘ est le nom de ma cell array.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %1ère étape : conversion et préparation de l’image
    imwrite(samples{96}, ’../images/image96.pgm’) ;
    [I,map]=rawread(’../images/image96.pgm’) ;
    I=imresize(I,1);
    %2ème étape : lecture de l’image et application des premiers traitements
    disp(’Compute edge map…’) ;
    f=1-I/255; %I correspond à la matrice 96
    f0=gaussianBlur(f,1) ;
    disp(’Compute the traditional external force…’) ;
    [px,py]=gradient(f0) ;
    J'aimerais pouvoir répéter cette opération automatiquement sur mes 103 matrices.

    Voici un aperçu visuel de mon problème :

    Nom : Sans titre.jpg
Affichages : 392
Taille : 239,0 Ko

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Par défaut
    Tu peux facilement automatiser l'ensemble en utilisant la fonction sprintf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for p = 1:length(samples)
        %1ère étape : conversion et préparation de l’image
        imwrite(samples{p}, sprintf('../images/image%d.pgm',p));
        [I,map]=rawread(sprintf('../images/image%d.pgm',p));
        I=imresize(I,1); % pourquoi pas stocker les images importe dans un tableau de cellules?
        %2ème étape : lecture de l’image et application des premiers traitements
        disp(’Compute edge map…’) ;
        f=1-I/255; %I correspond à la matrice 96
        f0=gaussianBlur(f,1) ;
        disp(’Compute the traditional external force…’) ;
        [px,py]=gradient(f0) ;
    end

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 9
    Par défaut
    Ca marche à merveille
    Merci beaucoup Gooby.
    Ca avait l'air simple pourtant .

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

Discussions similaires

  1. Opération sur matrices contenues dans des cells
    Par papi13 dans le forum MATLAB
    Réponses: 2
    Dernier message: 04/06/2011, 19h15
  2. Réponses: 8
    Dernier message: 04/04/2011, 10h40
  3. strcmp dans une cell array
    Par fuyo2004 dans le forum MATLAB
    Réponses: 2
    Dernier message: 15/04/2010, 14h05
  4. Réponses: 2
    Dernier message: 02/10/2007, 11h42
  5. Réponses: 8
    Dernier message: 09/07/2006, 14h42

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