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 :

Watershed en 3D


Sujet :

Images

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2016
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Watershed en 3D
    Bonjour,

    Dans le cadre d'un projet j'ai dû développer un programme matlab pour analyser des cellules de la plaque de croissance des tibias de rats. Jusqu'à présent, tout fonctionne. Les images sont des stack d'images (piles d'images contenant plusieurs images 2D appelées slices) en format .lsm provenant d'un microscope confocal Zeiss et tous les traitements d'images sont alors réalisés en 3D.
    Les images sont d'abord filtrées par un filtre gaussien en 3D, puis normalisées selon la méthode d'égalisation adaptative d'histogramme limitée en contraste (CLAHE en anglais). Enfin, le thresholding est appliqué aux images pour obtenir des images binaires.

    Cependant, sur nos images, certains cellules sont tellement proches sur certaines slices qu'elle apparaissent connectées après le thresholding, mais elles sont bien distinctes sur les autres slices. Du coup, cela les rend non analysables car les mesures de volume total et longueur/largeur qui se basent sur les dimensions en terme de pixels/voxels vont être tronquées.

    Pour pallier à ce problème, j'ai donc pensé qu'il serait judicieux d'utiliser la méthode du watershed segmentation, qui sépare les objets. J'ai fait un premier essai avec un méthode qui existe déjà dans matlab :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for val=1:ImNumber(2)
        Stack2(val).data=~bwareaopen(~Stack(val).data,5);
        D(val).data=-bwdist(~Stack(val).data);
        Ld(val).data=watershed(D(val).data);
        Stack2(val).data=Stack(val).data;
        Stack2(val).data(Ld(val).data==0)=0;
        mask(val).data=imextendedmin(D(val).data,10);
        D2(val).data=imimposemin(uint8(D(val).data),uint8(mask(val).data));
        Ld2(val).data=watershed(D2(val).data);
        Stack3(val).data=Stack(val).data;
        Stack3(val).data(Ld2(val).data==0)=0;
    end
    ImNumber est le nombre d'images au total présentes dans mon stack.
    Stack(val).data correspond à l'image n° val.

    Cependant, cette méthode réalise un watershed différent pour chaque slice séparément sans réellement prendre en compte la structure 3D des cellules...

    J'ai essayé la fonction watershed du logiciel ImageJ et ça fonctionne à merveille ! Je cherche donc à reproduire exactement la même chose dans matlab mais je ne sais pas par où commencer.

    Quelqu'un saurait-il comment procéder pour implémenter ça ou l'aurait déjà fait ? J'ai essayé de chercher car j'imagine que des personnes ont dû coder ça avant moi mais je n'ai pas trouvé de code fonctionnant sur matlab avec mon type d'image...


    Merci beaucoup, n'hésitez pas si vous avez des questions, je ne suis pas sûre que tout soit très clair !

  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
    Bonjour,

    il y a un exemple de watershed 3D dans la documentation de la fonction watershed dans MATLAB. Pour que tu puisses l'appliquer à tes données, je pense que tu devras mettre ta série de slices dans un tableau en 3D (comme la variable bw de l'exemple).
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    Bonjour,

    a priori, le code utilisé dans ta boucle doit pouvoir être appliqué sans trop de modification à l'image 3D ! Le seul truc à rajouter est la création de l'image 3D sous la forme d'un tableau 3D, en concaténant les variables "Stack(val).data". la fonction bwareaopen n'existe pas forcement pour le 3D, mais on peut utiliser un étiquetage, calculer la taille de chaque label, et ne selectionner que les partcules assez grandes.

    Une petite précision tout de même : le watershed de ImageJ et de Matlab sont un peu différents. La version "ImageJ" correspond à la succession des traitements de calcul de la carte des distances, inversion, calcul des frontières de la watershed, et combinaison avec l'image binaire d'origine. De plus le watershed de ImageJ est limité au cas planaire. On trouve des watershed 3D (voir par exemple le plugin Morphological Segmentation).

  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
    Citation Envoyé par Kangourou Voir le message
    la fonction bwareaopen n'existe pas forcement pour le 3D
    Si, bwareaopen gère les images 3D aussi :

    Citation Envoyé par Documentation de bwareaopen
    BW2 = bwareaopen(BW,P,conn)

    BW — Binary image
    real, nonsparse, logical or numeric array of any dimension
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Membre éclairé
    Avatar de Kangourou
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 859
    Points
    859
    Par défaut
    ha ha,
    au temps pour moi !

    Bon, ben du coup la transposition à un traitement intégral en 3D ne devrait pas poser de soucis (du moins en théorie...).

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 352
    Points
    352
    Par défaut
    le traitement 3D risque de te prendre un temps fou.
    j'ai deja eu un traitement similaire a faire sur des kératinocyte. le plus efficace était de chercher le centre des partie concave des images 2d. puis de relié les centre avec le centre le plus proche de l'image du dessus ou du dessous.
    une fois cette étape faite tu repère les regions blanche contenant deux axes et la tu fait un watershed en fct de la distance aux axes.
    par contre il faut

    un seuil pour arrêter la recherche de zones concaves ( en gros il te faut la taille min d'une cellule avec un peu de marge), un seuil de distance entre 2 centre dans la recherche 3d.
    ça ne marche que si ta resolution en z est suffisante pour ne pas avoir de trop grand décalage de centre.

Discussions similaires

  1. Marqueurs pour le watershed
    Par MohEllayali dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 24/05/2008, 17h24
  2. fuzzy watershed segmentation (LPE floue)
    Par abir2007gallas dans le forum Images
    Réponses: 2
    Dernier message: 16/05/2008, 12h41
  3. Binariser une image segmentée avec watershed
    Par miss_angel dans le forum Images
    Réponses: 3
    Dernier message: 30/04/2008, 15h34
  4. la watershed (lpe)
    Par jameshamm dans le forum Images
    Réponses: 3
    Dernier message: 29/02/2008, 16h04
  5. Watershed
    Par nicolas66 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/03/2005, 17h25

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