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 :

macro - élimine les slices noires dans un stack RGB


Sujet :

ImageJ Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieure en biologie
    Inscrit en
    Novembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieure en biologie
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2019
    Messages : 10
    Points : 1
    Points
    1
    Par défaut macro - élimine les slices noires dans un stack RGB
    Bonjour ,

    J'ai besoin d'aide pour écrire une macro servant à éliminer les slices noires dans un stack :

    J’ai dans un dossier une série de stacks 1,2,3, etc (environ 60 selon la manip) dont chacun est composé de 3 couleurs (Bleu, Vert, Rouge) et d’un nombre X de slices (environ 90).
    J’aimerai faire une macro qui, pour chaque stack, supprime les slices dont la moyenne de l’intensité du canal vert est inérieure à 1 et me donne un nouveau stack corrigé.

    La macro doit donc :
    Appeler le stack 1 dans le dossier sélectionné
    Parcourir les slices
    Calculer l’intensité du canal vert (channel 2) du premier plan
    Si « mean » est inférieure à 1 (l’image est quasiment noire) : supprimer le plan (donc les images Bleu+Verte+Rouge de ce plan)
    Si « mean » est supérieure à 1 : passer à la slice suivante
    Enregistré le stack corrigé dans le dossier « Correction » sous un nouveau nom « Stack-1-correct »
    Passer au stack suivant jusqu’au dernier

    Et tout ça est clairement trop compliqué pour mon mini niveau de programmation !
    Merci d'avance pour votre aide, je vous en serai vraiment très reconnaissante !!

    Marie

  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,

    Serait-il possible d'avoir un lien pour télécharger un des stacks? Je ne promet rien, mais je pourrais faire la macro si j'ai un peu de temps.

    Cédric

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieure en biologie
    Inscrit en
    Novembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieure en biologie
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2019
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour Cédric,

    Merci beaucoup pour votre réponse !!
    Voici un lien où on peut télécharger les stacks : https://drive.google.com/open?id=1Lu...hVkaU7BfF_71X0

    J'utilise pour l'instant la méthode "à la main" qui n'est pas super mais qui fonctionne...

  4. #4
    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,

    De quelle manière ouvrez vous ces fichiers dans imageJ? Est-ce que c'est le fichier .env qui permet d'ouvrir le stack? Ou faut-il un plugin particulier?
    Et quel est le logiciel utilisé pour les acquisitions des images?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieure en biologie
    Inscrit en
    Novembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieure en biologie
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2019
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour Cédric,

    Pour ouvrir un stack, je fais :
    file > import > image sequence
    image > hyperstack > stack to hyperstack (paramètres : xyzct c=3 z=71 t=1)

    voici le recorder :
    run("Image Sequence...", "open=[/Volumes/PEGASUS/BIPHOTON - Datas en transit/20180816/00-Datas/2018-08-15-cmp8-230-446-DML-TseriesA-001] sort");
    run("Stack to Hyperstack...", "order=xyzct channels=3 slices=71 frames=1 display=Color");
    //run("Brightness/Contrast...");
    run("Enhance Contrast", "saturated=0.35");

    Pour mon traitement d'images, j'ai fais une série de macro que j'ai placé dans mon drive.
    La macro A permet de transformer les datas brutes en stacks
    La macro B écrase le stack en une seule image "maximum d'intensité"
    La macro C compile toutes les images "maximum d'intensité" pour former un stack
    La macro D corrige le drift sur ce dernier stack et me donne mon "film final"

    Evidemment l'idéal serait de n'avoir qu'une seule macro qui fasse tout ce travail mais avec ces petits morceaux je gagne déjà beaucoup de temps.
    Mon vrai problème est vraiment celui des images noires. Puisque lors de l'acquisition mon stack au temps 1 peut avoir les deux premières images noires et mon stack au temps 2 les deux dernières etc. Si je veux bien faire cela impliquerait que je note les détails de chacun des stacks et cela est impossible.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieure en biologie
    Inscrit en
    Novembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieure en biologie
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2019
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Et pour l'acquisition des images c'est le logiciel Prairie de chez Bruker que j'utilise.

  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
    Ok,
    J'ai commencé une macro pour ouvrir les stack et les convertir en hyperstack. Par contre, dans les fichiers que vous m'avez envoyé, il n'y a pas le même nombre de slices par channels, donc imageJ ne peut pas reconstruire d'hyperstack (run("Stack to Hyperstack...", "order=xyzct channels=3 slices=52 frames=1 display=Color"); retourne une erreur). Par exemple, le premier fichier contient 52 slices pour le channel 1 , 53 pour le channel 2 et 52 pour le channel 3. J'ai regardé plusieurs fichiers, ils ont tous des nombres différents de slices par channel. Est-ce que c'est normal ou bien vous avez déjà supprimé des images?

  8. #8
    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,

    Pourriez-vous tester ce code-ci sur vos images?
    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
    dir = getDirectory("Choose a Directory");
    list = getFileList(dir);
    for(i=0; i<lengthOf(list); i++)
    	{
    	if (endsWith(list[i], ".env"))
    		{
    		run("Image Sequence...", "open=[" + dir + list[i] + "] sort");
    		Stack.getDimensions(width, height, channels, slices, frames);
    		run("Stack to Hyperstack...", "order=xyzct channels=3 slices=" + slices/3 + " frames=1 display=Color");
    		}
    	}	
     
    Stack.getDimensions(width, height, channels, slices, frames);
    Stack.setChannel(2);
    sliceToDelete = newArray(slices);
    for (s=1; s<=slices; s++)
    	{
    	Stack.setSlice(s);
    	getStatistics(area, mean, min, max, std, histogram);
    	if(mean<1) sliceToDelete[s-1] = "delete";	
    	}
     
    Stack.setChannel(2);
    for (s=1; s<=slices; s++)
    	{
    	Stack.setSlice(s);
    	if(toString(sliceToDelete[s-1]) == "delete") run("Delete Slice", "delete=frame");
    	}
    Pour l'instant, la macro demande de sélectionner un dossier contenant le stack, puis crée le stack et enlève les slices dont la moyenne d'intensité du channel 2 est < à 1.
    Si ça fonctionne, je rajouterais le code pour traiter les images en batch.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieure en biologie
    Inscrit en
    Novembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieure en biologie
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2019
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Merci pour le code !! Je l'ai testé sur une pile d'images qui justement à beaucoup de slices noires.
    Dans un premier temps, j'ai pas vu d'amélioration (aucune ne s'était enlevée), donc j'ai modifié la moyenne d'intensité du canal vert de 1 à 20 qui me semblait mieux par rapport à mes datas. Mais j'ai eu un beug que j'ai screené et mis en PJ.
    Dans ce stack, le code devrait idéalement enlevé les slices 1-2-3...-13.


    Pour répondre au premier message, c'était bien les datas brutes que j'avais partagé, j'ai réessayé mon ancien code, je n'ai pas rencontré de problèmes en particulier mais effectivement il doit y avoir le même nombre d'images pour chacune des couleurs.
    Si le problème se représente je peux mettre d'autres datas, plus récentes.
    Images attachées Images attachées  

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieure en biologie
    Inscrit en
    Novembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieure en biologie
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2019
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    La pile d'images dont je parle est Aa-002 : https://drive.google.com/open?id=1Lu...hVkaU7BfF_71X0

  11. #11
    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
    Voila la macro corrigée, elle a l'air de fonctionner sur votre image (avec un seuil réglé sur 30).

    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
    dir = getDirectory("Choose a Directory");
    list = getFileList(dir);
    for(i=0; i<lengthOf(list); i++)
    	{
    	if (endsWith(list[i], ".env"))
    		{
    		run("Image Sequence...", "open=[" + dir + list[i] + "] sort");
    		Stack.getDimensions(width, height, channels, slices, frames);
    		run("Stack to Hyperstack...", "order=xyzct channels=3 slices=" + slices/3 + " frames=1 display=Color");
    		}
    	}	
     
    Stack.getDimensions(width, height, channels, slices, frames);
    Stack.setChannel(2);
    sliceToDelete = newArray(slices);
    for (s=1; s<=slices; s++)
    	{
    	Stack.setSlice(s);
    	getStatistics(area, mean, min, max, std, histogram);
    	if(mean<30) sliceToDelete[s-1] = "delete";	
    	}
     
    Stack.setChannel(2);
    for (s=slices; s>=1; s--)
    	{
    	setSlice(s);
    	if(toString(sliceToDelete[s-1]) == "delete") run("Delete Slice", "delete=slice");
    	}

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieure en biologie
    Inscrit en
    Novembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieure en biologie
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2019
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Cette macro fonctionne très bien sur un stack, j'en ai testé plusieurs ! Merci !!

    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
    dir = getDirectory("Choose a Directory");
    list = getFileList(dir);
    for(i=0; i<lengthOf(list); i++)
    	{
    	if (endsWith(list[i], ".env"))
    		{
    		run("Image Sequence...", "open=[" + dir + list[i] + "] sort");
    		Stack.getDimensions(width, height, channels, slices, frames);
    		run("Stack to Hyperstack...", "order=xyzct channels=3 slices=" + slices/3 + " frames=1 display=Composite");
    		}
    	}	
     
    Stack.getDimensions(width, height, channels, slices, frames);
    Stack.setChannel(1);
    run("Blue");
    Stack.setChannel(3);
    run("Red");
    Stack.setChannel(2);
    sliceToDelete = newArray(slices);
    for (s=1; s<=slices; s++)
    	{
    	Stack.setSlice(s);
    	getStatistics(area, mean, min, max, std, histogram);
    	if(mean<30) sliceToDelete[s-1] = "delete";	
    	}
     
    Stack.setChannel(2);
    for (s=slices; s>=1; s--)
    	{
    	setSlice(s);
    	if(toString(sliceToDelete[s-1]) == "delete") run("Delete Slice", "delete=slice");
    	}
    J'ai modifié display=Composite pour afficher les 3 couleurs. Et inversé les canaux 1 vs 3 (Rouge vs Bleu).
    Est-il possible de traiter les images en batch avec cette macro ?
    J'ai ajouté mes nouvelles données dans le drive si ça peut aider

  13. #13
    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
    Voila, je pense que ça devrait marcher. Je n'ai pas tester sur votre dossier parce que je n'ai pas réussi à le télécharger (ça bloque en cours de téléchargement).
    Pour traiter en batch, il faut sélectionner le dossier contenant les sous dossiers (qui contiennent les images). Donc on ne peut pas traiter des sous-sous-dossiers (je ne sais pas si c'est clair ). Après on peut rajouter la sauvegarde de la projection maximum, et d'autres fonctions, comme vous voulez.

    Cédric

    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
    dir = getDirectory("Choose a Directory");
    fileList = getFileList(dir);
    for (fl=0; fl<lengthOf(fileList); fl++)
    {
    	//cherche le fichier .env
    	imageList = getFileList(dir + fileList[fl]);
    	for(i=0; i<lengthOf(imageList); i++)
    	{
    		if (endsWith(imageList[i], ".env"))
    		{
    		run("Image Sequence...", "open=[" + dir + fileList[fl] + imageList[i] + "] sort");
    		Stack.getDimensions(width, height, channels, slices, frames);
    		run("Stack to Hyperstack...", "order=xyzct channels=3 slices=" + slices/3 + " frames=1 display=Composite");
    		}
    	}	
     
    	//repère les slices à supprimer
    	Stack.getDimensions(width, height, channels, slices, frames);
    	Stack.setChannel(1);
    	run("Blue");
    	Stack.setChannel(3);
    	run("Red");
    	Stack.setChannel(2);
    	sliceToDelete = newArray(slices);
    	for (s=1; s<=slices; s++)
    	{
    		Stack.setSlice(s);
    		getStatistics(area, mean, min, max, std, histogram);
    		if(mean<30) sliceToDelete[s-1] = "delete";	
    	}
     
    	//supprime les slices
    	Stack.setChannel(2);
    	for (s=slices; s>=1; s--)
    	{
    		setSlice(s);
    		if(toString(sliceToDelete[s-1]) == "delete") run("Delete Slice", "delete=slice");
    	}
     
    	//sauvegarde 
    	save(dir+fileList[fl]+ "Treated " + getTitle());
    	close;
    }

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieure en biologie
    Inscrit en
    Novembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieure en biologie
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2019
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    C'est très clair et ça fonctionne très bien ! Merci !!

    J'ai essayé d'ajouté quelques lignes qui corrigent le drift (comme dans mon ancienne macro) mais ça ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Corrige le drift dû aux battements du coeur avec le channel 2 (vert) pour référence
        	run("8-bit");
        	run("Re-order Hyperstack ...", "channels=[Channels (c)] slices=[Frames (t)] frames=[Slices (z)]");
        	run("Correct 3D drift", "channel=2 only=0 lowest=1 highest=1");
    Après la correction du drift, j'aimerai en effet sauvegarder la projection maximum.
    Est il possible d'enregistrer les fichiers traités dans le dossier contenant les sous-dossiers ?
    Car ensuite j'utilise la fonction :
    qui me donne une nouvelle pile d'image dont je corrige à nouveau le drift avec la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    run("Correct 3D drift", "channel=2 only=0 lowest highest=1");

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieure en biologie
    Inscrit en
    Novembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieure en biologie
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2019
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    J'ai remis un dossier dans le drive avec moins de datas qui doit etre plus rapide à charger que le précédent !

  16. #16
    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 rajouté la sauvergarde des MAX projection. Par contre, je ne connais pas la fonction correct Z drift et je ne sais pas comment elle fonctionne, et en effet il y a un problème quand on la met dans la macro.
    Il faudrait voir si elle fonctionne sur les images après passage de la macro, et identifier le problèmes pour la faire fonctionner dans la macro.
    J'ai rajouté une fonction de imageJ qui permet d’accélérer le traitement, mais les images ne seront plus affichées, du coup, j'ai mis une barre de progression pour voir où en est la macro.

    Voilà le code.
    (Le code c'est le code ? Ça va, ils se sont pas trop cassé le bonnet pour la trouver celle là...)

    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
    dir = getDirectory("Choose a Directory");
    fileList = getFileList(dir);
    setBatchMode(true);
    for (fl=0; fl<lengthOf(fileList); fl++)
    {
    	//cherche le fichier .env
    	imageList = getFileList(dir + fileList[fl]);
    	for(i=0; i<lengthOf(imageList); i++)
    	{
    		if (endsWith(imageList[i], ".env"))
    		{
    		run("Image Sequence...", "open=[" + dir + fileList[fl] + imageList[i] + "] sort");
    		Stack.getDimensions(width, height, channels, slices, frames);
    		run("Stack to Hyperstack...", "order=xyzct channels=3 slices=" + slices/3 + " frames=1 display=Composite");
    		}
    	}	
     
    	//repère les slices à supprimer
    	Stack.getDimensions(width, height, channels, slices, frames);
    	Stack.setChannel(1);
    	run("Blue");
    	Stack.setChannel(3);
    	run("Red");
    	Stack.setChannel(2);
    	sliceToDelete = newArray(slices);
    	for (s=1; s<=slices; s++)
    	{
    		Stack.setSlice(s);
    		getStatistics(area, mean, min, max, std, histogram);
    		if(mean<30) sliceToDelete[s-1] = "delete";	
    	}
     
    	//supprime les slices
    	Stack.setChannel(2);
    	for (s=slices; s>=1; s--)
    	{
    		setSlice(s);
    		if(toString(sliceToDelete[s-1]) == "delete") run("Delete Slice", "delete=slice");
    	}
     
    	//sauvegarde 
    	save(dir+fileList[fl]+ "Treated " + getTitle());
    	run("Z Project...", "projection=[Max Intensity]");
    	save(dir+ "Treated " + getTitle());
    	run("Close All");
    	showProgress(fl+1, lengthOf(fileList));
    }
    setBatchMode(false);

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    ingénieure en biologie
    Inscrit en
    Novembre 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieure en biologie
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2019
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    J'avais déjà rencontré ce problème du plugin 3D-drift (en fait il fonctionne que lorsque l'image est en 8-bit + frames au lieu de slices. Du coup ça y est la macro fonctionne !!! Vraiment trop contente, car je vais gagner un temps fou grâce à votre aide, alors merci !!

    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
    dir = getDirectory("Choose a Directory");
    fileList = getFileList(dir);
    setBatchMode(true);
    for (fl=0; fl<lengthOf(fileList); fl++)
    {
    	//cherche le fichier .env
    	imageList = getFileList(dir + fileList[fl]);
    	for(i=0; i<lengthOf(imageList); i++)
    	{
    		if (endsWith(imageList[i], ".env"))
    		{
    		run("Image Sequence...", "open=[" + dir + fileList[fl] + imageList[i] + "] sort");
    		Stack.getDimensions(width, height, channels, slices, frames);
    		run("Stack to Hyperstack...", "order=xyzct channels=3 slices=" + slices/3 + " frames=1 display=Composite");
    		}
    	}	
     
    	//repère les slices à supprimer
    	Stack.getDimensions(width, height, channels, slices, frames);
    	Stack.setChannel(2);
    	sliceToDelete = newArray(slices);
    	for (s=1; s<=slices; s++)
    	{
    		Stack.setSlice(s);
    		getStatistics(area, mean, min, max, std, histogram);
    		if(mean<30) sliceToDelete[s-1] = "delete";	
    	}
     
    	//supprime les slices
    	Stack.setChannel(2);
    	for (s=slices; s>=1; s--)
    	{
    		setSlice(s);
    		if(toString(sliceToDelete[s-1]) == "delete") run("Delete Slice", "delete=slice");
    	}
     
    	//sauvegarde 
    	save(dir+fileList[fl]+ "Treated " + getTitle());
     
    	//correction du drift
    	run("Arrange Channels...", "new=321");
    	run("8-bit");run("Re-order Hyperstack ...", "channels=[Channels (c)] slices=[Frames (t)] frames=[Slices (z)]");
    	run("Correct 3D drift", "channel=2 only=0 lowest=1 highest=1");
     
    	//projection
    	run("Z Project...", "projection=[Max Intensity]");
     
    	//sauvegarde
    	save(dir+ "Treated " + getTitle());
    	run("Close All");
    	showProgress(fl+1, lengthOf(fileList));
    }
    setBatchMode(false);
    Je suis gourmande mais est-il possible d'ajouter une ligne ?

    qui chercherait les .tif dans le fichier de base et appliquerait les fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    run("Concatenate...");
    //Alignement de tous les maximums d'intensité
    run("Correct 3D drift", "channel=2 only=0 lowest highest=1");
    //Renomer le "film" final
    rename("Film + nom du dossier");

  18. #18
    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
    Et voilà le dessert.

    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
    dir = getDirectory("Choose a Directory");
    fileList = getFileList(dir);
    setBatchMode(true);
    for (fl=0; fl<lengthOf(fileList); fl++)
    {
    	//cherche le fichier .env
    	imageList = getFileList(dir + fileList[fl]);
    	for(i=0; i<lengthOf(imageList); i++)
    	{
    		if (endsWith(imageList[i], ".env"))
    		{
    		run("Image Sequence...", "open=[" + dir + fileList[fl] + imageList[i] + "] sort");
    		Stack.getDimensions(width, height, channels, slices, frames);
    		run("Stack to Hyperstack...", "order=xyzct channels=3 slices=" + slices/3 + " frames=1 display=Composite");
    		}
    	}	
     
    	//repère les slices à supprimer
    	Stack.getDimensions(width, height, channels, slices, frames);
    	Stack.setChannel(2);
    	sliceToDelete = newArray(slices);
    	for (s=1; s<=slices; s++)
    	{
    		Stack.setSlice(s);
    		getStatistics(area, mean, min, max, std, histogram);
    		if(mean<30) sliceToDelete[s-1] = "delete";	
    	}
     
    	//supprime les slices
    	Stack.setChannel(2);
    	for (s=slices; s>=1; s--)
    	{
    		setSlice(s);
    		if(toString(sliceToDelete[s-1]) == "delete") run("Delete Slice", "delete=slice");
    	}
     
    	//sauvegarde 
    	save(dir+fileList[fl]+ "Treated " + getTitle());
     
    	//correction du drift
    	run("Arrange Channels...", "new=321");
    	run("8-bit");
    	run("Re-order Hyperstack ...", "channels=[Channels (c)] slices=[Frames (t)] frames=[Slices (z)]");
    	run("Correct 3D drift", "channel=2 only=0 lowest=1 highest=1");
     
    	//projection
    	run("Z Project...", "projection=[Max Intensity]");
     
    	//sauvegarde
    	save(dir+ "Treated " + getTitle());
    	run("Close All");
    	showProgress(fl+1, lengthOf(fileList));
    }
    setBatchMode("exit and display");
     
    //Crée un stack avec les max projections
    fileList = getFileList(dir);
    n = 1;
    concatenateArg = "";
    for (fl=0; fl<lengthOf(fileList); fl++)
    {
    	if(endsWith(fileList[fl], ".tif")) 
    	{
    		open(dir + fileList[fl]);
    		concatenateArg = concatenateArg + "image" + n + "=[" + fileList[fl] + "] ";
    		n=n+1;
    	}
    }
    run("Concatenate...", "open " + concatenateArg);
    save(dir+ "Concatenate");
    run("Close All");

Discussions similaires

  1. Code pour éliminer les espaces (TRIM) dans un tableau
    Par Philippe Tulliez dans le forum Contribuez
    Réponses: 29
    Dernier message: 21/02/2022, 15h08
  2. [WD-2010] Macro - Insérer les listes déroulantes dans nouvelle ligne
    Par mbuibui dans le forum Word
    Réponses: 5
    Dernier message: 29/10/2015, 10h43
  3. éliminer les faux caractères <> dans une chaine
    Par Atsibat dans le forum WinDev
    Réponses: 3
    Dernier message: 27/12/2012, 13h45
  4. [sql] [oracle] éliminer les doublons dans sum ?
    Par trungsi dans le forum Langage SQL
    Réponses: 14
    Dernier message: 04/03/2005, 12h29
  5. Éliminer les lignes blanches dans un tableau
    Par DenPro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/11/2004, 01h27

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