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 :

Afficher sur une succession de fichiers images .tif une mesure de force


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut Afficher sur une succession de fichiers images .tif une mesure de force
    Bonjour à tous,

    Je n'ai jamais utiliser Matlab pour faire du traitement d'image c'est pourquoi je fais appel à votre aide à tous.
    Mon but consiste à faire apparaître sur un fichier .tif (qui est plus particulièrement un "stack" c'est-à-dire une "pile d'images" -quelques centaines --) des mesures de forces appropriées aux images en question.

    Pour être plus clair :
    - la force se mesure grâce à la réflexion d'un faisceau lumineux sur une feuille millimétrée. A l'instant t=0, ce faisceau ne bouge pas. Dès lors qu'une force s'applique, ce faisceau va effectuer des montées/descentes suivant la force exercée.
    - avec ImageJ, j'ai déterminé et extrait les résultats des mouvements effectués (en pixels) par le faisceau lumineux dans un fichier .xls (Excel) et .txt.

    Mon problème commence :
    - à partir de ce fichier .xls ou .txt, je voudrai convertir ces pixels en distance (unité SI : le mètre) et je pourrai ainsi en déduire la force exercée.
    - ensuite, il faudrait que j'affiche sur chaque image, la force correspondante mesurée et calculée.

    J'espère que mes explications ont été assez claires afin que vous puissiez me donner quelques pistes de recherches. Je vous remercie tous par avance de m'avoir lu et vous remercie encore plus si vous pouvez m'aider.

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Salut,

    et ou bloques-tu précisément? As-tu commencé à coder quelque chose?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    Salut Magelan,

    Dans un premier temps j'essaie d'ouvrir un fichier .tif qui contient une environ 1000 images. J'ai essayé de coder de plusieurs façons afin que Matlab me lise toutes ces images dans une même fenêtre. Je n'y suis pas parvenu pour l'instant.

    J'ai essayé ce code, trouvé sur un blog Matlab
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    clear
    close all
    test=uint8(zeros(288,352,1,1172));
    for frame=1:1172
    [test(:,:,:,frame),map]=imread('test.tif',frame);
    end
    montage(test,map);
    Ce code m'affiche toutes les images dans une même fenêtre ...
    Ce que je voudrai c'est un code qui m'affiche les images les unes après les autres dans une même fenêtre avec un petit pas de temps régulier.

    Le format de mon image étant 288x352 et comportant 1172 images.
    En fait je bloque à l'étape initiale de ce que je veux faire. Parce que si Matlab ne peux pas me lire les 1172 images à la suite comment fera-t-il pour toutes les traiter ?

    Sinon, naïvement j'ai essayé tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    clear 
    close all 
    for i=1:1172
    img=imread('test.tif',i)
    imshow(img)
    Mais rien ne se passe ...

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Le premier code que tu as donné permet de stocker toutes les images dans la variable test.
    Si tu veux afficher les images les unes à la suite des autres, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    clear
    close all
    test=uint8(zeros(288,352,1172));
    figure
    for frame=1:1172
    [test(:,:,frame),map]=imread('test.tif',frame);
    imshow(test(:,:,frame),map);
    pause(0.2);
    end
    pause(0.2) permet de faire une pause de 0.2 secondes entre chaque affichage.

    Ensuite tu peux accéder à chaque image via la variable test.
    test(:,:,1) renvoie la première, test(:,:,2) la deuxième, etc...

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    Merci Magelan, ça marche très bien !

    Beaucoup de personnes cherchent à ouvrir des stack sous forme de .tif et je considère avoir beaucoup de chance d'avoir eu ton aide.

    Je vais maintenant me pencher sur le traitement d'images à proprement parler. En fait, sur le logiciel ImageJ, je peux suivre la position du "centre de masse" de ma tâche lumineuse sur chaque image composant le stack et en tirer les coordonnées.
    Est-il possible de le faire sous Matlab via une fonction de traitement d'images Matlab ?

    Encore une fois merci de m'avoir enlever une des très grosses épines du pied Magelan. Il me reste encore pas mal de choses à résoudre. Souhaite-moi bonne chance ^^

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Oui, c'est possible en utilisant les différents outils de la toolbox traitement d'images.

    Il faut tout d'abord que tu définisses précisément les méthodes que tu souhaites utiliser puis tu pourras chercher dans les outils de matlab les différentes fonctions qui te simplifieront la tâche.

    Par exemple tu pourrais effectuer un seuillage de ton image pour identifier ta tâche dans chaque image et ensuite soit travailler directement sur l'image binaire résultant de ce seuillage, soit faire un étiquetage et travailler sur chaque région.

    Les fonctions qui pouraient t'être utile :
    graythresh, bwlabel, regionprops, ...

    Bonne chance!

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    Merci Magelan. Si ça ne te gêne pas, je te tiendrai au courant de mon avancé. Et je tâcherai de mettre les balises code à l'avenir.

    Bonne soirée

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    Salut Magelan,

    J'ai essayé d'isoler ma tâche lumineuse (qui oscille au fil des images) avec ce code. Je me suis aidé d'un tutoriel. Malheureusement ça ne me donne pas grand chose. Peux-tu jeter un coup d'oeil sur ce qui cloche ?
    Je te remercie d'avance.

    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
    clear
    close all
    I=uint8(zeros(288,352,1172));
    figure
    for frame=1:1172
        [I(:,:,frame),map]=imread('test.tif',frame);
        imshow(I(:,:,frame),map);
        background=imopen(I,strel('disk',15));
        figure,surf(double(background(1:8:end,1:8:end))),zlim([0 255]);
        set(gca,'ydir','reverse');
        I2=imsubstract(I,background);
        figure,imshow(I2);
        I3=imadjust(I2);
        figure,imshow(I3);
        pause(0.1);
    end
    J'ai mis les fonctions Matlab de traitement d'images à l'intérieur de la boucle for afin que celles-ci s'appliquent à toutes les images. Je ne sais pas si c'est la bonne manière de faire.
    Par la suite, j'essaierai de me focaliser sur le centre de masse de la tâche lumineuse au fil des images et d'en tirer les coordonnées.

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    J'ai aussi essayé ce code avec les fonctions Matlab que tu m'avais conseillé.

    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
    clear
    close all
    I=uint8(zeros(288,352,1172));
    figure
    for frame=1:1172
        [I(:,:,frame),map]=imread('test.tif',frame); 
        imshow(I(:,:,frame),map);
        niveau=graythresh(I);
        I2=im2bw(I,niveau);
        figure;
        subplot(1,2,1);
        imshow(I);
        title('Essai code')
        subplot(1,2,2);
        imshow(I2)
        pause(0.1);
    end
    celui-ci est accompagné d'un message d'erreur qui est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ??? Error using ==> im2bw>parse_inputs at 101
    IM2BW: Truecolor RGB image has to be an M-by-N-by-3 array.
     
    Error in ==> im2bw at 37
    [A,map,level] = parse_inputs(varargin{:});
     
    Error in ==> stack at 9
        I2=im2bw(I,niveau);
    Aurais-tu une idée de mon (mes) erreur(s) ?

  10. #10
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par afortiori Voir le message
    J'ai mis les fonctions Matlab de traitement d'images à l'intérieur de la boucle for afin que celles-ci s'appliquent à toutes les images. Je ne sais pas si c'est la bonne manière de faire.
    Pour commencer, tu peux te limiter à 2,3 images (voir une seule image) tout en gardant en mémoire que la méthode doit être automatiser pour l'ensemble de tes images.

    Première remarque, à certains endroits tu appliques des opérateurs à l'ensemble de tes images, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    background=imopen(I,strel('disk',15));
    tu fais une ouverture sur toute ta pile d'image. Cela ne provoque pas d'erreur car imopen peut s'appliquer sur des tableaux à n dimensions. Mais je ne pense pas que tu voulais faire une ouverture sur toutes tes images d'un coup?
    Par exemple :
    provoque le message d'erreur que tu as donné car im2bw s'applique à une image en niveau de gris ou rgb mais non à une pile d'images.

    Ensuite, tu parles de tutoriel, ce serait bien que tu indiques ou tu as pioché ce tutoriel...
    De plus les méthodes en traitement d'image dépendent fortement du type d'image à traiter et de l'information contenu dans cette image. Es-tu sûr que le tutoriel peut s'appliquer à tes images? As-tu fait une recherche des méthodes de segmentation qui peuvent s'appliquer à tes images?

    Par exemple graythresh permet de déterminer un niveau de seuil automatique qui utilise la méthode Otsu en minimisant la variance intraclasse entre les nivaux de gris. Sans connaitre tes images, c'est difficile de dire si c'est la bonne méthode. (l'avantage, c'est que cette méthode s'adaptera à chaque image de ta pile)

    Une petite question : en relisant le post, tu dis l'avoir fait sous imageJ et exporté les coordonnées des centres, pourquoi ne pas utilisé ces résultats? Sinon, as-tu essayé de chercher les algorithme qui sont derrière les outils utilisés par imageJ?


    Pour la méthode avec threshold, fais un test sur 1 image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    clear
    close all
    IEC = imread('test.tif',1); 
    imshow(IEC,map);
    niveau=graythresh(IEC);
    IECBW=im2bw(IEC,niveau);
    % La fonction im2bw permet de créer un masque, il faut appliquer ce masque à ton image pour extraire l'information utile
    IEC2 = double(IEC).* IECBW;
    figure;
    subplot(1,2,1);
    imshow(IEC,map);
    title('Essai code')
    subplot(1,2,2);
    imshow(IEC2,map)

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    Le tutoriel dont je parlais se trouve sur le lien suivant :
    http://www.mathworks.es/access/helpd.../getting3.html

    Je peux te présenter quelques images venant de mon stack .tif (pour une vidéo de 40 sec j'ai exporter 1172 images en .bmp que j'ai converti en .tif, ensuite avec un plugin ImageJ, j'ai rassemblé ces 1172 images .tif en un fichier .tif unique)
    Voici un entrait : voir pièce jointe .zip

    Par ailleurs, je n'ai pas utilisé les résultats provenant de ImagaJ car je désire au final faire apparaître dans une fenêtre Matlab mon défilement d'images avec l'affichage en simultané de la force exercée correspondante à chaque image. Est-ce que tu me comprends ?

    En tout cas, encore merci de me lire et de me venir en aide.
    Fichiers attachés Fichiers attachés

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    Par contre Magelan, j'ai testé le code que tu as écris dans ton dernier post et un message d'erreur apparaît :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ??? Undefined function or variable 'map'.
     
    Error in ==> stack2 at 4
    imshow(IEC,map);

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    C'est encore un post de ma part, désolé ...
    J'ai retiré les 'map' du code et j'obtiens la figure qui se trouve en pièce jointe.

    On observe alors que le code me donne, dans un sens, le contraire de ce que je veux obtenir. En effet, je voudrai isoler la tâche lumineuse (qui est très blanche) du reste de l'image. Là, Matlab me garde ce que je voudrai enlever.
    Images attachées Images attachées  

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par afortiori Voir le message
    Par ailleurs, je n'ai pas utilisé les résultats provenant de ImagaJ car je désire au final faire apparaître dans une fenêtre Matlab mon défilement d'images avec l'affichage en simultané de la force exercée correspondante à chaque image. Est-ce que tu me comprends ?
    Ok, mais dans imageJ, tu devais bien régler des paramètres? As-tu regardé dans la doc les méthodes que tu as utilisés?

    Citation Envoyé par afortiori
    On observe alors que le code me donne, dans un sens, le contraire de ce que je veux obtenir. En effet, je voudrai isoler la tâche lumineuse (qui est très blanche) du reste de l'image. Là, Matlab me garde ce que je voudrai enlever.
    J'ai plutôt l'impression que ta tâche lumineuse se trouve dans la partie blanche de ton résultat, non?

    De toute manière, en l'état, utilisé graytresh n'est pas adapté pour tes images. Le problème revient donc à chercher un seuil qui te permette d'isoler la tâche.
    Par exemple pour la première image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    I = imread('test.tif',1); 
    II = uint8(zeros(size(I))); % matrice qui contient le résultat
    seuil = 110;
    masque = I>seuil;
    II(masque)= I(masque);
    figure,imshow(II);
    Après il faut savoir si ton seuil doit s'adapter aux images (si la luminosité de ta tâche varie au cours du temps) ou si il faut utiliser d'autres méthodes).

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    Alors pour ImageJ, tu as une fenêtre avec des onglets. Je traite donc mon stack .tif directement car ImageJ peut les lire. Pour isoler ma tâche lumineuse je clique sur Image>Adjust>Thresold. Puis j'isole ma tâche avec des barre de défilement.
    Je ne code donc à aucun moment avec ImageJ. Après, tu me parles de doc ImageJ et je ne sais pas trop où je pourrai les lire.

    Sinon, je suis d'accord avec toi, ma tâche lumineuse se trouve dans la zone blanche de mon résultat, ce qui est problématique non ? Ce que je cherche à faire, afin d'étudier les positions de ma tâche, est bien d'isoler la tâche et "la rendre noire" non ?

    Je partage ton avis pour le seuil. Mais pour cela, il me faut connaître l'histogramme de mon image afin de savoir quel est le seuil à étudier. J'ai regardé s'il existait une fonction Matlab histogramme mais je n'en ai pas trouvé (ou bien pas assez bien cherché ...)

    Je te remercie (encore et encore !) de répondre à mes posts à chaque fois.
    Et j'essaie tout de suite le code que tu me proposes.

    Je te souhaite une bonne fête nationale !

  16. #16
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Citation Envoyé par afortiori Voir le message
    Alors pour ImageJ, tu as une fenêtre avec des onglets. Je traite donc mon stack .tif directement car ImageJ peut les lire. Pour isoler ma tâche lumineuse je clique sur Image>Adjust>Thresold. Puis j'isole ma tâche avec des barre de défilement.
    Les barres de défilement règle le seuil qui permet de séparer l'arrière plan et la partie que tu veux conserver.

    Citation Envoyé par afortiori Voir le message
    Je ne code donc à aucun moment avec ImageJ. Après, tu me parles de doc ImageJ et je ne sais pas trop où je pourrai les lire.
    Un bon début pour chercher la doc de imageJ, c'est d'aller sur leur site... (ou regarder dans le menu help du logiciel).

    Citation Envoyé par afortiori Voir le message
    Sinon, je suis d'accord avec toi, ma tâche lumineuse se trouve dans la zone blanche de mon résultat, ce qui est problématique non ? Ce que je cherche à faire, afin d'étudier les positions de ma tâche, est bien d'isoler la tâche et "la rendre noire" non ?
    Pour les masques binaires, on met généralement en blanc (donc à 1) les objets que l'on veut conserver et en noire (0) le reste. Comme cela, en multipliant le masque par l'image d'origine, on obtient directement les objets utiles (c'est ce que j'ai fait dans mon dernier code). Après il n'y a pas de règle, à toi de faire ce qui te parait le plus logique.

    Citation Envoyé par afortiori Voir le message
    Je partage ton avis pour le seuil. Mais pour cela, il me faut connaître l'histogramme de mon image afin de savoir quel est le seuil à étudier. J'ai regardé s'il existait une fonction Matlab histogramme mais je n'en ai pas trouvé (ou bien pas assez bien cherché ...)
    Effectivement, tu n'as pas dû chercher bien longtemps...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    help hist
    help imhist

  17. #17
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    Ouais je t'avouerai que je ne peux pas passer trop de temps dans la recherche de nouvelles fonctions Matlab parce que je suis actuellement en stage et mes manipulations me prennent pas mal de temps.
    J'essaie d'obtenir le plus de mesures possibles afin de pouvoir les exploiter par la suite.
    Je me suis dis qu'en demandant de l'aide sur ce forum, je m'offrais un gain de temps non négligeable.

  18. #18
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    C'est à toi de voir... en même temps, prendre 30s pour taper 'histogram image' dans la doc de matlab ou taper 'matlab histogram image' sur internet, je ne suis pas sur que cela te ralentisse énormément.

  19. #19
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    C'est vrai tu as raison Magellan.
    J'ai des excuses quelque peu bidons ... c'est sûrement le stress qui me fait dire ça ("taper ça" serait plus juste).
    Je me montrerai plus impliqué davantage au niveau du traitement d'image avec Matlab.

    Merci de m'avoir ouvert les yeux

  20. #20
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 31
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Appelons stack1 mon image/animation d'origine et
    stack2 mon image/animation qui présente un seuillage

    Voici le code qui me permet de lire le stack qui affiche ma tâche lumineuse (à peu près "isolé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
    clear
    close all
    I=uint8(zeros(288,352,50));
    I=im2double(I);
    II=uint8(zeros(size(I)));
    II=im2double(II);
    %cont1=edge(I,'prewitt');
    %cont2=edge(I,'canny');
    figure
    subplot(1,2,1);
    axis('image')
    for frame=1:50
        [I(:,:,frame),map]=imread('stack.tif',frame);
        seuil = 120;
        masque = I>seuil;
        II(masque)= I(masque);
        imshow(I(:,:,frame),map);
        imshow(II(:,:,frame),map);
        subplot(1,2,2)
        axis('image')
        pause(0.1);
    end
    Comme vous pouvez le voir, j'essaie d'afficher sur une seule fenêtre "Figure" de Matlab, mes deux stacks à la fois et qui évoluent au cours du temps : le stack1 à gauche, mon stack2 à droite
    Cependant à la gauche de ma fenêtre subplot(1,2,1) se trouve une image figée correspondant à la première image de mon stack2, alors que j'aurai voulu afficher le stack1. En revanche en subplot(1,2,2) c'est nickel.

    Merci pour vos éléments de réponses qui me feront avancer

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/08/2011, 13h48
  2. Réponses: 9
    Dernier message: 12/05/2010, 20h37
  3. Lecture Propriétés d'un fichier Image (tif)
    Par wawan3 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/06/2008, 18h59
  4. Réponses: 4
    Dernier message: 11/07/2007, 19h40
  5. intégrer un fichier image dans une base de donnée?
    Par Lody dans le forum Requêtes
    Réponses: 9
    Dernier message: 16/03/2006, 20h08

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