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 :

ROI manager: enregistrer des ROIs multiples en .jpg


Sujet :

ImageJ Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Doctorant en Biologie
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Doctorant en Biologie
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 5
    Points
    5
    Par défaut ROI manager: enregistrer des ROIs multiples en .jpg
    Bonjour à tous,

    J'ai des scans de plaques de 12 puits dans lesquels sont des larves de poissons. Il y a a chaque fois 3 plaques par scan, qui sont toujours positionées exactement au même endroit. J'aimerais pouvoir sélectionner 36 Rois par scans, les enregistrer dans un dossier en .jpeg, afin que je puisse ensuite lancer un Batch processing qui analyze les particules et me donne leur taille (la taille des larves donc).

    Pour l'instant, j'ai réussi à écrire la macro qui me séléctionne et renomme tous les ROIs. En fouillant sur le net, j'ai aussi trouvé comment enregistré les ROIs en .jpeg. Malheureusement, ce dernier bout de code m'oblige à cliquer 2 fois pour chaque enregistrement (pour valider le nom de fichier et valider le chemin). Moi j'aimerais que le nom de fichier utilisé pour le .jpg du roi soit justement le nom du ROI (ex. 1-C4), et que le chemin soit toujours le même. Je pourrais ainsi m'épargner de nombreux clics, sachant que le nombre de ces chers poissons est de 90'000 environs.

    Voici le code:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    roiManager("reset")
     
    // this select ROI of the top plate
     
    makeOval(1520, 80, 560, 560)
    roiManager("Add")
    makeOval(2130, 80, 560, 560)
    roiManager("Add")
    makeOval(2740, 80, 560, 560)
    roiManager("Add")
    makeOval(3350, 80, 560, 560)
    roiManager("Add")
     
    makeOval(1520, 690, 560, 560)
    roiManager("Add")
    makeOval(2130, 690, 560, 560)
    roiManager("Add")
    makeOval(2740, 690, 560, 560)
    roiManager("Add")
    makeOval(3350, 690, 560, 560)
    roiManager("Add")
     
    makeOval(1520, 1300, 560, 560)
    roiManager("Add")
    makeOval(2130, 1300, 560, 560)
    roiManager("Add")
    makeOval(2740, 1300, 560, 560)
    roiManager("Add")
    makeOval(3350, 1300, 560, 560)
    roiManager("Add")
     
    //this select ROI in the middle plate
     
    makeOval(1520, 2100, 560, 560)
    roiManager("Add")
    makeOval(2130, 2100, 560, 560)
    roiManager("Add")
    makeOval(2740, 2100, 560, 560)
    roiManager("Add")
    makeOval(3350, 2100, 560, 560)
    roiManager("Add")
     
    makeOval(1520, 2710, 560, 560)
    roiManager("Add")
    makeOval(2130, 2710, 560, 560)
    roiManager("Add")
    makeOval(2740, 2710, 560, 560)
    roiManager("Add")
    makeOval(3350, 2710, 560, 560)
    roiManager("Add")
     
    makeOval(1520, 3320, 560, 560)
    roiManager("Add")
    makeOval(2130, 3320, 560, 560)
    roiManager("Add")
    makeOval(2740, 3320, 560, 560)
    roiManager("Add")
    makeOval(3350, 3320, 560, 560)
    roiManager("Add")
     
    //this select ROI of the bottom plate
     
    makeOval(1520, 4120, 560, 560)
    roiManager("Add")
    makeOval(2130, 4120, 560, 560)
    roiManager("Add")
    makeOval(2740, 4120, 560, 560)
    roiManager("Add")
    makeOval(3350, 4120, 560, 560)
    roiManager("Add")
     
    makeOval(1520, 4730, 560, 560)
    roiManager("Add")
    makeOval(2130, 4730, 560, 560)
    roiManager("Add")
    makeOval(2740, 4730, 560, 560)
    roiManager("Add")
    makeOval(3350, 4730, 560, 560)
    roiManager("Add")
     
    makeOval(1520, 5340, 560, 560)
    roiManager("Add")
    makeOval(2130, 5340, 560, 560)
    roiManager("Add")
    makeOval(2740, 5340, 560, 560)
    roiManager("Add")
    makeOval(3350, 5340, 560, 560)
    roiManager("Add")
     
    //this will rename the ROIs with the well IDs
     
    roiManager("Select", 0)
    roiManager("Rename", "1-A4")
    roiManager("Select", 1)
    roiManager("Rename", "1-A3")
    roiManager("Select", 2)
    roiManager("Rename", "1-A2")
    roiManager("Select", 3)
    roiManager("Rename", "1-A1")
    roiManager("Select", 4)
    roiManager("Rename", "1-B4")
    roiManager("Select", 5)
    roiManager("Rename", "1-B3")
    roiManager("Select", 6)
    roiManager("Rename", "1-B2")
    roiManager("Select", 7)
    roiManager("Rename", "1-B1")
    roiManager("Select", 8)
    roiManager("Rename", "1-C4")
    roiManager("Select", 9)
    roiManager("Rename", "1-C3")
    roiManager("Select", 10)
    roiManager("Rename", "1-C2")
    roiManager("Select", 11)
    roiManager("Rename", "1-C1")
     
    roiManager("Select", 12)
    roiManager("Rename", "2-A4")
    roiManager("Select", 13)
    roiManager("Rename", "2-A3")
    roiManager("Select", 14)
    roiManager("Rename", "2-A2")
    roiManager("Select", 15)
    roiManager("Rename", "2-A1")
    roiManager("Select", 16)
    roiManager("Rename", "2-B4")
    roiManager("Select", 17)
    roiManager("Rename", "2-B3")
    roiManager("Select", 18)
    roiManager("Rename", "2-B2")
    roiManager("Select", 19)
    roiManager("Rename", "2-B1")
    roiManager("Select", 20)
    roiManager("Rename", "2-C4")
    roiManager("Select", 21)
    roiManager("Rename", "2-C3")
    roiManager("Select", 22)
    roiManager("Rename", "2-C2")
    roiManager("Select", 23)
    roiManager("Rename", "2-C1")
     
    roiManager("Select", 24)
    roiManager("Rename", "3-A4")
    roiManager("Select", 25)
    roiManager("Rename", "3-A3")
    roiManager("Select", 26)
    roiManager("Rename", "3-A2")
    roiManager("Select", 27)
    roiManager("Rename", "3-A1")
    roiManager("Select", 28)
    roiManager("Rename", "3-B4")
    roiManager("Select", 29)
    roiManager("Rename", "3-B3")
    roiManager("Select", 30)
    roiManager("Rename", "3-B2")
    roiManager("Select", 31)
    roiManager("Rename", "3-B1")
    roiManager("Select", 32)
    roiManager("Rename", "3-C4")
    roiManager("Select", 33)
    roiManager("Rename", "3-C3")
    roiManager("Select", 34)
    roiManager("Rename", "3-C2")
    roiManager("Select", 35)
    roiManager("Rename", "3-C1")
     
    //this will save the ROIs as .jpeg
     
    n = roiManager("count"); 
     for (i=0; i<n; i++) { 
            roiManager("select", i); 
            run("Duplicate..."); 
            saveAs("Jpeg"); 
            close(); 
      }
    C'est surtout la dernière partie qui est importante.

    Je pense que l'astuce est assez simple, mais je m'y connais pas encore trop en prog.

    Merci

  2. #2
    Membre habitué 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
    Points : 141
    Points
    141
    Par défaut
    Bonjour,

    J'ai un peu retravaillé ton code, tu peux essayer

    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
    25
    26
    27
    28
    29
     
    roiManager("reset")
     
    dir = getDirectory("Choose a Directory");
     
    // this select ROI of the top plate
    arrayX = newArray(1520, 2130, 2740, 3350);
    arrayY = newArray(80, 690, 1300, 2100, 2710, 3320, 4120, 4730, 5340);
    arrayName = newArray("1-A4","1-A3", "1-A2", "1-A1", "1-B4", "1-B3", "1-B2", "1-B1",
    "1-C4", "1-C3", "1-C2", "1-C1", "2-A4", "2-A3", "2-A2", "2-A1",
    "2-B4", "2-B3", "2-B2", "2-B1", "2-C4", "2-C3", "2-C2", "2-C1",
    "3-A4", "3-A3", "3-A2", "3-A1", "3-B4", "3-B3", "3-B2", "3-B1",
    "3-C4", "3-C3", "3-C2", "3-C1");
     
    setBatchMode(true);
    index =0;
    for(y=0; y<lengthOf(arrayY); y++){
    	for(x=0; x<lengthOf(arrayX); x++){
    		makeOval(arrayX[x], arrayY[y], 560, 560);
    		roiManager("Add");
    		roiManager("Select", index);
    		roiManager("Rename", arrayName[index]);
    		run("Duplicate...", "title=none duplicate");
                    save(dir + arrayName[index]+".jpg"); 
                    close();
    		index++;
    	}
    }
    setBatchMode("exit and display");
    Lance la macro, choisis le dossier dans lequel seront sauvées tes images et ça devrait marcher.
    Je ne sais pas si ton code fonctionnait, mais il y a plein de lignes qui ne finissent pas par un point-virgule, ça peut poser des problèmes
    Je te conseil aussi d'apprendre à te servir des tableaux (array), c'est très utile et ça réduit énormément la taille de ton code, n'hésite pas à demander si tu as besoin d'aide

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Doctorant en Biologie
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Doctorant en Biologie
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 5
    Points
    5
    Par défaut c'est parfait!
    Merci mille fois! C'est juste parfait! Exactement ce que je voulais

    J'imagine donc que ça serait même possible de faire la même chose mais automatisé pour tous les scans (j'ai souvent entre 2-15 scans par jour, sur 3 mois). C.à.d. que la macro créerait automatiquement un dossier dans lequel elle sauve les ROIs et nommerait ce dossier au nom du scan (donc de l'image originale); ça m'éviterais de le faire manuellement pour chaque scans (bon je viens déjà d'économiser 20ans de boulot!) C'est possible ça?

    Sinon est-ce que tu connais un bon bouquin sur ImageJ? Par pour l'instant je fais surtout de l'apprentissage par problème et ignore des trucs ultra pratique (genre la fonction array )

    Merci encore!!!

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Doctorant en Biologie
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Doctorant en Biologie
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 5
    Points
    5
    Par défaut problème pour la suite
    Re!

    Voilà tout marche bien pour ton code, mais j'ai un problème avec la suite.

    J'ai trouvé les étapes à suivre pour isoler et mesure le sac vitellin. ça correspond à ceci:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    run("Window/Level...");
    setMinAndMax(29, 103);
    run("Apply LUT");
    run("Smooth");
    run("Color Threshold...");
    // Color Thresholder 2.0.0-rc-30/1.49v
    // Autogenerated macro, single images only!
    min=newArray(3);
    max=newArray(3);
    filter=newArray(3);
    a=getTitle();
    run("HSB Stack");
    run("Convert Stack to Images");
    selectWindow("Hue");
    rename("0");
    selectWindow("Saturation");
    rename("1");
    selectWindow("Brightness");
    rename("2");
    min[0]=0;
    max[0]=50;
    filter[0]="pass";
    min[1]=157;
    max[1]=255;
    filter[1]="pass";
    min[2]=74;
    max[2]=255;
    filter[2]="pass";
    for (i=0;i<3;i++){
      selectWindow(""+i);
      setThreshold(min[i], max[i]);
      run("Convert to Mask");
      if (filter[i]=="stop")  run("Invert");
    }
    imageCalculator("AND create", "0","1");
    imageCalculator("AND create", "Result of 0","2");
    for (i=0;i<3;i++){
      selectWindow(""+i);
      close();
    }
    selectWindow("Result of 0");
    close();
    selectWindow("Result of Result of 0");
    rename(a);
    // Colour Thresholding-------------
    setAutoThreshold("Default dark");
    setThreshold(255, 255);
    //setThreshold(255, 255);
    run("Convert to Mask");
    run("Fill Holes");
    run("Watershed");
    run("Set Scale...", "distance=1185 known=50 unit=mm");
    run("Analyze Particles...", "size=8-40 circularity=0.10-1.00 show=Masks summarize");
    selectWindow("W&L")
    run("Close")
    selectWindow("Threshold Color")
    run("Close")
    Malheureusement, quand je tente de répéter ceci, ça ne fais jamais 2x la même chose. On dirait que ça bug et que y a une étape qui est mal faite (cf. image)
    On dirait que ImageJ ne fait le boulot (LUT ou color threshold je sais pas) seulement sur le 1er tiers de l'image.... c'est étrange. Déjà vu ça?

    Merci

    Nom : 1-A1.jpg
Affichages : 957
Taille : 48,0 Ko

  5. #5
    Membre habitué 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
    Points : 141
    Points
    141
    Par défaut
    En ce qui concerne l'automatisation pour plusieurs san, c'est tout à fait possible. L'idée serait de récupérer la liste des scan présent dans ton dossier sous forme de tableau grâce à la fonction getFileList(directory). Ensuite, tu crées une boucle qui va ouvrir puis traiter chacun de tes scans. Dans ta boucle, tu peux récupérer le nom de ton scan grâce à la fonction getTitle(), puis tu crées un dossier pour tes régions avec File.makeDirectory(path) en lui donnant le nom de ton scan. N'hésites pas à demander si tu n'y arrive pas

    Non, je ne connait pas de livre pour les macros sur imagej, pour ma part, j'ai fait une formation via un centre d'imagerie.

    Pour ton second problème, je ne voit pas trop d'où peut venir le problème, je ne m'y connait pas vraiment en segmentation d'image et tu utilises des fonctions que je ne connais pas. Fait attention de ne pas avoir de région placée sur ton image quand tu lances ta macro, je n'ai pas d'autre idée qui pourrait expliquer que tu obtient des résultats différents. Est-ce que ta macro se finit correctement ou elle plante ? N'oublie pas les points virgules sur les 4 dernières lignes de ton code

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Doctorant en Biologie
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Doctorant en Biologie
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 5
    Points
    5
    Par défaut cours?
    Merci quand même. J'ai essayé de lancer ce code sur un PC (je travaille sur Mac habituellement) et il n'y a pas se problème d'une étape visuellement exécutée sur 1/3 de l'image seulement. Par contre ça ne marche toujours pas. Quand je fais les étapes manuellement j'arrive au résultat voulu, mais quand je lance le code généré par ces même étapes ça me donne complètement autre chose...


    C'est ou que tu as fais ces cours? Ça m'intéresserait beaucoup!

  7. #7
    Membre habitué 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
    Points : 141
    Points
    141
    Par défaut
    Salut,

    J'ai fait ma formation au Bordeaux Imaging Center et elle est ouverte au niveau national il me semble. Elle dure 3 jours, voilà le lien, http://www.bic.u-bordeaux.fr/thewebs...202%202015.pdf. La date d'inscription pour la session de septembre est dépassée mais essayes de les contacter directement, ça passera peut-être encore.
    Pour ta macro, tu peux essayer de mettre la fonction waitForUser; après chaque ligne, ce qui permet de mettre la macro en pause. Tu pourras peut-être détecter d'où vient le problème en regardant étapes par étapes le déroulement de la macro.

Discussions similaires

  1. [PPT-2003] enregistrement des slides avec nommage intelligent au format jpg
    Par skaven the shaman dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 03/07/2012, 20h10
  2. Discutons des roi en 3d
    Par gwal21 dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 01/06/2011, 08h20
  3. ImageJ ROI manager
    Par f90_pour_debutan dans le forum ImageJ
    Réponses: 0
    Dernier message: 02/05/2011, 13h41
  4. image juste avec des ROI
    Par yasminsila dans le forum Images
    Réponses: 0
    Dernier message: 10/04/2008, 13h54

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