Indice Introduzione ..........................................................

Indice
Introduzione ................................................................................................................. 2
Un software per l’automazione di procedure statistiche su dati Pet ............................ 2
Il Pre-Processing .......................................................................................................... 7
La fase di statistica ..................................................................................................... 12
Algoritmo di classificazione ...................................................................................... 13
L’interfaccia ............................................................................................................... 15
Uso del matlabcontrol di JMI ................................................................................ 16
L’algoritmo di classificazione in JAVA .................................................................... 16
Introduzione
Lo scopo di questo studio è stato quello di avvalersi di strumenti quali
Java e MatLab, per la realizzazione di interfacce di comunicazione per
entrambi i linguaggi, col compito di ottimizzare procedure caratterizzati
da processi manuali ed onerosi dal punto di vista temporale relative ad
analisi statistiche su dati PET.
Di seguito verranno illustrati i vari passaggi che porteranno
all’applicazione finale la quale, tramite utilizzo di mirate strutture dati,
fornirà l’output atteso.
Un
software
per
l’automazione
di
procedure
statistiche su dati Pet
L’applicazione è stata realizzata sull’intero flusso di lavoro, partendo
dalla conversione dei files Dicom, proseguendo sulla parte di preprocessing/statistica e terminando infine con il running dell’algoritmo di
classificazione dall’ottenimento del file mdata.
Il file mdata contiene al suo interno le coordinate delle ROI nelle tre
dimensioni x-y-z, le coordinate spaziali del punto a massima intensità ed
il valore medio nel segnale della ROI.
Una parte dello studio è stata quella di individuare il modo con il quale
tali valori, inizialmente non estraibili, potessero essere acquisiti come
valori sui quali poter applicare l’algoritmo di classificazione in maniera
del tutto automatizzata e senza intervento manuale.
Il flow’s diagram mostra tutta l’area di appartenenza dell’applicativo
Figura 1 Flow’s Diagram
L’interazione tra Matlab e l’application java abbraccia interamente i
rispettivi toolbox, e grazie a questa interazione è stato possibile
automatizzare l’intero processo.
Per creare un ambiente di sviluppo che potesse far interagire i due
ambienti è stato necessario l’utilizzo del MatlabControl, dove un
programma Java in esecuzione in una JVM diversa rispetto MATLAB
potesse lanciare e controllare una sessione di MATLAB senza
l'intervento dell'utente.
Conseguita la comunicazione dei due ambienti, si è passati con la
realizzazione della fase di pre-processing prevedendo:
- La conversione dei dati Dicom in un file con estensione nii
- La Coregistrazione
- La normalizzazione
- Lo smoothing
Per quanto riguarda la parte di statitisca:
- Factorial Design Specification
- Model Estimation
- Contrast Manager
- Result Report
La Gui dell’applicativo java concede solo pochi passaggi lato utente
rispettando quindi lo scopo di automazione di questo elaborato:
Figura 2 Front end dell'applicazione
La figura2 racchiude tutte le sequenze procedurali che uno user,
all’utilizzo dell’applicativo, deve eseguire.
Per prima cosa, dopo aver lanciato il jar del software, devono essere
selezionati i files dicom che saranno poi sottoposti a conversione nel
formato nii. Tale passaggio viene rappresentato all’interno del frame,
come mostrato nella figura successiva.
Figura 3 Uploads Dicom
I files image selezionati, sono opportunamente caricati all’interno di una
struttura dati, nel caso specifico sono stati utilizzati gli arraylist per il
semplice fatto che per la gestioni di questi oggetti, non necessitava la
sincronizzazione.
Caricati i files Dicom, l’utente deve selezionare una cartella di lavoro,
che sarà quella dove all’interno si troveranno tutti i files dell’intero
elaborato, dal file nii ricavato dalla conversione Dicom, alla
coregistrazione e così via.
L’utente andrà a specificare il percorso dove vuole salvare il file ed il
software in automatico andrà a creare un folder distinct, in maniera tale
da non confondere ulteriori test che lo stesso utente può effettuare
nell’arco di uno stesso periodo e seguendo quindi questa regola, la
cartella di lavoro si chiamerà “ output_1652012_0921 ” indicando
rispettivamente data, minuti e secondi della creazione del folder.
Figura 4 Path della cartella di lavoro
Assegnata la cartella di lavoro, non resta che aprire il proxy di
connessione con Matlab, che consentirà poi all’utente di lanciare in
modo sequenziale tutti i vari step successivi, ovvero il pre-processing e
la parte statistica.
Figura 5 Proxy Matlab
Il Pre-Processing
Dai passaggi visti in precedenza, sono stati caricati i files Dicom in una
struttura dati, è stato definito il work folder ed è stata aperta l’istanza in
matlab che permette di avviare la fase di pre-processing e di statistica.
Un altro settaggio (opzionale) è quello dei parametri di configurazione
per ciascuna tecnica. La figura successiva mostra la possibilità di
settaggio dei parametri prima del run pre-processing:
Figura 6 Assegnamento dei paramatri
Se non sono assegnati i parametri, le varie tecniche possono essere
lanciate mantenendo gli stessi valori di default presenti in SPM.
Definita anche questa parte, non resta che lanciare il pre-processing in
modo sequenziale, dal tasto Converter al button Coregister e così via. Lo
screenshot successivo mostra l’avvio ed il successivo risultato nel work
folder.
Figura 7 Output Converter
Procedendo al button Coregister, si seleziona il file nii ottenuto dalla
conversione e viene avviata la Coregistrazione.
Figura 8 Output Coregister
Allo stesso modo, per completare la fase di pre-processing, sono lanciati
Normalise e Smooth:
Figura 9 Output Normalise & Smooth
La fase di statistica
Completato il pre-processing possiamo avviare la parte relativa alla
statistica e nello specifico, Factorial Design Specification, Model
Estimation,Contrast Manager e Result Report.
Cliccando direttamente sul button Stats, dobbiamo selezionare il file con
patologia ed in seguito i files o il singolo file controllo.
Conclusa la fase di selezione dei files, le quattro tecniche definite
vengono lanciate fino all’ottenimento dell’output SPM.mat.
Il result report dell’intero processo è rappresentato nella figura
successiva:
Figura 10 Output Result Report
Algoritmo di classificazione
In questa fase viene catturato il file mdata, viene aperta un’istanza di
matlab che lancia alcuni comandi utili per estrarre le nostre informazione
di interesse (Coordinate ROI, Punto massima Intensità, Valore Medio) e
successivamente viene creato un file di testo con all’interno i nostri
valori. L’immagine successiva mostra i passaggi in codice matlab,
lanciati dopo l’apertura dell’istanza di Matlab:
1.
img_for_space = 'avg152T1.nii';
2.
img_space = mars_space(img_for_space);
3.
estensione_file='_roi.mat';
4.
f6 = fopen('info_data.txt','w');
5.
for i=1:length(regions)
6.
valore_medio=mean(regions{i}.Y);
7.
nome_regione=regions{i}.name;
8.
fprintf(f6,'%s\n',nome_regione);
9.
fprintf(f6,'%g\n',valore_medio);
10. roi_name=strcat(nome_regione,estensione_file);
11. roi=maroi(roi_name);
12. pts = realpts(roi, img_space);
13.
matA= min(pts, [], 2);
14. fprintf(f6,'%g\n',matA);
15.
matB= max(pts, [], 2);
16. fprintf(f6,'%g\n',matB);
17. end
18. fclose(f6);
19. f7 = fopen('vmedio.txt','w');
20. numero_roi=unique(Y);
21. fprintf(f7,'%g\n',numero_roi);
22. fclose(f7)
Dal codice si comprende come viene creato il file e come viene
interrogato il file mdata affinché i nostri valori informativi possano
essere utilizzati ed immagazzinati in opportune strutture dati.
Figura 11 File di Output della prima istanza
Seguendo la lettura a blocchi da sinistra a destra della figura 4, notiamo
come vengono identificate le coordinate dei picchi, il valore medio e le
coordinate spaziali delle ROI. Come già scritto in precedenza,tali valori
erano inizialmente accessibili solo tramite la view di Marsbar e non
estraibili; seguendo pertanto questa procedura, tali dati possono essere
manipolati e processati.
Per la gestione di questi dati è stato necessario l’utilizzo di strutture dati
quali gli Arraylist di Java
L’interfaccia
Java Matlab Interface (JMI) è un’interfaccia documentata e non
pubblicamente riconosciuta da The Mathworks.
L'interfaccia si presenta sotto forma di un file jar chiamato jmi.jar
distribuito con MATLAB.
Ciò che è all’interno di questo canale di comunicazione dipende
esattamente da quale versione di MATLAB è installata. Tutto il codice è
all’interno del package com.mathworks.jmi , all’interno del quale ci
sono un certo numero di subpackage.
Uso del matlabcontrol di JMI
Il Matlabcontrol fa uso di solo due classi, ed un totale di soli tre metodi.
In com.mathworks.jmi.NativeMatlab
viene utilizzato un metodo
per determinare se il codice è attualmente in esecuzione sull’istanza
principale di MATLAB:
public static boolean nativeIsMatlabThread()
All’interno
di
com.mathworks.jmi.Matlab
Java
permette
di
comunicare con MATLAB. Tutta la comunicazione è fatta con:
public
static
Object
mtFevalConsoleOutput(String,
Object[], int) throws Exception
Se la richiesta in arrivo per l’interazione con MATLAB non è in
esecuzione sul thread principale di MATLAB, allora può essere immesso
sull’istanza con l'uso di:
public static void whenMatlabIdle(Runnable)
In questo modo abbiamo tutti gli strumenti utili per poter lanciare
l’algoritmo di classificazione e definire la patologia in merito a quanto
abbiamo selezionato come input.
L’algoritmo di classificazione in JAVA
L’algoritmo di classificazione viene riportato all’interno di Java con le
librerie opportunamente descritte, e successivamente viene aperta una
nuova istanza in matlab che permette l’esecuzione dello stesso:
proxy.eval("nR="+scan.getNumValMed()+";");
…
("nP="+scan.getNumeroPicchi()+";");
…
proxy.eval(scan.getValoreMed());
…
proxy.eval(scan.getMatrixPicchi());
…
proxy.eval(scan.getXYZRoi());
…
proxy.eval("addpath
"+conf.PathPosizioneJar()+"/Algoritmo/");
("malattia=fase_tre(nR,nP,V,P,R)");
Figura 12
Quanto viene rappresentato in figura 6 è una piccola parte del codice che
invoca l’algoritmo di classificazione dopo aver eseguito tutti gli step,
dalla lettura del file,alla clusterizzazzione dei dati all’interno
dell’arraylist, all’invocazione dei threads per le istanze di Matlab fino al
passaggio definitivo dei parametri all’interno dell’algoritmo. Il risultato
con la distinzione della patologia in riferimento al nostro dato di ingresso
è il seguente:
Figura 13 Classificazione della patologia