Laboratorio (Virtuale) di Informatica Medica
Esercizi di Elaborazione ed Analisi di immagini biomediche - Vincenzo Della Mea
Nuovi esercizi di elaborazione ed analisi di immagini biomediche
Questà pagina propone alcuni esercizi semplici di elaborazione ed
analisi di immagini biomediche, utili per comprendere meglio gli
argomenti trattati a lezione. Gli esercizi si basano sull'uso del
programma di elaborazione di immagini ImageJ, che viene
automaticamente lanciato come applet al caricamento di questa pagina
(gli interessati possono anche scaricare localmente il programma).
Gli esercizi sono interattivi e non prevedono alcuna conoscenza di
programmazione.
Il programma ImageJ si
aprirà in una finestra separata; se la connessione è lenta
potrà passare qualche minuto.
Nel menu "File" è presente un comando "Open Samples..." che
permette di caricare alcune immagini di prova. Le istruzioni del
programma sono accessibili al sito originale.
Esercizio 1: Le immagini a colori RGB
In quest'esercizio vedremo come vengono rappresentate e tratte in pratica le immagini a colori RGB.
- Caricare l'immagine Fluorescent Cells utilizzando il
menu "Open Samples"; subito sopra l'immagine, appare una riga
di informazioni sull'immagine stessa, come il numero di pixel ed il
numero di bit per pixel (in questo caso, RGB)
- Il menu Image:Type permette di cambiare il tipo di un'immagine. Oltre ai toni di grigio, ImageJ gestisce il tipo Stack, cioè sequenza di immagini. Convertendo il tipo RGB a tipo RGB stack, si ottiene una sequenza di tre immagini a toni di grigio, corrispondenti ai tre canali R, G, B.
- Osservate che aspetto hanno i tre canali separati, e confrontateli con l'immagine di partenza.
- QUest'immagine è particolarmente semplice; se provate a caricare, con la stessa procedura, l'immagine Mandrill, vedrete qualcosa di più complesso.
Esercizio 2: L'istogramma
In questo esercizio analizziamo l'istogramma di alcune immagini e ne deriviamo alcune osservazioni sulle caratteristiche delle immagini.
L'istogramma
- Come primo esempio, creiamo un'immagine molto semplice dal menu File:New, con le caratteristiche suggerite nel dialogo. Sarà completamente bianca. Tracciamo un cerchio con l'apposito strumento, e riempiamolo di nero col il comando Edit:Fill. Disattiviamo la selezione del cerchio cliccando altrove nell'immagine (altrimenti le susseguenti operazioni riguarderanno solo il cerchio). Esaminiamo poi l'istogramma (Analyze:Histogram). Come è fatto?
- Un istogramma di questo tipo si dice bimodale, ed evidenzia la presenza di due distribuzioni di pixel nell'immagine, una chiara ed una scura.
- In immagini reali, la bimodalità si esprime in modo più sfumato. Proviamo a esaminare l'immagine Blobs (aprendola con Open Samples), ed in particolare la forma del suo istogramma
- Quando le distribuzioni sono più di due, abbiamo un istogramma multimodale: per esempio, caricate l'immagine Esercizio 1 (con Open Samples)
- esaminare l'istogramma di questa immagine: come è fatto?
Esercizio 3: Miglioramento dell'immagine
Scopo del presente esercizio è effettuare la forma
più semplice di miglioramento di qualità di un'immagine,
cioé variare luminosità e contrasto; ciò si ottiene
effettuando delle semplici operazioni sull'istogramma dei toni di
grigio, che tendenzialmente portano ad aumentare il range di toni
effettivamente utilizzato nell'immagine.
L'applicazione principale è la visualizzazione, ma di solito
è anche utile per ulteriori fasi di elaborazione.
- Acquisizione
- Caricare l'immagine Fibroblast_Cell_Nucleus.jpg utilizzando il
menu "Open Samples"; subito sopra l'immagine, appare una riga
di informazioni sull'immagine stessa, come il numero di pixel ed il
numero di bit per pixel (in questo caso, 8, cioé 256 toni di
grigio)
- Muoviamoci con il mouse all'interno dell'immagine: nella
finestrella dei comandi di ImageJ appariranno dati come la posizione su
cui ci troviamo ed il valore del pixel ("value"). Si noti come tanto
più scuro è il pixel su cui siamo posizionati, minore
è il valore mostrato.
- l'immagine appare molto scura e poco contrastata: a ciò
corrisponderà, come vedremo, un istogramma particolarmente
"stretto" e spostato verso lo zero, cioé verso il nero
- Trasformazione: restoration
- Non è chiaro quale possa essere il modello del rumore per
quest'immagine; inoltre, poiché le informazioni presenti sono
costituite da piccoli "pallini" all'interno del nucleo, non conviene
usare tecniche generiche di filtraggio che potrebbero danneggiare il
contenuto
- Trasformazione: enhancement
- Viste le caratteristiche dell'immagine, proviamo a variarne
luminosità e contrasto utilizzando il menu
Image:Adjust:Brightness/Contrast.
- Si notino forma e posizione dell'istogramma.
- Facendo scorrere i due cursori di luminosità e contrasto,
cerchiamo di rendere l'immagine più comprensibile.
- Quando siamo soddisfatti, rendiamo effettiva l'operazione con il
tasto "Apply": l'istogramma verrà modificato di
conseguenza, ed i toni di grigio risulteranno (se abbiamo fatto le cose
bene...) distribuiti su tutto lo spazio disponibile di 256 toni.
Ovviamente il numero di toni diversi non cambierà: saranno
semplicemente più "distanti" l'uno dall'altro, dando maggiore
leggibilità all'immagine.
Altri esperimenti: modificare la sola
luminosità
ed applicare la modifica (tasto Apply). Si vedrà come
l'istogramma rimane uguale nella forma ma si sposta verso destra
(se abbiamo aumentato la luminosità).
Esercizio 4: restauro e miglioramento di un'immagine
Esempio di miglioramento di un'immagine troppo scura e rumorosa. In
questo caso, effettueremo dapprima un miglioramento per aumentare
luminosità e contrasto, dopo di che ci accorgeremo che è
necessario anche ridurre il rumore.
- Acquisizione
- Dal menu File:Open Samples scegliere l'immagine "Enhance
Me". Apparirà una finestra con un'immagine molto scura
- Trasformazione
- Dal menu Image:Adjust scegliere
Brightness/Contrast.
Apparirà una nuova finestra con l'istogramma dell'immagine e la
possibilità di variare luminosità e contrasto.
- Come si può notare, i livelli di grigio dell'immagine si
concentrano verso lo zero (in quanto molto scura)
- variando brightness e contrast, si può espandere
l'intervallo dei toni di grigio utilizzati dall'immagine, fino a
renderla chiaramente visibile
- Non si vede ancora bene? Clicca sul bottone "Auto", che
imposta automaticamente tutto in base a massimi e minimi
dell'istogramma...
- Cliccare sul bottone Apply per fissare la modifica:
l'istogramma cambierà
- ora si vede l'immagine, ma è piena di puntini bianchi e
grigi: rumore!
- per togliere il rumore, si possono utilizzare diverse tecniche.
Per provarle sempre sull'immagine di partenza, utilizzare il menu
Edit:Undo
tra una tecnica e l'altra, per eliminare l'effetto dell'ultima
operazione compiuta.
- Menu Process:Smooth - filtro che smussa le alte
frequenze (per esempio, il rumore della nostra immagine, che consiste in
rapide variazioni di luminosità).
- Menu Process:Filters:Median, provate a scegliere un
raggio da 2 in su e vedete che effetto fa
- Il risultato migliore, per questo tipo di rumore, si
può ottenere con Process:Noise:Despeckle. Questo
perché in effetti il rumore presente nell'immagine è di
tipo "sale&pepe" (qualche pixel diventa nero e qualche pixel
bianco), tipico di certi dispositivi di acquisizione video , e si
elimina con un filtro di tipo mediano, in questo caso a raggio
3.
Esercizio 5: L'istogramma e la sogliatura
La sogliatura dell'istogramma è un meccanismo che permette di evidenziare una delle distribuzioni di pixel presenti all'interno dell'immagine, delimitandone, spesso manualmente, gli estremi che si ritengono essere (approssimativamente) il suo massimo ed il suo minimo.
- Con l'immagine es1.jpg precedentemente caricata (oppure ricaricatela...), scegliere il comando Image:Adjust:Threshold..., che serve per selezionare interattivamente i due valori di soglia. La regione selezionata appare in rosso: provare a muovere i cursori al fine di segmentare i quadrati o il cerchio.
- Attenzione: se si applica la sogliatura, l'immagine viene trasformata in un'immagine binaria in cui lo zero indica le aree non selezionate , e l'uno quelle selezionate. Non è necessario farlo, e non è da fare se si intende valutare poi aspetti colorimetrici dell'immagine.
- Nelle immagini reali, dove le distribuzioni possono essere sovrapposte, si segmenteranno anche pixel che non appartengono alla regione di interesse
- Quali possono essere i limiti della sogliatura come mezzo di segmentazione? Si provi a caricare l'immagine Esercizio 2, e se ne esamini l'istogramma.
- Ora modifichiamo l'immagine in modo da creare un oggetto fittizio, chiaramente riconoscibile come tale, ma non segmentabile con la sogliatura dell'istogramma, come segue.
- Con lo strumento cerchio, selezionare un'area circolare; invertire poi i valori dei pixel con il comando Edit:Invert (questa operazione trasforma il bianco in nero, il nero in bianco ed a scalare i toni in mezzo sottraendo il valore del pixel alla costante 255). Si ottiene in questo modo una regione rotonda che è un oggetto diverso dallo sfondo.
- provare a segmentare l'oggetto di interesse con la sogliatura dell'istogramma.
- Come si possono segmentare oggetti del genere? La soluzioneè quella di utilizzare trasformate locali basate sul gradiente, poiché sul confine tra oggetto e sfondo i valori dei pixel differiscono molto di più che all'interno dell'uno o dell'altro. Si provi per esempio il comando Process:Find Edges.
Esercizio 6: calibrazione e misurazione
In questo esercizio misureremo le dimensioni di alcuni oggetti presenti
nell'immagine, sapendo a priori a quanto corrisponde nella realtà
un pixel. Ciò è possibile quando conosciamo il modello del
sistema di acquisizione (per esempio, l'ingrandimento effettivo di un
microscopio, la presenza di raccordi con la telecamera, la dimensione
del pixel del dispositivo CCD, etc) oppure quando abbiamo avuto modo di
misurare il singolo pixel con un campione di dimensioni note (nei
microscopi, appositi vetrini graduati ai 10 micron).
- Acquisizione
- Dal menu File:Open Samples scegliere l'immagine
"Blobs".
- Muovendosi sopra l'immagine, si noti come in questo caso al nero
corrispondano valori di grigio più alti rispetto a quelli dei
colori chiari. Questo significa che l'immagine è stata codificata
diversamente dalla due precedenti: 0=bianco, 255=nero
- Trasformazione
- Questa volta non attueremo alcuna trasformazione, perché
la qualità è sufficientemente buona
- Riduzione
- La fase di misurazione può essere fatta corrispondere alla
riduzione, tenendo però presente che è effettuata in modo
interattivo, cioé non automaticamente dal calcolatore ma con
operazioni dell'utente supportate da elaborazioni del calcolatore
- Proviamo subito a fare delle misure di lunghezza: nella
finestrella dei comandi di ImageJ, scegliamo l'icona della linea,
dopodiché torniamo sull'immagine, clicchiamo col mouse sul punto
di inizio dell'oggetto che intendiamo misurare, e tenendo cliccato
arriviamo fino alla fine. Nella finestrella appariranno alcuni dati, tra
cui la lunghezza in pixel dell'oggetto.
- Purtroppo la lunghezza in pixel non ci dice molto...
- Come passo ulteriore, è necessario far conoscere al
calcolatore a quanto corrisponde nella realtà il singolo pixel
sull'immagine. Scegliere quindi il menu Analyze:Set scale...
che aprirà un nuovo dialogo.
- Il dialogo permette di associare ad un certo numero di pixel una
lunghezza ed una unità di misura, che verranno poi usate per fare
i calcoli. Se sappiamo che ogni pixel corrisponde a 2.5 micron di
lunghezza, e che i pixel sono quadrati, scriveremo nell'ordine: 1 come
distanza in pixel, 2.5 come distanza nota, lasciamo 1.0 come aspect
ratio (rapporto tra X ed Y), "micron" come unità di misura.
- A questo punto, se rifacciamo le misure di prima, i valori che
otteniamo sono espressi in micron
- Interpretazione
- Se abbiamo pazienza di segnare i valori che raccogliamo in questo
modo, per esempio misurando il diametro di ogni particella presente
sul'immagine, potremmo calcolare dati come la dimensione media e la
deviazione standard, che potrebbero (probabilmente con altro genere di
immagini) essere utili per classificare l'immagine.
Esercizio 7: Ancora calibrazione e misurazione
In questo esercizio vedremo come ricavare la misura di calibrazione in
sistemi di acquisizione per i quali è più difficile dare a
priori la dimensione del pixel. La tecnica è usata spesso in
fotografia macroscopica, dove la presenza di zoom o la diversa distanza
dei campioni impedisce una calibrazione a priori.
- Acquisizione
- Dal menu Open samples, caricate l'immagine Rene .
- Assieme all'immagine è stato fotografato anche un
righello. Questo permette di capire la scala dell'immagine anche a
prescindere dal suo uso al calcolatore: il metodo si usa infatti
in sala anatomica per avere un'idea delle dimensioni dei campioni,
quando vengono fotografati in modo tradizionale, o anche in campo
più genericamente biologico per campioni di vario tipo..
- Trasformazione
- L'immagine è già di buona qualità (almeno,
dal punto di vista della misurazione), però è rovesciata.
Cerchiamo di riportarla nella posizione corretta effettuandone la
rotazione tramite il menu Image:Rotate:....
- Riduzione
- Questa volta, dopo avere selezionato lo strumento linea,
cerchiamo di tirare una riga il più dritta possibile tra i 5 ed i
10 centimetri del righello.
- Fatto ciò, andiamo al menu Analyze:Set
Scale...
- Così facendo, il numero di pixel apparirà
direttamente nell'apposito campo; sappiamo che a ciò
corrispondono 5 cm, per cui impostiamo gli altri valori di
conseguenza;
- Proviamo ora a misurare vari aspetti dell'immagine
Ulteriori osservazioni: quanto sarà grande il
più piccolo dettagllio misurabile?
Esercizio 8: Misurazioni automatiche
In questo esercizio vedremo come sia possibile effettuare una serie di
misurazioni automaticamente, a partire dalle cose viste in precedenza. Lo scopo è avere dati sulle
dimensioni dei blobs che costituiscono il contenuto dell'immagine.
- Acquisizione
- Dal menu File:Open Samples scegliere di nuovo l'immagine
"Blobs".
- Trasformazione
- Questa volta cercheremo di migliorare l'immagine, poiché
è destinata all'elaborazione automatica
- Trasformazione: restoration
- Volendo isolare le macchie scure dallo sfondo, cerchiamo di
ridurre la variabilità dello sfondo con un'operazione di
filtraggio, che dovrebbe semplicemente rendere l'immagine più
uniforme. Scegliamo quindi il filtro mediano dal menu
Process:Filters:Median. Impostiamo il raggio di azione del filtro a 3:
questo significa che, in un intorno di 3 pixel attorno ad ogni pixel
dell'immagine, sceglierà quello col valore di grigio
corrispondente alla mediana e lo sostituirà a quello esaminato.
L'esito è un'immagine più "liscia", sia nelle sue parti
chiare che nelle sue parti scure.
- Trasformazione: enhancement
- Per rendere più evidente la differenza tra sfondo e primo
piano, aumentiamo il contrasto con la tecnica vista in precedenza (menu
Image:Adjust:Brightness/Contrast).
Poichè non siamo interessati alla visualizzazione ma solo alla
misura delle dimensioni dei blobs, possiamo "sparare" lo sfondo
affinché diventi bianco.
- Riduzione
- Impostiamo la scala come in precedenza, 2.5 micron/pixel (menu
Process:Set
Scale)
- A questo punto, impostiamo una soglia che separi agevolmente le
macchie dallo sfondo col menu Image:Adjust:Treshold. In
realtà, è possibile impostare due soglie, una inferiore ed
una superiore, che permettono di isolare delle aree dell'immagine i cui
valori di grigio sono compresi tra i due valori di soglia. Giocando con
i due cursori, vediamo come varia la parte dell'immagine "presa" con la
sogliatura (è quella evidenziata in rosso). Poiché il
nostro scopo è cercare di isolare le macchia, dovremo prendere i
valori "più alti" dell'istogramma (ricordiamoci che il nero, in
questo caso, vale 255).
- Stabiliamo ora quali sono i parametri che ci interessa misurare,
utilizzando il menu Analyze:Set Measurements. Qui possiamo
stabilire cosa misurare; poiché abbiamo fatto numerose
trasformazioni che hanno inciso sui toni di grigio, sarà inutile
scegliere le misure riferite ad essi. Scegliamo per esempio area,
perimetro, centro di massa.
- Con il menu Analyze:Analyze particles cominciamo la
misurazione automatica. La cosa più rapida è scegliere
"Show
Outlines" (mostrerà un'immagine nuova con evidenziate
le particelle misurate), "Display Results" , Ok, e
vedere cosa succede...
- Apparirà una tabella con i valori richiesti per ognuna
delle particelle identificate in rosso. Ciò comprende anche
quelle più piccoline, che probabilmente corrispondono a del
rumore, ed a quelle sui bordi, incomplete e quindi in grado di falsare i
nostri risultati (si pensi all'area media, per esempio).
- Vediamo come risolvere i due problemi citati. Torniamo al dialogo
Analyze
Particles, impostiamo una soglia minima di area per le particelle
da misurare (per esempio, 15 pixel), settiamo "Exclude edge
particles", e, per eliminare i risultati precedenti, "Clear
Results table". Vediamo ora cosa è cambiato...
- Nell'immagine creata si vedono ora le particelle prese in
considerazione, che sono ovviamente meno delle precedenti.
- Interpretazione
- I risultati mostrati nella tabella potrebbero essere valutati
statisticamente per evidenziare alcune particelle in qualche modo
'patologiche" (cioé classificabili come tali), oppure per
associare all'intera immagine una classe.
Ulteriori osservazioni: confronta il numero di
particelle ottenute dal calcolo automatico con quelle del tuo
vicino...
Esercizio 9 - Ricostruzione 3D
In questo esercizio verranno effettuate delle semplici ricostruzioni tridimensionali a partire da una sequenza di immagini da risonanza magnetica.
- Acquisizione
- Dal menu File:Open Samples scegliere l'immagine
"MRI-stack".
- si possono esaminare le varie sezioni scorrendo il cursore immediatamente sotto l'immagine
- Trasformazione
- possiamo creare un mosaico con le immagini (utile per vederle tutte assieme) con il menu Image:Stacks:Make Montage..., dove è anche possibile impostare alcuni parametri per la creazione (es. scala)
- per una ricostruzione tridimensionale di base, si può utilizzare il comando Image:Stacks:3D Project, che crea una serie di proiezioni a partire dallo stack di immagini, secondo un asse, e distanziate di un certo numero di gradi; tutto configurabile. L'output è un nuovo stack, in cui le proiezioni generate sono messe di seguito e che è possibile animare con il comando Image:Stacks:Start Animation
Esercizio 10 - Immagini bitmap e vettoriali
In questo esercizio confronteremo le immagini bitmap e vettoriali dal punto di vista della qualità. Non usiamo più ImageJ, ma Paint e Word.
- Aprire il programma Paint, e disegnare un cerchio colorato (internamente); poi copiarlo.
- Aprire Word, ed incollare il cerchio in una pagina vuota.
- Con lo strumento di disegno di Word, creare un cerchio simile di fianco al precedente
- Proviamo ora ad ingrandire la presentazione a video del documento, con lo zoom. Cosa succede ai due cerchi?
- Il primo è bitmap, il secondo è vettoriale. Il primo si può ingrandire esclusivamente ingrandendo la dimensione dei singoli pixel, il secondo può essere ridisegnato di volta in volta a qualsiasi risoluzione
Esercizio 11 - Ecografia
Caricare questa immagine ecografica; si può usare per provare ad esaminare il profilo di una linea, in modo da simulare A-mode con Analyze: Plot profile.