Transcript Télécharger
Images numériques et analyse d’images
Partie 1
•
•
•
•
•
•
•
•
•
•
•
•
Installation de Image J
Structure des images numériques
Mesures de distance – calibration
Analyse de profil
Analyse de densité
Luminosité – contraste – LUT
Calibration spatiale
Décomposition d’une image couleur
Types d’images – taille mémoire
Seuillage et comptage d’objets
Opérations sur images binaires
Films
1
Installation de ImageJ
http://rsb.info.nih.gov/ij/
Logiciel de traitement et d’analyse d’images utilisant le langage Java
Image J user guide
Sites d’information supplémentaires :
Macbiophotonics: http://www.macbiophotonics.ca/imagej/
Wiki: http://imagejdocu.tudor.lu/
Burger and Burge : Digital Image Processing, An Algorithmic Introduction
using Java; Springer Verlag, 2008
2
Structure des images numériques
• Image monochrome : tableau de niveaux de gris
• La valeur des niveaux de gris est comprise entre 0 et 255 = 28 – 1 pour une image 8-bit
1
N° ligne
1
Niveau de
gris
Pixel 4, 2
N° colonne
Ouvrir image : file/open sample « dot blot »
Observer l’histogramme des niveaux de gris : analyze/histogram
3
Luminosité – contraste – facteur gamma
Corrections linéaires : brightness & contrast
Avec image/adjust/brightness and contrast , modifier la luminosité et le contraste de
l’image
Faire de même avec image/adjust/window-level
Reset : retour à l’image d’origine
Apply : applique les modifications sur l’image
Important : les pixels supérieurs à 255 ou inférieurs à 0 sont tronqués à 255 ou 0 à la
suite de la transformation
Correction non-linéaire : facteur gamma
Applies the function f (p) = (p/255)γ × 255 to each pixel (p) in the image or selection,
where 0.1 ≤ γ ≤ 5.0. For RGB images, this function is applied to all three color channels.
For 16–bit images, the image min and max are used for scaling instead of 255.
Process/maths/gamma
4
Pixel intensity transfer function and LUT : Look-up Table
Histogramme des niveaux de gris
de l’image de départ
Valeur finale du pixel
• Fonction de transfert : valeur finale du pixel = F(valeur initiale du pixel)
• Inversion: image/look-up tables/invert LUT
• Fausses couleurs : image/look-up tables
LUT
Valeur initiale du pixel
5
Analyse de densité
•
•
•
•
•
Ouvrir image : file/open samples « dot blot »
Définir un « Area of Interest » circulaire de la taille des spots
Sauvegarder l’AOI : edit/selection/add to manager
Se familiariser avec l’AOI manager
Définir les mesures à effectuer :
Analyze/set measurements
Sélectionner : area, standard deviation, integrated density, mean grey value
• Placer l’aire d’intérêt sur les spots et mesurer avec analyze/measure
• Placer l’aire d’intérêt sur le fond et mesurer avec analyze/measure
• Sauvegarder le fichier de résultats et créer un histogramme dans Excel de l’intensité
spécifique (signal – fond).
6
Analyse de profils
•
•
•
•
•
•
Ouvrir image : file/open samples « gel »
Définir un « Area of Interest » rectangulaire de la taille des pistes du el
Sauvegarder l’AOI : edit/selection/add to manager
Sélectionner la première piste : analyze/gel/select first lane
Sélectionner les pistes suivantes : analyze/gel/select next lane
Construire les profils :
Edit/selection/profile plot : vérifier que « vertical profile » est sélectionné
Analyze/gels/gel analyser options : sélectionner « uncalibrated OD » et « invert
peaks »
Analyze/gels/plot lanes
• Tracer une ligne de base sous chaque pic
• Avec la « baguette magique » (magic wand), calculer l’aire sous les pics
• Sauvegarder le fichier de résultats et créer un histogramme dans Excel de l’intensité
des pics principaux.
7
Uncalibrated Optical Density (OD)
Dans une image d’absorbance, les niveaux de gris doivent être convertis en
uncalibrated OD pour que le signal mesuré soit proportionnel à la concentration.
Attention, ce n’est pas le cas pour des images de fluorescence ou de
luminescence.
I
I0
L
Loi de Beer-Lambert :
C
I0
I = I0 exp(- e.C.L)
C = constante x ln(I0/I)
Selecting Uncalibrated OD from the popup menu causes ImageJ to convert gray
values to uncalibrated optical density values using the function
Uncalibrated OD = log10(255 / PixelValue)
You do not need to measure OD standards or enter known OD values to enable
this feature.
8
Décomposition d’une image couleur
Une image couleur est composée de trois images en niveau de gris superposées :
Vert, rouge, bleue
Hue, saturation, brightness (teinte, saturation, luminosité)
• Ouvrir image : file/open sample « fluorescent cell »
• Image/color/make composite : sélectionner l’image superposée ou les couleurs
séparées
• Avec Image/B&C : ajuster luminosité et contraste pour chaque couleur
• Superposer les couleurs et sauvegarder l’image obtenue
9
Mesure de distances – calibration
•
•
•
•
•
Ouvrir image : file/open samples « leaf »
Séparer les images en niveau de gris : image/color/split channels
Créer les histogrammes en niveau de gris des trois images rouge, vert, bleu
Quelle est l’image non saturée la plus contrastée ?
Créer de nouvelles images couleur en combinant les images séparées avec
image/color/merge channels
• Avec l’image en niveau de gris la plus contrastée, utiliser l’échelle et « profile plot »
pour déterminer la calibration spatiale de l’image (mm par pixel)
• Ou bien utiliser analyze/set scale
• Puis mesurer la hauteur et l’angle au sommet de la feuille
Avec image/transform, on peut changer l’orientation
Avec image/crop, on peut enlever une partie de l’image
10
Type d’images – taille mémoire
Types de pixels :
• 2-bit images (black and white)
• 8–bit Images that can display 256 (28) gray levels (integers only).
• 16–bit Images that can display 65,536 (216) gray levels (integers only).
• 32–bit Images that can display 4, 294, 967, 296 (232) gray levels (real
numbers). In 32–bit images, pixels are described by floating point values and
can have any intensity value.
• RGB Color Color Images that can display 256 values in the Red, Green and Blue
channel. These are 24–bit (23×8) images. RGB color images can also be 32–bit
color images (24–bit color images with additional eight bits coding alpha
blending values, i.e., transparency).
Taille mémoire (8-bit = 1 octet = 1 byte)
Formats d’images :
TIFF: pas de compression ou compression sans perte d’information
JPEG: les images sont compressées, généralement à 1/10 de leur taille. La perte
d’information est invisible
GIF; PNG : couleurs compressées; transparence
AVI, MOV : format de films
11
Warning on JPEG Compression
File .
Save As.
The JPEG format uses lossy
compression that leads to severe artifacts that are not compatible
with
quantitative analyses. As such, it should only be used for presentation purposes (if file size is an
issue), but even then a lossless
format such as PNG is probably more suitable.
X W a r n i n g o n J P E G C o mpr essi o n
The illustration below exemplifies
theuse
consequences
of that
saving
in a lossy
To replicate
The JPEG format
s Lossy compression
leadsimages
to severe artifacts
that format.
are not compatible
with quantitative
analyse
s. As
such,
it should
only be used for pre
sentation
s (if file
it, open the Mandrill sample
image (by
drag
and
drop,
or alternatively
using
Filepurpose
◃ Import
◃ size
URL. . .
is an issue), but even t hen a lossless format such as PNG is probably more suit able.
and typing the image’s path, http://imagej.nih.gov/ij/images/baboon.jpg), duplicate it (Image ◃
The illustration below exemplifies the consequences of saving images in a lossy format. To
Duplicate. . . [D]), save the
duplicate as JPEG (File ◃ Save As ◃ Jpeg. . . ), run File ◃ Revert [r] (so that
replicate it, open the Mandrill sample image (by drag and drop, or alternatively using File.
the saved version is reloaded
ImageJ)
and calculate
between
the two
images
Import . by
URL.
. . and typing
the image’s the
path,difference
http:/ / imagej.nih.gov/
ij/ image
s/ baboon.jpg),
duplicate it (Image.
. . . [D]),
the duplicate as JPEG (File.
Saveyou
As. Jpe
g. .notice
. ), run
using Process ◃ Image Calculator.
. . By Duplicate
adjusting
thesave
Brightness/Contrast.
. . [C],
will
File. Revert [r] (so that the saved version is reloaded by ImageJ) and calculate the difference
that the imperceptible JPEG
artifacts
are most
pronounced
along regions
of higher contrast
between
t he two images
using Process.
Image Calculator.
..
changes. In addition to this
edge artifact,
the
JPEGt. algorithm
shifttheimpe
colorsrce
toptibleJPEG
improveartifacts
By adjusting
theBrightne
ss/ Contras
. . [C], you willmay
noticethat
mosto
t pronounce
d along
regions of higheThese
r contrastartifacts
changes. In
addition
to thisto
edge
artifact,
compression which mayare
lead
artificial
colocalization.
are
intrinsic
the
format
the JPEG algorithm may shift colors to improve compression which may lead to artificial
and may persist even if JPEG
Quality has been increased to 100 in Edit◃Options◃Input/Output...
colocalization. These artifacts are intrinsic to the format and may persist even if JPEG Quality
Once an image has beenhas
lossy
there
wayInput/
of reverting
it to an
the
original.
Given
beencompressed
increased to 100%
in Editis. no
Options.
Output. . . Once
image
has been
lossy all
ssed the
re is no way ofinrelossy
vertingformats,
it to the original.
Given all this, andto
since
MeJPEG
tadata is
this, and since Metadatacompre
is poorly
supported
it is unreasonable
use
in
poorly support ed in lossy format s, it is unreasonable t o use JPEG in image processing.
image processing.
Original
JPEG copy (75% quality)
Difference
12
grayness of that pixel on the screen. How these intensities are interpreted is specified by the
image type. From t he ImageJ websit e:
Valeur finale du pixel
16–bit and 32–bit grayscaleimagesarenot directly displayableon computer monitors,
Seuillage
et comptage d’objets
which typically can show only display 256shades of gray. Therefore, the data are
Intensité du pixel
mapped to 8–bit by windowing. Thewindow definestherangeof gray valuesthat are
LUT
displayed: values below the window are made black, while values above the window
are white. The window is defined by minimum and maximum values that can be
modified using Image. Adjust . Brightness/ Contrast. . . [C].
It may happen that the initial windowing performed by ImageJ on these high bit–depth (or
HDR) images is suboptimal. Please note that windowing does not affect image data (cf. the
HDRexplorerTool).
Position du pixel
Valeur initiale du pixel
Highlighted range!
Auto-threshold methods!
Holding ⇪Shift
moves a fixed-width
thresholding window !
Min/Max values!
Display mode!
Manual input
Are objects in the
image lighter than
the background?!
!
Compute the whole
stack or treat single
slices independently?!
Image . Adjust . T hreshold. . . [T ] ( I m ageJ 1.45m ) .
13
Seuillage et comptage d’objets
•
•
•
•
•
•
•
•
•
•
•
•
•
Ouvrir image : file/open samples « embryo »
Séparer les images en niveau de gris : image/color/split channels
Créer les histogrammes en niveau de gris des trois images rouge, vert, bleu
Choisir l’image en niveau de gris la plus contrastée
Faire varier le seuil sur : image/adjust/threshold que se passe-t-il lorsqu’on
augmente le seuil
Uniformiser le fond : process/subtract background
Choisir le seuil : image/adjust/threshold
Sélectionner les mesures : analyze/set measurements
Analyser l’image : analyze/analyze particle
size : > 50 pixels
exclude on edges
include holes
Sauvegarder les résultats dans Excel
Remarquer que certains embryons sont fusionnés
Appliquer : process/binary/erode
Et recommencer
• Ouvrir l’image : file/open samples « cell colonies » compter les colonies
14
Erosion, dilatation, et autres opérations
Ces transformations s’appliquent sur des images binaires (noir et blanc)
La valeur finale d’un pixel dépend de la valeur initiale de plusieurs pixels
Ouvrir Files/Open sample/Blobs
Image/Adjust/Threshold enlever “dark background” puis Apply
Save as “blobs mask”
Sur l’image “blobs mask” essayer les transformations suivantes :
Process/Binary/
Erode
: érosion (enlève 1 pixel sur les contours)
Dilate
: dilatation (ajoute 1 pixel sur les contours)
Open
: érosion + dilatation (arrondit les objets et
enlève les petits objets)
Close
: dilatation + érosion (arrondit les objets et
remplit les trous)
Outline
: génère les contours (ligne de 1 pixel)
Watershed
: sépare des objets attachés
Voronoi
: sépare des zones autour des objets
Utiliser aussi Process/ImageCalculator pour faire des opérations sur les images (pixel à
pixel)
15
Films
• ImageJ peut représenter plusieurs images successives en temps ou en
volume dans la même fenêtre : ce type de fichier est appelé ‘stacks’ (pile).
• Les images d’une pile sont appelées ‘slice’ ou ‘frame’.
• On appelle voxel (volumetric pixel) un élément d’une pile d’image 3D.
• Commandes disponibles : Image/stacks :
add slice
images to stack
orthogonal views
delete slice
stack to image
z project
next slice
make montage
3D project
previous slice
reslice
plot z axis profile
set slice
label
tools
• Ouvrir image : file/open samples « confocal series »
• Générer les vues xz et yz (orthogonal views)
• Evaluer le volume du noyau
16
Images numériques et analyse d’images
Partie 2
•
•
•
•
•
•
•
•
•
•
Macros, plugins et scripts
Enregistrement et exécution de macros
Langage de programmation Java
Ecriture de macros
Conditions, itérations et boucles
Utiliser une macro existante
Gestion des fichiers
Appeler une macro dans un programme
Gestion des résultats dans un tableau
Informations supplémentaires
17
Macros, plugins et scripts
• Macros
The easiest way to execute a series of ImageJ commands. The ImageJ macro language – a
Java-like language – contains a set of control structures, operators and built-in functions
and can be used to call built-in commands and other macros. Macro code is stored in text
files ( .txt and .ijm extensions). A macro is a simple program that automates a series of
ImageJ commands. The easiest way to create a macro is to record a sequence of
commands using the command recorder (Plugins ◃ Macros ◃ Record. . . ).
• Plugins
Much more powerful, flexible and faster than macros (most of ImageJ’s built-in menu
commands are actually plugins) but harder to write and debug. Plugins are written in the
Java programming language ( .java source files) and compiled to .class files.
• Scripts
ImageJ uses the Mozilla Rhino interpreter to run JavaScripts. Similarly to plugins, scripts
have full access to all ImageJ and Java APIs (Application Programming Interfaces) but do
not need to be compiled (scripts and macros run interpretively). On the other hand,
scripts lack the simplicity of macro language and feel less integrated in ImageJ.
18
Enregistrement de macros
Exemple n°1 :
•
•
•
•
•
•
•
•
•
•
Ouvrir : file/open samples/blobs
Plugins/macros/record
Image/adjust/threshold
Apply
Analyze/analyze particles
Size > 20 pixel2 ; outlines
Save “result” sur le bureau
Dans la fenêtre “macro” : create
Enregistrer la macro dans le dossier “macro”
Fermer la fenêtre “macro”
•
•
•
•
Rouvrir : file/open samples/blobs
Plugins/macros/install
Sélectionner la macro enregistrée
Plugins/macros/ nom de la macro
• Plugins/macros/edit nom de la macro
Une fenêtre s’ouvre, qui enregistre toutes
les commandes
Sauvegarde de la macro : fichier .ijm
(macro3.ijm)
Installation de la macro
La macro s’applique à l’image sélectionnée
On peut aussi faire plugins/macros/run
Lire le texte de la macro. Les instructions
qui appellent les commandes des menus
19
sont : run(“commande”,paramètres);
Ecrire une macro
Exemple n°2 :
Plugins/new/macro
Écrire le texte de la macro :
/*
Code source de la macro
“input print out calc”.
Ici on n'est pas dans ImageJ,
pas besoin de « _ » dans le
nom de la classe
*/
Syntaxe :
Il n’y a pas d’espace dans les noms de macro,
seulement _. La première lettre est toujours une lettre
en minuscule.
{ et } entourent les instructions de la macro (bloc)
Chaque instruction se termine par ;
Il n’est pas nécessaire de définir les variables
macro "input_print_out_calc" {
a = getNumber("a?", 10);
b = getNumber("b?", 5);
c = a*b;
print("\\Clear");
print(c);
//Affichage du texte
}
Les fonctions renvoient une valeur, il n’y a pas d’espace
dans les noms de fonction. La première lettre est
toujours une lettre en minuscule.
Les commentaires sont entourés de /* et */
Une ligne de commentaire est précédée de //
Sauvegarder la macro : format txt
macro1.txt
20
Faire fonctionner une macro
Plugins/Macro/Install
Charger la macro sauvegardée précédemment
Une ligne “input_print_out_calc” apparait en bas de la fenêtre Plugins/Macro
Exécuter la macro en cliquant sur Plugins/Macro/“input_print_out_calc”
On peut modifier la macro en utilisant Plugins/Edit
Modifier la macro pour qu’elle calcule (a-b)/(a+b) au lieu de ab et qu’elle écrive
« (a-b)/(a+b) = » puis la valeur calculée.
21
Conditions
Condition unique : if
if(la_condition)
{bloc de code pour la condition juste} else
{bloc de code pour la condition fausse}
Pour plus d’une condition : switch
switch(variable_a_tester)
{ case 1 : valeur n°1 du test
bloc de code
Break;
case 2 : valeur n° du test
bloc de code
break;
…etc…
}
default :
Bloc de code si aucun case n'est vrai
break ;
}
Dans la macro précédente, écrire
une condition sur le signe de a et b
Syntaxe :
L'égalité entre deux nombres a et
b se teste comme ceci : a == b
!= : différent
> : supérieur
< : inférieur
>= : supérieur ou égal
<= : inférieur ou égal
Note : « case » doit toujours être
un entier
22
Itérations et boucles
Itérations : for
for(init_compteur;valeur_de_fin;incrementation_du_compteur)
{ bloc de code à répéter }
Boucles : while et do
while(condition à tester)
{
bloc de code pour la condition juste
}
do
{
bloc de code pour la condition juste
}
while(condition à tester)
Note : le bloc est éxécuté au moins une fois
Application : écrire une macro qui calcule n! = n.(n-1).(n-2)…3.2.1, pour n>0
23
Ecrire une macro
Exemple n°3 :
• Ouvrir : file/open samples/confocal series
Ecrire une macro qui sépare les canaux rouge et vert,
et calcule l’aire totale de l’aire verte, sur 1 image
• A l’aide d’une boucle « for » appliquer la macro aux 25 images du stack
Enregistrer l’aire du noyau en fonction de z. Sachant
que les coupes sont séparées de Dz = 1 µm, calculer le
volume du noyau.
24
Utiliser une macro existante
Exemple n°4 :
• Charger la macro « ParticleLabelingExample » : plugins/macros/install et choisir la
macro correspondante
• Exécuter la macro : cliquer sur le nom de la macro dans plugins/macros
Observer ce qu’elle fait
• Visualiser le texte de la macro : plugins.macros/edit
Pour bien comprendre les instructions, ouvrir « Image-J user guide.pdf » et
« ImageJMacroLanguage.pdf », la liste des fonctions est page 8
Réutiliser cette macro pour analyser les colonies de l’image
File/Open samples/Cell Colony (31K)
- Réajuster le « threshold »
- Inclure une instruction « Subtract background »
- Colorer les colonies avec « Image/Lookup table/3-3-2 RGD
- Sauvegarder la macro sous « ParticleLabelingExample2 »
25
Gestion des fichiers
• Ouvrir un fichier :
open("/chemin + nom complet du fichier")
Opens and displays a tiff, dicom, fits, pgm, jpeg, bmp, gif, lut, roi, or text file. Displays an error
message and aborts the macro if the specified file is not in one of the supported formats, or if the file
is not found. Displays a file open dialog box if path is an empty string or if there is no argument.
Use the File>Open command with the command recorder running to generate calls to this function.
• Sauvegarder un fichier :
saveAs("nom de la fenêtre à sauver", "/chemin + nom complet du fichier")
Saves the active image, lookup table, selection, measurement results, selection XY coordinates or
text window to the specified file path. The format argument must be "tiff", "jpeg", "gif", "zip", "raw",
"avi", "bmp", "fits", "png", "pgm", "text image", "lut", "selection", "measurements", "xy Coordinates"
or "text".
Use saveAs(format) to have a "Save As" dialog displayed.
• Fermer une image :
close()
Closes the active image. This function has the advantage of not closing the "Log" or "Results" window
when you meant to close the active image.
•
Note : il est commode de travailler sur un ensemble d’images en utilisant « stack »
26
Appeler une macro existante dans un programme
• Exécuter une commande :
run("command"[, "options"])
Executes an ImageJ menu command. The optional second argument contains values that are
automatically entered into dialog boxes (must be GenericDialog or OpenDialog).
Use the Command Recorder (Plugins>Macros>Record) to generate run() function calls. Use string
concatentation to pass a variable as an argument. For examples, see the ArgumentPassingDemo
macro.
• Exécuter une macro:
runMacro(name)
Runs the specified macro file, which is assumed to be in the Image macros folder. A full file path may
also be used. The ".txt" extension is optional. Returns any string argument returned by the macro.
May have an optional second string argument that is passed to macro. For an example, see the
CalculateMean macro. See also: eval and getArgument.
• Utiliser un programme préenregistré dans ImageJ
call("class.method", arg1, arg2, ...)
Calls a public static method in a Java class, passing an arbitrary number of string arguments, and
returning a string. Refer to CallJavaDemo for an example.
27
Gestion des résultats dans un tableau
• Ajouter des data à un tableau existant :
setResult("Column", row, value)
Adds an entry to the ImageJ results table or modifies an existing entry. The first argument specifies a
column in the table. If the specified column does not exist, it is added. The second argument specifies
the row, where 0<=row<=nResults. (nResults is a predefined variable.) A row is added to the table if
row=nResults. The third argument is the value to be added or modified. Call setResult("Label", row,
string) to set the row label. Call updateResults() to display the updated table in the "Results" window.
For examples, see the SineCosineTable and ConvexitySolidarity macros.
• Mettre à jour un tableau existant :
updateResults()
Call this function to update the "Results" window after the results table has been modified by calls to
the setResult() function.
• Récupérer une valeur du tableau de résultats :
getResult("Column", row)
Returns a measurement from the ImageJ results table or NaN if the specified column is not found.
The first argument specifies a column in the table. It must be a "Results" window column label, such
as "Area", "Mean" or "Circ.". The second argument specifies the row, where 0<=row<nResults.
nResults is a predefined variable that contains the current measurement count. (Actually, it's a builtin function with the "()" optional.) With ImageJ 1.34g and later, you can omit the second argument
and have the row default to nResults-1 (the last row in the results table). See also: nResults, isNaN,
getResultLabel.
28
Infos supplémentaires
Documentation et téléchargement de macros : http://rsb.info.nih.gov/ij/
Commandes d’imageJ : « Image-J user guide.pdf »
Programmation des macros d’imageJ : « ImageJMacroLanguage.pdf »
Langage Java pour ImageJ : « javapourimagej_final »
Analyse de colocalisation :
http://www.uhnresearch.ca/facilities/wcif/imagej/colour_analysis.htm
29
Images numériques et analyse d’images
Partie 3 : auto-entraînement
• Recherche de colonies
• Comptage de cellules
1. Recherche de colonies
Ouvrir l’image : « spots »
Chercher les colonies sombres sur les images rouges et vertes
Créer une image composite avec les images binaires obtenues
Conserver les colonies qui sont visibles à la fois en rouge et en vert dans une image
binaire et les compter
2. Comptage de cellules
Lire la notice des lames de numération Quick Read
A l’aide du microscope, définir la taille d’un champ de prise de vue du microscope à
l’objectif 5x et 10x. En déduire la relation entre le nombre de cellules comptées et la
densité de cellules initiale.
Ouvrir les images « propidium iodide.jpg » et « fluorescein diacetate.jpg ». Les
marquages fluorescein diacetate et propidium iodide correspondent aux cellules
dont la membrane plasmique est intacte ou perméable, respectivement.
Ecrire une macro qui :
- demande à l’utilisateur si l’image est 5x ou 10x
- crée une image composite
- compte le nombre de cellules rouges et vertes
- calcule la densité cellulaire (nombre de cellules par mL)
- calcule le pourcentage de cellules vivantes (viabilité)
- affiche ces résultats dans un tableau
http://www.markergene.com/Newsletters/2009/WebNewsletter9.9.php
Yeast Live:Dead Assay