• Non ci sono risultati.

Capitolo 5 Realizzazione di un’interfaccia grafica

N/A
N/A
Protected

Academic year: 2021

Condividi "Capitolo 5 Realizzazione di un’interfaccia grafica"

Copied!
13
0
0

Testo completo

(1)

Capitolo 5

Realizzazione di un’interfaccia

grafica

Introduzione

Per eseguire i comandi senza le interfacce testuali (CLI, command line interface), è stata realizzata un'interfaccia utente grafica, anche detta GUI (graphical user interface), che è un paradigma di sviluppo in grado di consentire all'utente di interagire con il computer manipolando graficamente degli oggetti.

IDL ha a disposizione un “widget toolkit” che fornisce una serie di elementi grafici con cui realizzare l’interfaccia. Attraverso questi oggetti l’utente può interagire in modo da convogliare informazioni verso o fuori dal programma.

L’uso delle interfacce grafiche divincola qualsiasi utente dalla necessità di leggere e interpretare il codice scritto dal programmatore. Questo permette di applicare il programma realizzato anche ad un utente non esperto.

In questo capitolo viene descritta nel dettaglio l’interfaccia “user friendly” realizzata e le funzionalità di cui dispone. Il lavoro è stato ordinato in diversi fogli di lavoro ognuno dei quali sintetizza una parte dell’attività svolta. La prima pagina contiene una visualizzazione generale delle immagini in fase venosa e arteriosa; la seconda riassume l’algoritmo di segmentazione effettuato sul fegato e sulle vene; la terza l’applicazione

(2)

della maschera binaria sulle altre fasi; la quarta lo studio della mappa della varianza e l’individuazione delle lesioni; la quinta l’applicazione della maschera delle lesioni alle altre fasi e la memorizzazione dei dati in un file esterno in modo da studiare statisticamente gli oggetti individuati. Ogni pagina è delineata in un top-level widget, ovvero un contenitore che racchiude dentro di sé tutti gli altri elementi grafici.

5.1 Realizzazione della prima “pagina”

Nella prima pagina sono state create due finestre: una per visualizzare il volume di riferimento in fase venosa e l’altra, invece, per il volume in fase arteriosa.

(3)

La fase arteriosa, infatti, è necessaria a monte della segmentazione per annullare quei pixel che superano una certa soglia, che si è visto appartenere al cuore e ai reni. La fase venosa, invece, è quella che viene impiegata per la segmentazione dell’organo.

I widget_button OPEN permettono di connettersi alla directory e caricare i file DICOM nell’interfaccia. Le immagini possono essere visualizzate orientandole in modo diverso attraverso l’interazione con il widget_droplist REVERSE che permette di scegliere se ribaltare le immagini in senso orizzontale o verticale. È stata inoltre implementata una funzione di WINDOWING per consentire di adattare il sistema di visualizzazione dell’immagine alle capacità visive dell’occhio umano. Si è visto infatti che le immagini caricate all’inizio hanno valori di grigio che si estendono dal valore minimo -32767 corrispondente al primo background al valore massimo di 1539. Il punto più scuro viene visualizzato come nero mentre quello più luminoso come bianco. L’occhio umano, tuttavia, non è sufficientemente sensibile per distinguere variazioni così piccole di intensità in una scala così ampia. L’occhio umano medio è in grado di distinguere non più di quaranta livelli di grigio. La tecnica del windowing consiste nel selezionare tra i valori di numero CT solo un gruppo di essi e di visualizzare solo questa gamma limitata di valori di assorbimento escludendo tutti gli altri. In questo modo l’osservatore deciderà quanti numeri CT saranno inclusi in tale gamma e dunque controllare il contrasto. Il windowing sull’interfaccia è stato applicato solo al primo volume e i limiti minimo e massimo trovati sono stati poi presi come riferimento anche per gli altri volumi. A tale scopo si è creata una funzione che viene attivata al click del mouse sulla prima finestra. Inizialmente si è definito un valore di contrasto apri al 25% e un valore di luminosità del 75%.

(4)

L’idea è quella di cambiare interattivamente il contrasto dell’immagine con il movimento del mouse. Assumendo che il contrasto e la luminosità possano variare da 0 a 100 e che il minimo e il massimo valore dell’immagine siano noti, si possono trovare il livello (level) e l’ampiezza (width) della finestra in cui è visualizzata l’immagine.

level = (1-brightness/100.)*(maxVal - minVal) + minVal width = (1-contrast/100.)*(maxVal – minVal)

Il livello si riferisce al valore al centro della finestra e l’ampiezza definisce le dimensioni della finestra dei valori dell’immagine. Si può immaginare una finestra che fa scorrere su e giù una linea di numeri che rappresentano i valori dell’immagine. La finestra può essere allargata, inglobando più valori, o ristretta.

Inizialmente sono stati imposti un valore di contrasto pari al 25% e un valore di luminosità del 75%. La luminosità può essere variata guidando il cursore sull’immagine in direzione orizzontale mentre per il contrasto in direzione verticale. Per variare simultaneamente i due parametri si fa scorrere il cursore in direzione diagonale. Il grado di cambiamento per il movimento di un pixel è stato imposto pari a 0.7. I nuovi valori trovati vengono di volta in volta aggiornati nella struttura info e saranno il punto di partenza per l’applicazione successiva della funzione.

contrast =((info.ystart - event.y)*0.7+ info.contrast); brightness = ((info.xstart - event.x)+0.7+ info.brightness); info.contrast=contrast

(5)

Una volta memorizzati questi valori, vengono ricalcolati il livello, l’ampiezza, il nuovo valore di minimo e massimo della finestra come di seguito:

level = (1-brightness/100.)*(info.maxGray - info.minGray) + info.minGray width = (1-contrast/100.)*(info.maxGray - info.minGray)

displayMax = (level + (width / 2)) displayMin = (level - (width / 2))

L’algoritmo è stato poi modificato in modo da evitare che i valori della finestra superassero i limiti minimo e massimo iniziali nel caso in cui il livello assumesse valori troppo grandi o troppo piccoli.

5.2 Realizzazione della seconda “pagina”

La seconda pagina contiene una serie di algoritmi implementati sul volume di riferimento.

Dal bottone SEGMENTATION viene richiamata la funzione che consente di eseguire la segmentazione del fegato.

Indipendentemente dalla realizzazione della segmentazione, è stata realizzato un algoritmo che permette di visualizzare l’istogramma del volume di partenza e il fitting della curva gaussiana relativo al fegato. Il collegamento a questo algoritmo è dato dal widget_botton LIVER HISTOGRAM. L’istogramma è raffigurato nella finestra a sinistra della seconda pagina dell’interfaccia mentre i valori di media e di deviazione standard dell’organo epatico appaiono nei due widget di testo.

(6)

Figura 39

Figura 40 - Widget di testo

Nell’interfaccia si possono scorrere le singole fette del volume nella finestra, riprodotte nelle loro dimensioni originali di 512x512. Contemporaneamente, però, si può visualizzare anche l’intero volume in 3D cliccando sul bottone WHOLE_VOLUME, che richiama la funzione xvolume di IDL.

(7)

Figura 41

L’utente può scegliere attraverso un check-box se nella segmentazione del fegato debbano essere escluse le vene. Queste hanno in fase venosa hanno un valore d’intensità di grigio superiore a quello del parenchima epatico. Come già detto nei precedenti capitoli, per effetto del volume parziale non esiste una curva ben definita che descrive la distribuzione di probabilità dei pixel appartenenti alle vene. Attraverso l’uso di due slider,viene data quindi all’utente la possibilità di variare manualmente i limiti entro cui calcolare il thresholding necessario ad isolare le vene dal resto dell’organo. Il limite minimo di input imposto nello slider è di 130 mentre il valore massimo di 190.

Figura 42

Anche in questo caso l’utente ha la possibilità di osservare i risultati della segmentazione delle vene scorrendo le singole fette nella finestra visualizzata, oppure in 3D cliccando sul botton VEINS VOLUME.

(8)

Figura 43

5.3 Realizzazione della terza “pagina”

Nella terza pagina viene applicata la maschera trovata per la segmentazione del fegato agli altri volumi.

Attraverso un widget_droplist viene consentito all’utente di impostare la fase che vuole analizzare, operazione importante per salvare i dati nel volume appropriato che sarà utilizzato in seguito. Se si sceglie la fase arteriosa, poiché il volume in fase arteriosa è già stato caricato, appare un messaggio di avvertimento per l’utente in modo da ricordargli che il volume già esiste. Negli altri casi si procede all’apertura regolare del file DICOM.

Per ottenere la segmentazione nella nuova fase, occorre moltiplicare la maschera trovata in fase venosa per il nuovo volume caricato. Dopo aver richiamato questa operazione attraverso il bottone TEMPLATE, le nuove immagini vengono visualizzate nella finestra a sinistra della pagina. Accanto a questa finestra possono essere visualizzati il volume e il fegato

(9)

segmentato in fase venosa per poter fare un confronto visivo con i nuovi risultati ottenuti.

Figura 44

Anche in questo caso possono essere calcolati media e deviazione standard dei pixel appartenenti al fegato, valori che vengono visualizzati nei widget_text dopo aver cliccato sul bottone HISTO.

(10)

5.4 Realizzazione della quarta “pagina”

Nella quarta pagina si lavora invece sull’individuazione delle lesioni. Anche qui si può scegliere la fase su cui lavorare attraverso un widget_droplist. La fase presa come default è quella di riferimento, ovvero quella venosa.

Una volta calcolata la mappa della varianza, questa viene visualizzata con una mappa a falsi colori sul volume su cui è stata calcolata. Il bottone COUNTORS è un widget che richiama la funzione per l’individuazione dei contorni. Questa non è altro che un’operazione di selezione dei pixel che hanno un valore di varianza superiore a un certo limite.

(11)

L’algoritmo per l’individuazione degli oggetti sferoidali viene richiamato dal widget_button FIND LESIONS.

Il bottone ADD MAUALLY permette invece di effettuare una selezione semiautomatica di quegli oggetti esclusi dalla funzione che trova le lesioni in modo automatico. Al click del bottone appare il messaggio “Click on the center of the seed for region growing” per poter avviare il region growing implementato. Occorre dunque cliccare sull’immagine a sinistra, raffigurante la mappa della varianza, per selezionare il seme di partenza dell’algoritmo.

Trovata la maschera della segmentazione delle lesioni, rimane da applicarla ai volumi d’interesse.

5.5 Realizzazione della quinta “pagina”

Nell'ultimo foglio dell'interfaccia viene calcolato il prodotto della maschera per i volumi nelle quattro fasi. Per consentire all'utente di effettuare un confronto grafico tra i risultati ottenuti, ogni volume è riportato in un widget_draw diverso.

Anche qui viene selezionata la fase d’interesse per il calcolo, scegliendo tra le opzioni nel widget a destra di ogni finestra. Per la fase basale e tardiva, nel caso i volumi non siano disponibili, appare un messaggio di avvertimento che il volume non esiste.

(12)

Figura 46

Poiché le immagini riportate sono comunque di dimensioni piccole, è stato implementata una funzione in grado di effettuare uno zoom delle immagini. Dopo aver cliccato sul punto dell'immagine che si vuole ingrandire, l'algoritmo seleziona un numero uguale di pixel a destra e a sinistra del punto considerato in modo da disegnare un quadrato di dimensioni pari a un quarto della finestra iniziale e avente come punto centrale il punto selezionato. Nel caso in cui il limite minimo trovato sull'asse delle ascisse o su quello delle ordinate sia negativo, viene preso come minimo lo zero e come massimo il massimo trovato aumentato di una quantità positiva, pari al valore assoluto della differenza tra il minimo e lo zero. Un'operazione simile è effettuata anche nel caso in cui venga sforato il limite massimo: questa volta è il valore minimo che viene diminuito di una quantità pari alla differenza tra il limite massimo trovato e il massimo della finestra (255). Il

(13)

quadrato individuato viene a questo punto ridimensionato da un quarto alle intere dimensioni disponibili della finestra.

Figura 47

I volumi contenenti la segmentazione delle lesioni nelle quattro fasi sono stati salvati in un file esterno all'interfaccia. Ciò consente di velocizzare le operazioni sull’analisi dei dati che verranno descritte in seguito e di non caricare troppo la memoria occupata dal programma.

Riferimenti

Documenti correlati

(a) ` e uguale alla somma delle aree dei pentagoni regolari costruiti sui cateti di quel triangolo rettangolo.. (b) ` e maggiore alla somma delle aree dei pentagoni regolari

In quella norma “per garantire il rispetto degli obblighi comunitari e la realizzazione degli obiettivi di finanza pubblica per il triennio 2007-2009, in attuazione

qualunque componente grafica su cui l'utente possa svolgere delle azioni (ad esempio un bottone o una lista di scelte in un menu) Il programmatore decide come gli eventi generati

Sia data la parabola y=-x 2 +4x, trovare il rettangolo di area massima inscritto nel parte di piano compresa tra la. parabola e

[r]

(2 punti) Perché nella tecnologia ATM sono stati sostituiti i pacchetti di lunghezza variabile (utilizzati, per esempio, in Frame3. (2 punti) Qual è il valore minimo della netmask

Determinare l'ampiezza dell'angolo al centro del settore circolare in modo che il cono abbia

Durante l'anno scolastico 2005-2006 insegnavo nella classe 5F del Liceo Scientifico Statale “Leonardo da Vinci” di Reggio Calabria, e nel mese di Aprile tre miei studenti :