Quantification simple de la fluorescence avec ImageJ

Publié le 19 juillet 2015

Introduction

ImageJ permet d’auto­ma­ti­ser sim­ple­ment une pro­cé­dure répé­ti­tive grâce à son lan­gage macros. Cet arti­cle montre com­ment l’uti­li­ser pour quan­ti­fier sim­ple­ment l’inten­sité de la fluo­res­cence d’une série d’image acqui­ses avec un micro­scope à épifluorescence. La plu­part des com­man­des ont été trou­vées grâce à l’outil Record du menu Macros d’ImageJ. Pour lancer un script avec le lan­gage macros, il faut uti­li­ser l’option Run dans le menu Macros.

Objectif

Suite à l’acqui­si­tion des images au micro­scope, la fluo­res­cence spé­ci­fi­que aux cel­lu­les doit être quan­ti­fiée (exclure le bruit de fond, hors des cel­lu­les). Toutes les images sont dans le même réper­toire et por­tent des noms dif­fé­rents. L’illu­mi­na­tion des images est sou­vent iné­gale puisqu’elles sont prises dans une plaque de 96 puits où les arte­facts d’illu­mi­na­tion sont sou­vent pré­sents et affec­tent gran­de­ment les don­nées. Voici un exem­ple d’une image à ana­ly­ser.

Éléments de configuration du script

Lorsque le script est lancé, une fenê­tre s’ouvre afin de choi­sir le dos­sier où se trou­vent les images à ana­ly­ser.

path = File.openDialog("Choisir un dossier");
chemin = File.getParent(path);
chemin = chemin +"/";

Ensuite, une fenê­tre de confi­gu­ra­tion s’ouvrira afin d’ajus­ter les para­mè­tres du script. Le seuil permet d’ajus­ter le bruit de fond et Bandpass permet d’ajus­ter l’illu­mi­na­tion de l’image avec une trans­for­ma­tion de Fourrier (FFT band­pass filter).

Dialog.create("Ajuster la configuration");
Dialog.addNumber("Bandpass:", 400);
Dialog.addNumber("Seuil:", 0.5);
Dialog.show();
FFTbandpass = Dialog.getNumber();
MultiplicatinSeuil = Dialog.getNumber();
FFTbandpass = "filter_large="+ FFTbandpass +" filter_small=0 suppress=None";
print("Bandpass: " + FFTbandpass + " , Seuil : " + MultiplicatinSeuil);
list = getFileList(chemin);
print("Filename" + " " + "Area" + " " + "Mean");

Voici un exem­ple d’image avec une mau­vaise illu­mi­na­tion (gauche) et après ajus­te­ment (droite).

Création d’une boucle d’analyse d’image

Le but de cette boucle est de trai­ter toutes les images dont le nom de fichier se ter­mine par GFP.png.

ResultsRow = 0;
for (i=0; i<list.length; i++) {
   if(matches(list[i],".*GFP.png")){

//Le code de traitement se répétant pour chacune des images doit se retrouver ici. Il sera expliqué ligne par ligne dans les sections suivantes.

ResultsRow++;
}
}

Quantification de la fluorescence

Le but ici est d’ouvrir l’image, cor­ri­ger l’illu­mi­na­tion et reti­rer le bruit de fond qui cor­res­pond aux endroits qui ne sont pas occu­pés par des cel­lu­les.

Pour ouvrir l’image et obte­nir les infor­ma­tions de base comme la lar­geur et la hau­teur.

open("./" + list[i]);
getDimensions(width, height, channels, slices, frames);

Ensuite, l’image sera trai­tée en fonc­tion des para­mè­tres entrés lors de la confi­gu­ra­tion au lan­ce­ment du script. Plus pré­ci­sé­ment, la fonc­tion Bandpass Filter sera effec­tuée sur l’image. Ensuite, la méthode par défaut de seuil auto­ma­ti­que sera uti­li­sée afin de sélec­tion­ner les régions qui cor­res­pon­dent aux cel­lu­les. Évidemment, la méthode auto­ma­ti­que n’est pas par­faite, c’est pour­quoi il est pos­si­ble de l’ajus­ter en démar­rant le script.

run("Bandpass Filter...", FFTbandpass);
setAutoThreshold("Default dark");
getThreshold(lower,upper);
setThreshold(lower*MultiplicatinSeuil,upper*1);
run("Create Selection");
getStatistics(area, mean, min, max, std, histogram);

Ensuite, il est pré­fé­ra­ble de for­ma­ter les résul­tats dans un tableau d’ImageJ par la fonc­tion SetResult. Il est pos­si­ble aussi d’effec­tuer des cal­culs comme la confluence des cel­lu­les, c’est-à-dire l’espace qu’elles occu­pent sur l’image en pour­cen­tage.

Confluence = area / (width*height) * 100;
setResult("File", ResultsRow, list[i]);
setResult("Area", ResultsRow, area);
setResult("%Area Analysed", ResultsRow, Confluence);
setResult("Mean", ResultsRow, mean);

Création d’une image sans le bruit de fond

Une étape impor­tante est de véri­fier si le script fonc­tionne bien et que le bruit de fond a bel et bien été enlevé cor­rec­te­ment. Il est pos­si­ble de le reti­rer et de le com­pa­rer avec l’image ori­gi­nale. Ici, les deux images seront direc­te­ment com­pa­rées : l’image colo­rée en vert repré­sente l’image cor­ri­gée et quan­ti­fiée alors que celle de cou­leur bleue est l’image ori­gi­nale. L’image sera enre­gis­trée avec le même nom que l’image ori­gi­nale, mais avec l’exten­sion .tif qui permet de visua­li­ser indé­pen­dam­ment les deux images. Une autre image est également sau­ve­gar­dée afin de bien mon­trer les dif­fé­ren­ces entre les deux images. Le vert pur est l’image cor­ri­gée et le rouge pur l’image ori­gi­nale. Le jaune repré­sente la por­tion com­mune aux deux images et donc ce qui a été quan­ti­fié (nor­ma­le­ment, le vert ne devrait pas être visi­ble dans l’image).

run("Make Inverse");
run("Cut");
run("Select None");
run("Green");
open("./" + list[i]);
run("Images to Stack", "name=" + list[i]);
run("Make Composite", "display=Composite");
setSlice(1);
run("Green");
setSlice(2);
run("Blue");
saveAs("Tiff", chemin + list[i] + ".tif");
run("Color Balance...");
run("Red");
setMinAndMax(0, 1);
setSlice(1);
setMinAndMax(0, 1);
saveAs("PNG", chemin + list[i] + "-mask" + ".png");
close();

Voici un exem­ple des images géné­rées par le script (l’image brute étant celle en tein­tes de gris au début de l’arti­cle) :

Enregistrement des données

Enfin, il suffit d’affi­cher et d’enre­gis­trer les don­nées afin de pou­voir les exploi­ter. Le fichier Results.txt contien­dra toutes les don­nées.

setOption("ShowRowNumbers", false);
updateResults();
saveAs("Results", chemin + "Results.txt");
exit();

Voici un exem­ple des don­nées enre­gis­trées :

Répondre à cet article

2 Messages

  • Quantification simple de la fluorescence avec ImageJ 6 septembre 2016 14:45, par Emilienne

    Bonjour Eric

    J’ai lu votre article sur la quantification de la flurescence avec ImageJ, j’ai trouvé très intéressant.

    Moi j’ai fait de la coloration par immunofluorescence sur du tissu humain. Sur chacune de mes coupes, j’ai pris les images de plusieurs champs dans le but de faire une quantification de la fluorescence en pixels avec ImageJ. Avez-vous une idée de comment ca peut se faire ?

    Merci pour votre réponse

    repondre message

    • Quantification simple de la fluorescence avec ImageJ 7 septembre 2016 07:25, par Éric Béliveau

      Bonjour,

      Le plus simple demeure l’utilisation du seuil pour sélectionner les régions fluorescentes. C’est encore meilleur s’il y a une région de référence dans une autre couleur que celle quantifiée, par exemple un marqueur de cellules qui permettrait de normaliser les valeurs d’une photo à une autre.

      Eric

      repondre message