Applicazioni di Grafica 3D real-time altamente immersive” del progetto 
“Ambienti di Realtà Virtuale Altamente Immersivi”, e fornisce uno 
strumento informatico a supporto di una delle branche più importanti 
della medicina: la “diagnostica per immagini”.  
In particolare, è in fase d’avanzata realizzazione un’architettura 
software basata su tecnologie a componenti, altamente scalabile e 
performante per la realizzazione d’ambienti di realtà virtuale, in grado 
di connettere dispositivi eterogenei (HMD
1
, CAVE
2
, Data Glove
3
, etc) 
attraverso l’utilizzo d’interfacce semplici e portabili. Requisito essenziale 
della struttura modulare dell’architettura è l’utilizzo di librerie e 
strumenti open source e cross platform, che facilitano lo sviluppo 
d’ambienti di realtà virtuale immersiva. Ciò è necessario in quanto le 
applicazioni attualmente in commercio per la visualizzazione in grafica 
3D, costituiscono delle scatole nere il cui contenuto è noto solo alle case 
produttrici. Esistono inoltre una serie di prodotti open source, che 
offrono le medesime funzionalità, vincolate però all’utilizzo di uno 
specifico sistema operativo. Un esempio di tali applicazioni é OsiriX, 
[OSI] software d’image processing, sviluppato per piattaforme Apple 
Macintosh, di cui si riporta l’architettura software in figura 1.1. 
Alcune librerie utilizzate da tale software, quali QuickTime
4
e Cocoa
5
, 
                                                 
1
 Gli HMD sono caschi con schermi LCD o CRT per la visualizzazione di ambienti 
tridimensionali. 
2
 Il sistema CAVE (Cave Automatic Virtual Environment) fornisce l'illusione di una 
immersione completa in un mondo sintetico tridimensionale ed in scala reale, che si 
realizza proiettando immagini stereo sulle pareti ed il pavimento di un cubo all'interno 
del quale l'utente può muoversi liberamente, vivere una esperienza immersiva 
indossando semplicemente degli occhiali stereoscopici e interagire con gli oggetti 
mediante una wand provvista di sensori e pulsanti. 
3
 Il data GLOVE è un guanto utilizzato nei sistemi di realtà virtuale che indica ad un 
elaboratore i movimenti e la posizione delle dita dell'utilizzatore. 
4
 Quicktime è una tecnologia multimediale per sviluppare video, suono, animazione, 
grafica, testo e musica.[QUICK]  
5
 Cocoa è un ambiente di sviluppo object-oriented progettato per sviluppare 
applicazioni native MacOS X [COCOA] 
 
8 
  
costituiscono dei pacchetti commerciali ed, in particolare, Cocoa risulta 
essere fortemente legato alla piattaforma MacOS X. Sebbene, quindi, 
siano state utilizzate anche librerie open source e cross platform, come 
VTK ed ITK, definite qui di seguito, il software risulta essere vincolato 
alla suddetta piattaforma. 
 
                                            Figura 1: Architettura Osirix 
 
Scenari virtuali immersivi, interfacce tattili in grado di fornire 
sensazioni di forza all'operatore costituiscono solo alcune delle possibili 
tipologie tecnologiche utilizzate per offrire simulazioni sempre più 
vicine all'esperienza reale e caratterizzate da un alto grado 
d’immersività, che sempre più risponde alle necessità di formazione e 
training dell'attuale società dell'informazione. “In questo modo i medici 
potranno esplorare il corpo (e anche l’anima!) dei loro pazienti” [PUN]. 
Tuttavia, applicazioni di grafica 3D con un buon grado 
d’interattività ed immersività ancora richiedono sistemi altamente 
specializzati e spesso molto costosi, che necessitano di driver specifici, 
legando in tal modo lo sviluppo di una particolare applicazione ad un 
determinato hardware. Pertanto è attualmente molto sentita la necessità 
di poter disporre di un’architettura aperta e flessibile per lo sviluppo di 
software applicativo che consenta l'integrazione del più ampio range 
possibile di device e di componenti software, e che sia funzionale a 
settori di grande interesse, come quello dei beni culturali e museali, del 
training e della formazione, nonché della visualizzazione e della 
simulazione medica e scientifica.  
9 
  
I componenti dell'architettura software individuati per la 
realizzazione d’applicazioni di realtà virtuale altamente immersive, 
rispondono alle caratteristiche sopra individuate. 
Dopo un’attenta analisi e studio delle problematiche sopra esposte, 
l’architettura scelta per lo sviluppo di applicazioni di realtà virtuale 
altamente immersive è mostrata in Figura 2.  
 
 
Figura 2 Architettura software per lo sviluppo di applicazioni di realtà virtuale 
 
Di seguito è riportata una breve descrizione di ciascun componente 
software. 
OpenGL (Open Graphic Library): ambiente per lo sviluppo di 
applicazioni grafiche 2D e 3D
6
. La libreria di basso livello consente, 
inoltre, di sfruttare l’accelerazione hardware delle schede grafiche, 
che implementano funzionalità per il rendering
7
 real-time 3D e 
compatibili con tale standard; 
FLTK (Fast Light ToolKit): libreria di alto livello per la creazione 
                                                 
6
 Le OpenGL 3D consentono di realizzare applicazioni per la visualizzazione di una 
scena 3D. Quest'ultima contiene gli insiemi di dati che rappresentano gli oggetti 
tridimensionali e i dati relativi alle loro illuminazione e posizione rispetto 
all'osservatore [OPGL]. 
7
 Processo di generazione di un'immagine a partire da una descrizione di un insieme di 
oggetti tridimensionali (scena tridimensionale). La descrizione è data in un linguaggio o 
in una struttura dati definiti rigorosamente e deve contenere la geometria, il punto di 
vista, le informazioni sulla mappatura delle superfici visibili e sull’illuminazione. L' 
immagine è una immagine digitale; essa fornisce l'aspetto finale al modello o 
all'animazione illuminazione.
10 
  
dell'interfaccia grafica utente (GUI); 
VTK (Visualization ToolKit): libreria di alto livello per la visualizzazione 
grafica e l’image processing; 
ITK (Insight ToolKit): libreria di alto livello che implementa algoritmi di 
registrazione e segmentazione; 
OSG (Open Scene Graph): libreria di alto livello per applicazioni di 
grafica 3D ad alte prestazioni in quanto basato sulla struttura dati 
dei scene graph
8
; 
VRJ (ViRtual Juggler): framework per lo sviluppo di applicazioni 3D, 
orientato all’integrazione di device eterogenei; 
Chromium: Motore di rendering 3d distribuito, che consente di 
parallelizzare il processo di rendering. 
Il modello funzionale dell'architettura cui si fa riferimento è 
mostrato in Figura 3. 
 
 
 
 
 
 
 
                                                 
8
 Lo Scene Graph (grafi di scena) è una struttura dati che organizza logicamente la 
rappresentazione di una scena grafica. Una scena viene decomposta in oggetti, ogni 
oggetto in parti, ogni parte in poligoni. [OSG] 
11 
  
 
Figura 3: Modello funzionale dell'architettura di Figura 2 
 
I.1 I.3  Obiettivo e scopo della tesi 
L'architettura considerata per questo lavoro di tesi si concentra 
sulla visualizzazione, analisi ed elaborazione d’immagini medicali. Il 
software di base messo a disposizione sviluppa un'applicazione open 
source e cross platform per la visualizzazione e l'elaborazione 
d’immagini medicali in grado di fornire un ambiente per lo sviluppo di 
applicazioni per la visualizzazione medicale altamente immersiva. Tale 
architettura è mostrata in Figura 4.  
 
 
Figura 4: Architettura per applicazioni di Medical Imaging 
 
12 
  
Lo scopo di questa tesi è la progettazione ed implementazione di un 
componente software per la segmentazione di immagini mediche 
all’interno di questa architettura.  
La segmentazione è il processo che suddivide un'immagine nelle sue 
parti componenti, secondo parametri che sono stabiliti da chi la esegue, 
poi usate a scopo di analisi, descrizione e riconoscimento a più alto 
livello. 
Come si vedrà nel prossimo capitolo, più in generale la segmentazione è 
una delle fasi del processo di trattamento dei dati medicali 
dall’acquisizione alla visualizzazione finale. 
Il procedimento di segmentazione è molto importante per almeno due 
motivi. In primo luogo, permettendo di individuare regioni omogenee, 
consente di effettuare con estrema facilità delle misurazioni 
morfometriche altrimenti estremamente complesse; si pensi, ad esempio, 
alla possibilità di calcolare, con ragionevole precisione, il volume di una 
massa tumorale a partire da dati tridimensionali ed a quanto ciò possa 
essere d’ausilio alla pianificazione della terapia radiante o di un 
intervento chirurgico. In secondo luogo consente di classificare i dati a 
disposizione in maniera tale che siano più facilmente utilizzabili nel 
seguito.  
Visto che la segmentazione è un processo che si applica in qualsiasi 
campo che tratti immagini digitali,(astrologia, visione robotica, 
telerilevamento,ecc), le quali quindi hanno caratteristiche molto 
differenti,  in questo lavoro di tesi si sono analizzate le principali 
tecniche di segmentazione presenti in letteratura, se ne è cercata di fare 
una classificazione elencando pregi  e difetti, dopodichè si è giunti 
all’implementazione di tre algoritmi, che sono risultati i più consoni per 
le caratteristiche di immagini medicali, coniugando in sé le proprietà di 
efficienza(di calcolo), semplicità di utilizzo e di implementazione, 
accuratezza del risultato. 
13 
  
Un esempio di segmentazione è riportato in Figura 5, che mostra 
l’immagine originale di un cervello, e due regioni segmentate 
dell’immagine, rappresentanti rispettivamente la materia bianca e il 
ventricolo. 
 
 
Figura 5: Esempio di segmentazione su cervello 
   
I componenti utilizzati per lo sviluppo del software sono le librerie 
di alto livello, suddivise in librerie per la gestione dell'interfaccia grafica, 
librerie per la visualizzazione di immagini e modelli tridimensionali ed, 
infine, librerie per l'image processing. Alcune delle librerie open source e 
cross platform, oggi disponibili per la realizzazione dell'interfaccia 
grafica, comprendono wxWindows [WX], Fox-Toolkit [FOX], FLTK, ecc. 
Ognuno di questi pacchetti è corredato da una buona documentazione e 
sono tenuti in continuo sviluppo dai rispettivi gruppi. La scelta è caduta 
su FLTK, perché risulta essere molto semplice da utilizzare e allo stesso 
tempo completo. Per quanto riguarda, invece, le librerie di 
visualizzazione e d’image processing, la scelta è caduta immediatamente 
su VTK e ITK. Questi due componenti, infatti, sono ampiamente 
utilizzati nel settore del medical imaging e risultano essere uno standard 
de facto per tali applicazioni.  
I.4  ITK,VTK,FLTK 
III.1 I.4.1  Vantaggi dell'Open Source e del Cross Platform 
Con l'avvento dei personal computer, l'informatica si è diffusa in 
14 
  
un decennio fino a condizionare la vita quotidiana delle persone e delle 
loro attività professionali. Tale velocità di sviluppo tuttavia non le ha 
consentito di avere le stesse caratteristiche delle altre industrie 
produttive, avere cioè numerosi fornitori in concorrenza fra loro. Il 
software è oggi nella mani di pochi grandi gruppi, che impongono i loro 
standard proprietari e guidano l'evoluzione più in base ai loro interessi 
che alla convenienza degli utenti. 
Come alternativa a tutto ciò è nato il movimento “Open Source”, 
divenuto popolare soprattutto grazie alla diffusione di Internet, che è 
stato ed è tuttora uno dei motori propulsivi dello sviluppo del web. Gran 
parte dell'infrastruttura tecnologica di Internet è basata su standard 
aperti e software open source, rilasciato con licenze non restrittive sia 
nella distribuzione che nell'uso, come GPL
9
, LGPL
10
, ecc [RALF]. Il più 
delle volte è utilizzabile gratuitamente, ma la cosa ancor più 
entusiasmante, soprattutto per i programmatori, è il codice, che può 
essere studiato, analizzato, modificato, ampliato ed esteso. Viene 
sviluppato in progetti collaborativi, che spesso coinvolgono sviluppatori 
da tutto il mondo, provenienti dalle esperienze più diverse. In molti casi 
questo tipo di software risulta essere più affidabile, e funzionale 
dell'analogo software proprietario e commerciale. Quale sia la 
piattaforma verso la quale gli utenti si indirizzeranno nei prossimi anni è 
una questione aperta. Al giorno d'oggi, la maggior parte degli utenti 
possiede prodotti Microsoft; allo stesso tempo però c'è la tendenza, 
oramai irreversibile, a sfruttare le applicazioni multi-piattaforma Open 
Source, soprattutto per ragioni di costi. Questa tendenza porterà 
probabilmente ad accantonare l'idea di un sistema operativo 
                                                 
11
 GPL (General Public License) garantisce la libertà di condividere e modificare il 
software libero [GPL]. 
10
 LGPL (Lesser General Public License), una licenza pubblica meno generale e usata 
soprattutto per le librerie [LGPL].
 
15 
  
proprietario. Si può affermare quindi che il multi-piattaforma nasce 
come conseguenza dei software open source e che l'avvento di nuove 
piattaforme ha richiesto sempre più al software di essere multi-
piattaforma. 
III.2 I.4.2  Caratteristiche comuni di ITK e VTK 
ITK (Insight Toolkit) è un toolkit software che offre funzionalità di 
segmentazione e registrazione, VTK (The Visualization Toolkit) offre 
funzionalità prettamente orientate alla visualizzazione delle immagini e 
dei modelli tridimensionali. Entrambi sviluppati in C++, open source e 
cross platform, utilizzano processi di wrapping per generare l'interfaccia 
tra C++ ed altri linguaggi interpretati quali Tcl, Java e Python. I toolkit 
forniscono, quindi, un supporto alla programmazione di basso e alto 
livello.  
Nella programmazione ad alto livello si costruiscono l'interfaccia 
dell'applicazione e la pipeline. Quest'ultima è composta usando le classi 
di VTK e ITK come blocchi elementari; a questo scopo si può usare un 
linguaggio interpretato senza compromettere le prestazioni.  
Nella programmazione di basso livello Per soddisfare particolari 
esigenze le librerie possono essere estese inserendo nuove classi.  
I due toolkit, inoltre, presentano alcune caratteristiche funzionali in 
comune. Alcuni algoritmi di segmentazione, ad esempio, sono 
implementati in entrambi i software. Altri algoritmi per l'elaborazione 
delle immagini, quali la rotazione, il ridimensionamento, i filtri per lo 
smoothing, ecc. sono implementati in entrambi i pacchetti. Oltre ad offrire 
funzionalità comuni, essi presentano anche caratteristiche architetturali 
del tutto identiche. In particolare, la gestione del flusso dei dati, presenta 
un'architettura a pipeline di seguito descritta. Le pipeline supportano la 
16 
  
programmazione multithreading
11
 e consentono di lavorare in streaming
12
. 
Questa caratteristica consente di utilizzare al meglio, ovvero nel modo 
più efficiente, la memoria e le risorse dell'elaboratore. 
I.4.2.1  Architettura Pipeline 
Una pipeline è costituita da una serie di process objects che operano 
su uno o più data objects. Contrariamente all'uso comune nella 
programmazione object oriented, in VTK ed ITK si è scelto di separare i 
dati dalle procedure che li elaborano. I dati sono incapsulati nei data 
objects, le procedure nei process objects. I data objects costituiscono le 
informazioni di partenza, pertanto il loro trattamento è particolarmente 
delicato, in quanto può dar luogo ad eliminazione o aggiunta di 
informazioni e può essere solo effettuato mediante metodi formali
13
. 
Questo approccio è particolarmente importante nei sistemi in cui la 
riservatezza dei dati e la sicurezza sono determinanti e assicura che non 
siano introdotti errori nel processo di definizione delle specifiche, in 
quello di sviluppo, nel controllo dei risultati e nella progettazione dei 
benchmark. I dati differiscono in funzione della loro rappresentazione 
interna, che è influenzata dai metodi mediante i quali sono raccolti, 
memorizzati ed elaborati, e dai processi che interagiscono con gli stessi. I 
dati di partenza, pertanto, possono essere impiegati per ottenere 
rappresentazioni diverse o di diversa efficacia rappresentativa. 
I process objects si dividono in source, filter e sink objects in base alla 
presenza di uno o più input od output, come illustrato in Figura 8 
[SCKR]. 
 
                                                 
11
 Il multithreading è una tecnica che permette di avere più flussi di esecuzione 
contemporanei (thread) di uno stesso programma in esecuzione, su CPU differenti o 
sulla stessa. 
12
 Lo streaming consente di suddividere, in modo trasparente, i dati in parti più piccole, 
che una volta elaborate, possono essere riassemblate per ottenere il risultato finale. 
13
 Tecniche basate sulla definizione matematica di specifiche, sviluppo e verifica di 
sistemi.  
17 
  
 
Figura 6: Tipi di Process Object nella pipeline di ITK E VTK 
 
I source objects sono oggetti che producono un data object 
leggendolo da un file (reader) oppure costruendolo mediante una 
procedura (procedural source). Gli oggetti di tipo filter possono avere 
più input e produrre più output, un singolo output può essere usato 
come input da più filtri (multiple fan out). I sink objects esportano data 
objects su di un file (writer) oppure verso il mapper che consente di 
esportare i dati verso altri sistemi. In Figura 12 sono illustrate alcuni 
esempi di molteplicità degli oggetti filter. 
 
 
Figura 7: Molteplicità degli ingressi e delle uscite delle pipeline di ITK e VTK 
La connessione tra due process object avviene di solito tramite 
l'istruzione: 
Filtro2->SetInput(Filtro1->GetOutput()); 
Per filtri con più entrate o uscite esistono forme di sintassi analoghe. Le 
connessioni sono tipizzate, si possono agganciare solo process object che si 
scambiano un data object di tipo compatibile. Affinchè la pipeline 
produca il risultato atteso occorre che tutti i process objects siano mandati 
in esecuzione, l'intero processo è chiamato “esecuzione della pipeline”. 
18