# Elastix

Elastix è un toolbox per la registrazione di immagini basato sul software Insight Segmentation and Registration Toolkit (ITK). È interamente open-source e offre una vasta gamma di algoritmi impiegati nella registrazione di immagini. I suoi componenti sono pensati per essere modulari per facilitare una creazione rapida e affidabile di varie pipeline di registrazione ad hoc per specifiche applicazioni. Inizialmente è stato sviluppato da Stefan Klein e Marius Staring sotto la supervisione di Josien PW Pluim presso Image Sciences Institute (ISI). La sua prima versione permetteva solo l'utilizzo da linea di comando, consentendo all'utente finale di utilizzare script per l'elaborazione automatica di grandi quantità di dati e sviluppare più pipeline di registrazione con poche linee di codice. Oggi, per ampliare ulteriormente il suo bacino di utenze, è disponibile anche SimpleElastix, sviluppato da Kasper Marstal, che consente l'integrazione di elastix con linguaggi di alto livello, come Python, Java e R.

## Fondamenti della registrazione di immagini

La registrazione di immagini è una tecnica ben nota nell'elaborazione digitale delle immagini che ha lo scopo di identificare la trasformazione geometrica che, applicata a un'immagine, permette di riallinearla con una seconda immagine utilizzata come riferimento. In generale, le immagini da registrare sono acquisite con sensori differenti (multimodali), in istanti di tempo differenti (multitemporali) e da diversi punti di vista (multiviste), questo richiede che queste immagini vengano correttamente allineate per poter procedere con ulteriori analisi e con l'estrazione di caratteristiche rilevanti. Anche se sono presenti diversi approcci al problema della registrazione di immagini, la maggior parte degli approcci è composta dagli stessi blocchi base, vale a dire la trasformazione, l'interpolatore, la metrica e l'ottimizzatore. La registrazione di due o più immagini può essere vista come un problema di ottimizzazione che richiede più iterazioni per convergere alla soluzione ottimale. Infatti, a partire da una trasformazione iniziale calcolata utilizzando i momenti dell'immagine, il processo di ottimizzazione ricerca i parametri di trasformazione più appropriati in base al valore della metrica di similarità considerata. La figura mostra la rappresentazione ad alto livello del processo di registrazione di due immagini, in cui l'immagine di riferimento rimane fissa durante l'intero processo, mentre quella che deve essere registrata viene trasformata in base ai parametri di trasformazione calcolati. In altre parole, la registrazione termina quando la metrica di similarità, che è una funzione matematica con un certo numero di parametri da ottimizzare, raggiunge il valore ottimale che però è fortemente dipendente dall'applicazione.

## Principali blocchi base

Seguendo la struttura a blocchi degli algoritmi di registrazione di immagini, elastix propone una soluzione modulare che propone, per ciascuno dei blocchi, algoritmi ben noti nella registrazione di immagini. Inoltre aiuta gli utenti a sviluppare la propria pipeline di registrazione selezionando per ciascun blocco l'algoritmo più adatto. Ogni blocco è facilmente configurabile grazie alla possibilità di selezionare i valori suggeriti sia provando più combinazioni di parametri e quindi scegliendo il più adatto. Considerando che la registrazione viene eseguita su immagini, elastix supporta tutti i formati di dati già supportati da ITK, che vanno da JPEG e PNG a formati standard nel campo medico come DICOM e NIFTI. Inoltre, se fornito nei metadati, memorizza inoltre la distanza fisica dei pixel, l'origine e la posizione relativa dell'immagine rispetto a un sistema di riferimento esterno da utilizzare per facilitare il processo di registrazione, in particolare nelle applicazioni in ambito medico.

### Trasformazione

La scelta della trasformazione è un punto cruciale considerando che definisce quali sono le trasformazioni consentite. Nella registrazione di immagini, la distinzione principale può essere fatta tra trasformazioni che mantengono il parallelismo tra rette e trasformazioni che consentono di mappare linee parallele in linee non parallele (deformabili). In elastix, gli utenti possono sia selezionare una trasformazione che comporre più trasformazioni o come addizione o come composizione. Di seguito vengono riportati i diversi modelli di trasformazione in ordine di crescente flessibilità e il nome della classe elastix corrispondente tra parentesi.
* Traslazione (TranslationTransform) permette solo le traslazioni
* Rigida (EulerTransform) espande la traslazione aggiungendo rotazioni e l'oggetto viene trattato come un corpo rigido
* Similitudine (SimilarityTransform) espande la rigida introducendo il deformazione isotropa
* Affine (AffineTransform) espande la rigida permettendo sia il ridimensionamento che la deformazione di taglio
* B-splines (BSplineTransform) è una trasformazione deformabile solitamente preceduta da una rigida o affine
* Spline a piastra sottile (SplineKernelTransform) è una trasformazione deformabile appartenente alle trasformazioni basate su kernel ed è una composizione di una affine e una parte non rigida

### Metrica

La metrica di similarità è la funzione matematica i cui parametri devono essere ottimizzati per poter registrare correttamente le immagini e, durante il processo, viene calcolata più volte. Di seguito sono riportate le metriche disponibili calcolate utilizzando sia l'immagine di riferimento che le immagini trasformate e il nome della classe elastix corrispondente tra parentesi.
* Differenza quadratica media (AdvancedMeanSquares) da utilizzare per applicazioni mono-modali
* Coefficiente di correlazione normalizzato (AdvancedNormalizedCorrelation) da utilizzare per le immagini che hanno una relazione lineare tra le intensità
* Mutua informazione (AdvancedMattesMutualInforma) da utilizzare per applicazioni sia mono che multi-modali, inoltre utilizza ottimizzazioni per raggiungere prestazioni migliori rispetto alla versione normalizzata
* Mutua informazione normalizzate (NormalizedMutualInforma) per applicazioni sia mono che multi-modali
* Statistica Kappa (AdvancedKappaStatistic) da utilizzare solo per immagini binarie

### Campionatore

Per il calcolo delle metriche di similarità, non è sempre necessario considerare tutti i voxel e, a volte, può essere utile utilizzarne solo una frazione per ridurre i tempi di esecuzione per immagini di grandi dimensioni. Di seguito sono riportati i criteri disponibili per la selezione di una frazione dei voxel e il nome della classe elastix corrispondente tra parentesi.
* Totale (Full) per impiegare tutti i voxel
* Griglia (Grid) utilizza una griglia regolare definita dall'utente per sottocampionare l'immagine
* Casuale (Casuale) seleziona casualmente una percentuale di voxel scelta dall'utente, tutti i voxel hanno la stessa probabilità di essere selezionati
* Coordinate casuali (RandomCoordinate) simile a quella casuale, ma in questo caso è possibile selezionare anche posizioni tra voxel, viene usato per semplificare il processo di ottimizzazione

### Interpolatore

Dopo l'applicazione della trasformazione, può accadere che i voxel utilizzati per il calcolo della metrica di similarità non siano più allineati con la griglia, pertanto è necessario eseguire l'interpolazione per garantire la correttezza della procedura. Di seguito sono riportati gli interpolatori implementati e il nome della classe elastix corrispondente tra parentesi.
* Nearest neighbor (NearestNeighborInterpolator) da utilizzare per utilizzare poche risorse computazionali, ma fornisce risultati di bassa qualità
* Lineare (LinearInterpolator) in generale è sufficiente per ottenere risultati accettabili
* N-esimo ordine di B-spline (BSplineInterpolator) N=0 e N=1 sono rispettivamente il Nearest neighbor e il lineare. Aumentando l'ordine N aumentano la qualità e il tempo di calcolo

### Ottimizzatore

L'ottimizzatore definisce la strategia utilizzata per la ricerca dei parametri di trasformazione per raggiungere una corretta registrazione ed è generalmente sfrutta un processo iterativo. Di seguito sono riportate alcune delle strategie di ottimizzazione implementate.
* Gradiente discendente
* Robbins-Monro simile al gradiente discendente ma approssima le derivate della funzione di costo
Sono inoltre disponibili altri ottimizzatori, come Quasi-Newton o strategie evolutive.

### Altre caratteristiche

Elastix offre anche altre funzionalità che permettono di velocizzare la procedura di registrazione e per fornire agli utenti algoritmi più avanzati. Alcuni esempi sono l'introduzione della sfocatura e della piramide gaussiana per ridurre la quantità di dati utilizzati e la possibilità di implementare analisi multi-immagine e multi-metrica per gestire applicazioni più complesse.

## Applicazioni

Elastix viene principalmente utilizzato in campo medico, in cui la registrazione delle immagini è fondamentale per ottenere informazioni complete sulla regione anatomica analizzata. È ampiamente impiegato nella chirurgia assistita da immagini, nel monitoraggio dei tumori e nella valutazione dell'andamento terapico.
Ad esempio, nella pianificazione della radioterapia, la registrazione delle immagini consente sia di fornire correttamente il trattamento sia di valutare i risultati ottenuti. L'utilizzo del software elastix, grazie all'ampia gamma di algoritmi implementati, consente a medici e ricercatori di testare diverse pipeline di registrazione, da quelle più semplici a quelle più complesse, e di salvare la migliore combinazione su un file di configurazione. L'utilizzo di questo file e il fatto che il software sia completamente open-source consente la facile riproduzione del lavoro di ricerca, che può aiutare a supportare il paradigma di open science e un rapido riutilizzo di una stessa configurazione su dati di diversi pazienti.
Nella chirurgia assistita da immagini, i tempi di registrazione e l'accuratezza sono un elemento di criticità poiché, durante la registrazione, il paziente rimane sul tavolo operatorio e le immagini da registrare hanno generalmente una risoluzione inferiore rispetto a quelle di riferimento. In questo campo, la possibilità di integrare elastix con linguaggi di alto livello, come OpenCL, permette di considerare l'utilizzo di GPU e altri acceleratori hardware.