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

ImageJ Java Discussion :

Rectangle autour de mes cellules


Sujet :

ImageJ Java

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 25
    Par défaut Rectangle autour de mes cellules
    bonjour,

    étant débutante sur ImageJ j'aimerai écrire un macro qui automatiquement pourra mettre des rectangles autour de toutes mes cellules que j'identifie déjà grâce à un threshold, je vous donne un petit exemple de ce que j'écris au début:

    run("Bandpass Filter...", "filter_large=50 filter_small=3 suppress=None tolerance=5");
    setAutoThreshold("MaxEntropy dark");
    //run("Threshold...");
    run("Set Measurements...", "area center limit redirect=None decimal=3");
    run("Analyze Particles...", "size=70-400 circularity=0.20-1.00 display clear include add");
    Nom : Capture.PNG
Affichages : 420
Taille : 21,8 Ko

  2. #2
    Membre éprouvé Avatar de Tchoukatroc
    Homme Profil pro
    Soupière
    Inscrit en
    Mai 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Soupière
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 99
    Par défaut
    Bonjour,

    Tu peux binariser ton image à partir du threshold. Sur l'image binaire, tu utilise la fonction find maxima... (fonction de imageJ) avec une noize tolerance de 1. La fonction va te placer un point au centre de chaque cellule. Tu peux ensuite récupérer les coordonnées de ces points grâce à la fonction "getSelectionCoordinates(xpoints, ypoints);" (Built-in macro function) et tu utilise ces coordonnées pour placer tes rectangles.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 25
    Par défaut carrés
    merci ça m'a beaucoup aidé malgré les beug incessants d'imageJ, l'automatisation des carrés voir les générer autour du point central de la cellule je n'arrive pas vraiment à le faire :s

  4. #4
    Membre éprouvé Avatar de Tchoukatroc
    Homme Profil pro
    Soupière
    Inscrit en
    Mai 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Soupière
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 99
    Par défaut
    Peux-nous montrer ta macro pour voir où tu en es ? Si tu as déjà réussi à placer les points, il ne reste plus grand chose à faire.

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 25
    Par défaut
    la Mocro ressemble à ça maintenant, ce code me permet d'identifier les points centraux de mes cellules:

    [run("Bandpass Filter...", "filter_large=50 filter_small=3 suppress=None tolerance=5");
    setAutoThreshold("MaxEntropy dark");
    //run("Threshold...");
    run("Set Measurements...", "area center limit redirect=None decimal=3");
    run("Analyze Particles...", "size=50-400 circularity=0.20-1.00 display clear include add");
    run("Find Maxima...", "noise=10 output=[Point Selection] exclude above");]


    Nom : Capture2.PNG
Affichages : 409
Taille : 34,2 Ko

  6. #6
    Membre éprouvé Avatar de Tchoukatroc
    Homme Profil pro
    Soupière
    Inscrit en
    Mai 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Soupière
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 99
    Par défaut
    bonjour,

    tu peux essayer avec ce code et me dire si ça fonctionne?

    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
    imageName = getTitle();
    run("Bandpass Filter...", "filter_large=50 filter_small=3 suppress=None tolerance=5");
    setAutoThreshold("MaxEntropy dark");
     
    run("Duplicate...", "duplicate");
    duplicata = getTitle();
     
    selectWindow(imageName);
    run("Set Measurements...", "area center limit redirect=None decimal=3");
    run("Analyze Particles...", "size=50-400 circularity=0.20-1.00 display clear include add");
     
    selectWindow(duplicata);
    setAutoThreshold("MaxEntropy dark");
    run("Convert to Mask", "method=MaxEntropy background=Dark black");
    run("Find Maxima...", "noise=1 output=[Point Selection] exclude above");
    getSelectionCoordinates(xpoints, ypoints);
     
    close(duplicata);
    selectWindow(imageName);
    rectangleSize = 20;
    for(i=0; i<lengthOf(xpoints); i++){
    	makeRectangle(xpoints[i]-(rectangleSize/2), ypoints[i]-(rectangleSize/2), rectangleSize, rectangleSize);
    	run("Add Selection...");
    }

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 25
    Par défaut
    je suis aux anges ça marche parfaitement merci infiniment c'est vraiment super Merci Tchoukatroc

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 25
    Par défaut tchoukatroc
    Bonjour,

    Excuses moi de t’embêter mais j'essaye maintenant d’extraire chacun de mes rectangles pour faire un duplicate penses tu que je m'y prend bien en faisant ainsi ?

    roiManager("select",0);
    run("Duplicate...","duplicate");

    roiManager("select",1);
    run("Duplicate...","duplicate");

    .....etc

    et ainsi de suite pour les autres bon, je sais qu'une boucle serait plus judicieuse pour ne pas avoir à répéter ses deux lignes plusieurs fois, mais je n'arrive pas à trouver la ligne qui pourra m’amener à récupérer le nombre de cellules identifiées par des carrés...

  9. #9
    Membre éprouvé Avatar de Tchoukatroc
    Homme Profil pro
    Soupière
    Inscrit en
    Mai 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Soupière
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 99
    Par défaut
    Bonjour,

    Oui, une boucle "for" serait mieux. Pour connaitre le nombre de carrés, tu peux utiliser la fonction "roiManager("count")" qui te donnera le nombre de régions dans le ROI manager, ce qui correspond au nombre de cellules avec un rectangle. Dans ce cas, il serait aussi préférable de nettoyer le ROImanager au début de la macro, par la fonction roiManager("Reset"), qui va effacer les anciennes régions présentes dans le ROImanager. Aussi, tu devrais peut-être sauver ton duplicata puis le fermer, car si tu as beaucoup d'images ou si elle sont lourdes, tu risques de saturer la mémoire vive de l'ordinateur (même si je ne pense pas que ce soit ton cas, vu l'exemple que tu as montré).

    Voila, n'hésite pas à demander si tu as d'autres questions

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 25
    Par défaut Tchoukatroc
    j'ai fais une boucle en récupérant le nombre de carré ce qui donne un truc du genre:

    a=roiManager("count")

    for(i=0; i<a;i++)
    {
    roiManager("select",i);
    run("Duplicate...","duplicate");
    }

    mais sachant que je ne traite pas une image je traite une video je me demande si c'est ça qui pause problème, aussi quand je lance le programme avec la boucle que j'ai mis en place il ne duplique que la première cellule et pour les restantes il me renvoi un message d'erreur de ce type:

    Nom : Capture.PNG
Affichages : 415
Taille : 25,1 Ko

  11. #11
    Membre éprouvé Avatar de Tchoukatroc
    Homme Profil pro
    Soupière
    Inscrit en
    Mai 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Soupière
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 99
    Par défaut
    Oui,

    A mon avis, le problème vient du fait que, quand imageJ duplique ta première image, le duplicata devient l'image active. Donc lors du second tour de boucle, lorsque tu appelles la fonction roiManager("select",i);, imageJ va essayer de placer la région 2 sur ton duplicata, qui est beaucoup plus petit que l'image d'origine et qui donc ne peut pas contenir la région 2. Pour résoudre ce problème, il faut tout d'abbord récupérer une référence à ton image de base, son nom par exemple. Cette ligne existe déjà dans la macro, c'est imageName = getTitle(); Ce qu'il faut faire maintenant, c'est à chaque tour de boucle, sélectionner l'image de départ (sur laquelle tu as placé les régions) pour qu'elle soit l'image active, et donc sur laquelle sera placée la région. Pour celà, tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    a=roiManager("count");
     
    for(i=0; i<a;i++)
    {
    selectWindow(imageName);
    roiManager("select",i);
    run("Duplicate...","duplicate");
    }
    Ça devrait résoudre ton problème. Attention aussi de ne pas oublier le point virgule après a=roiManager("count")

  12. #12
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 25
    Par défaut
    T'avais raison c'est vrai que forcément lors de la boucle il reprend cette même image dupliquée comme image de référence, merci infiniment je n'aurai franchement pas su comment faire si tu n'étais pas là merci Tchoukatroc

  13. #13
    Membre éprouvé Avatar de Tchoukatroc
    Homme Profil pro
    Soupière
    Inscrit en
    Mai 2014
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Soupière
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2014
    Messages : 99
    Par défaut
    De rien

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

Discussions similaires

  1. colorer mes cellules années
    Par adriennoob dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/04/2010, 13h46
  2. [E-07] problème de recalculation de mes cellules
    Par law56100 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/03/2009, 04h10
  3. rectangle autour de bouton
    Par kaselander dans le forum Mise en page CSS
    Réponses: 12
    Dernier message: 04/02/2009, 08h25
  4. Modification du format date de mes cellules excel
    Par largo9020 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/11/2006, 14h53
  5. Rotation d'un rectangle autour du centre de gravité
    Par bucheron dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 22/06/2004, 11h01

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