ETD

Archivio digitale delle tesi discusse presso l'Università di Pisa

Tesi etd-05262008-174152


Tipo di tesi
Tesi di laurea specialistica
Autore
CAMMELLI, GIANLUCA
URN
etd-05262008-174152
Titolo
Segmentazione di immagini biomediche con approccio "dynamic programming"
Dipartimento
INGEGNERIA
Corso di studi
INGEGNERIA BIOMEDICA
Relatori
Relatore Prof. Positano, Vincenzo
Relatore Prof. Landini, Luigi
Parole chiave
  • dynamic programming
  • bioimmagini
  • segmentazione
Data inizio appello
20/06/2008
Consultabilità
Parziale
Data di rilascio
20/06/2048
Riassunto
Introduzione

Obbiettivo di questa tesi di laurea specialistica è implementare un algoritmo di segmentazione che segua la logica di funzionamento del “Dynamic Programming”.
Il Dynamic Programming è un approccio abbastanza nuovo che negli ultimi tempi è stato spesso utilizzato nella segmentazione di immagini biomediche, in particolare in immagini di RMN cardiaca.
Questo approccio infatti riesce molto bene, al contrario di altre metodologie, per esempio, a segmentare i ventricoli del cuore.
Questo approccio fonde insieme varie informazioni relative alla parte anatomica da segmentare e pesandole opportunamente riesce ad identificare il bordo dell’oggetto.
Le informazioni di cui la procedura tiene conto sono di diversi tipi.
Si possono infatti considerare informazioni relative al valore dei pixel nella scala di grigio, informazioni geometriche, informazioni di gradiente.
La procedura ed il suo corretto funzionamento viene a dipendere dal tipo di immagine che si vuole analizzare.
Le caratteristiche che si rivelano molto importanti per una buona riuscita dell’algoritmo di segmentazione sono tutte quelle legate alla buona qualità dell’immagine stessa.
Purtroppo però non sempre nella diagnostica medica le immagini rispondono alle caratteristiche sopra citate.
Infatti non è opportuno, visto le possibili conseguenze negative, esporre i pazienti a elevate intensità di radiazioni per ottenere una immagine radiologica digitale oppure TC più definita e non è neppure possibile utilizzare per tutti i pazienti apparecchi RMN ad elevato campo statico visto il costi elevati di tali apparecchiature.


Le immagini sono affette da vari tipi di rumore, da quello di acquisizione fino a quello biologico dovuto alla trama interna dei vari organi e tessuti; il contrasto tra tessuti vicini non sempre permette di separare in maniera semplice un tessuto da un altro.
Vediamo adesso di anticipare su quali immagini si è lavorato, il funzionamento dell’algoritmo, e come si è ovviato alle problematiche precedenti.
Le immagini sul quale si è messa a punto la procedura sono immagini di RMN addominale.
Tali dataset di immagini raffigurano al loro interno la scansione completa dell’addome di individui umani di sesso maschile.
Tra tutti i tessuti e gli organi presenti si è in particolare deciso di testare l’algoritmo di segmentazione sui reni.
Prima di analizzare le immagini reali si è però deciso di realizzare un fantoccio di risonanza che permettesse di verificare su una immagine di prova da noi creata e pertanto nota in ogni dettaglio la bontà dell’approccio intrapreso.
Abbiamo cercato pertanto di creare un fantoccio più simile possibile all’originale.
Presa una immagine campione si sono rispettate le dimensioni, le geometrie, le posizioni, i valori dei pixel dei tessuti ed infine, cosa forse più importante le caratteristiche del rumore.
Per riuscire in ciò si sono svolte misurazioni sull’immagine reale ed una approfondita indagine sul rumore.
Tale indagine ha tenuto conto del fatto che la metodica di acquisizione delle immagini influenza le caratteristiche di rumore.
In particolare le immagini di RMN sono affette da rumore di tipo Riciano.
Vediamo ora a grandi linee l’essenza dell’algoritmo di segmentazione.
L’utente che utilizza la procedura deve in primo luogo scegliere quale dataset tra quelli disponibili vuole utilizzare.
Fatta questa scelta, subito dopo deve scegliere una immagine che contenga i reni, per far ciò l’utente può scorrere avanti ed in dietro tutte le immagini del dataset prescelto e digitare infine la propria preferenza.
Infine trovata anche l’immagine non resta altro che scegliere quali dei due reni si vuole segmentare.
Tale scelta da parte dell’utente può essere effettuata semplicemente cliccando con il mouse, il rene sinistro oppure quello destro.
Tale scelta ha come prima conseguenza l’estrazione di un riquadro dall’immagine contenente al suo interno appunto il rene stesso.
L’estrazione del riquadro risulta necessaria in primo luogo per due motivazioni:
Ø Identificare agevolmente il centro del rene con Hough Transform
Ø Alleggerire e sveltire le procedure di filtraggio
Lavorando infatti sul riquadro estratto con un algoritmo di edge detection è possibile ottenere una immagine che rappresenta i bordi approssimativi del rene.
Applicando a tale immagine la trasformata di Hough, nella versione che permette di riconoscere figure circolari, si ottengono le coordinate del centro e la misura del raggio del rene.
Con tali valori si può ricalibrare ulteriormente la dimensione del riquadro estratto in maniera che contenga tutto il rene e che quest’ultimo appaia in posizione centrale.
A questo punto è possibile applicare l’algoritmo di filtraggio.
La scelta può ricadere su due tipologie di filtro quello anisotropico oppure quello NL-Means.
Il secondo filtro in generale riesce a fornire risultati migliori rispetto a quello anisotropico, ma comunque spetta all’utente, visti i risultati dei filtraggi scegliere su quale immagine continuare a lavorare.
L’immagine filtrata viene ora trasformata da coordinate cartesiane a coordinate polari attraverso l’utilizzo di un apposito algoritmo.
Tale immagine può essere descritta nel seguente modo.
Nella parte superiore troviamo una zona appartenente al rene, spostandoci verso il basso troviamo una regione di transizione, che chiameremo bordo, infine nella parte inferiore dell’immagine troviamo la parte esterna al rene.
Non resta a questo punto che applicare l’algoritmo di Dynamic Programming che ci permette di separare il tessuto renale da quello circostante.
E’ necessario adesso rintracciare il pixel di transizione, ovvero quello che separa la regione da segmentare da quella esterna, appartenente alla prima colonna dell’immagine in coordinate polari.
Tale pixel sarà il seme di partenza dal quale l’algoritmo partirà nel suo lavoro di segmentazione.
Risulta necessario adesso fornire delle regole che permettano di scegliere di volta in volta su quale pixel spostarsi per portare a compimento la procedura.
Per rispettare la continuità spaziale in coordinate cartesiane infatti, la scelta del pixel successivo in coordinate polari può ricadere solamente su 3 pixels adiacenti a quello selezionato.
Per consentire la scelta di uno dei 3 pixels è necessario implementare una funzione costo.
La funzione costo viene calcolata per ciascuno dei 3 pixels possibili destinazione, ed infine viene scelto quello che la massimizza.
La funzione costo è composta da 3 contributi:

C(i,j)=Pg*g(i,j)+ Pc*c(i,j)+ Pd*d(i,j)

Ø Il primo g(i,j) rappresenta il contributo del gradiente del pixel p(i,j).
Ø Il secondo c(i,j) rappresenta il contributo dovuto al colore del pixel p(i,j)
rispetto al pixel precedente.
Ø Il terzo d(i,j) rappresenta il contributo dovuto alla distanza del pixel p(i,j) rispetto al pixel precedente.

Mentre Pg, Pc, Pg rappresentano i pesi dei rispettivi contributi.
Tale procedura una volta arrivata a termine, cioè all’ultima colonna dell’immagine evidenzia il bordo che separa il rene dalle zone circostanti.
A questo punto si applica l’algoritmo inverso a quello di cambio di coordinate che riporta l’immagine polare in coordinate cartesiane.
Per migliorare ulteriormente i risultati ottenuti si sono inoltre svolte anche ulteriori verifiche.
All’immagine in coordinate polari si sono applicati anche algoritmi di clustering che permettessero di ridurre il valore dei pixel in funzione della loro appartenenza ai vari tessuti presenti, per valutare se la cosa favorisse la successiva segmentazione.
Gli algoritmi scelti per svolgere questo compito sono l’algoritmo K-Means e l’algoritmo di Otsu.
Il secondo riesce nella maggior parte dei casi a svolgere il proprio lavoro in maniera più accurata.
Il K-Means infatti fa dipendere i risultati forniti da una inizializzazione dei centroidi casuale che porta in alcuni casi a risultati inesatti se non adirittura incoerenti.
Per migliorare i risultati con questo approccio si potrebbe realizzare una procedura dedicata appunto all’inizializzazione dei centroidi.
Visto comunque che l’algoritmo di Otsu riesce dove il K-Means viene meno e considerato che la procedura di segmentazione non sembra giovarsi molto di una precedente operazione di clustering non si è ritenuto opportuno approfondire l’argomento.

File