• Non ci sono risultati.

Multiscale Shape e Detail Enhancement

1.2 Organizzazione della tesi

2.2.4 Multiscale Shape e Detail Enhancement

Proposto nel 2007, il Multiscale Shape e Detail Enhancement `e una tecnica di elaborazione delle immagini per esaltare la forma e i dettagli di un’immagine basata sull’incremento locale del contrasto. I dati di input sono costituiti da un set di fotografie di un oggetto acquisite da un punto di vista fisso ma con differenti condizioni di illuminazione. Per ogni immagine di input si cal- cola una decomposizione multi-livello basata su un filtro bilaterale, per poi

costruire l’immagine finale combinando le informazioni di dettaglio ottenute da tutte le immagini ad ogni livello di decomposizione. A differenza delle tecniche re-illuminazione come le PTM, questo approccio non richiede infor- mazioni aggiuntive riguardanti la posizione della luce o la calibratura della fotocamera. L’approccio `e simile all’Exaggerated Shading ma non richiede nessuna informazione sulla geometria della scena.

La tecnica si compone di due passi: analisi e sintesi. Nel passo di analisi si calcola la decomposizione multi-livello e nel passo di sintesi si combinano le informazioni di dettaglio per generare l’immagine finale. Diversi test hanno dimostrato che si possono ottenere risultati ottimi anche con poche immagini di input. Per esempio 3-5 immagini sono gi`a sufficienti per ottenere buoni risultati.

L’algoritmo lavora su immagini con un singolo canale I = log Y , dove Y `e il canale di luminanza nello spazio di colori YUV. Una volta applicato l’algoritmo si eseguono le operazioni inverse per creare l’immagine a colori.

La decomposizione multi-livello del passo di analisi si basa su un filtro bilaterale che preservi i bordi. Questi filtri sono usati spesso per decomporre un’immagine in un livello base, che elimina le piccole variazioni di intensit`a e conserva i bordi pi`u marcati, e un livello di dettaglio ottenuto come differenza tra l’originale e il livello base.

In particolare per ogni immagine I si costruisce una serie di immagini filtrate Ij per j = 0 . . . b in maniera iterativa partendo da I0 = I:

Ipj+1 = f (Ij, p, σs,j, σr,j) (2.20)

dove f `e una funzione che per ogni pixel p restituisce il risultato della convo- luzione, in un intorno Ω di p, con due filtri gaussiani di varianza σs,j e σr,j, che prendono come input rispettivamente la distanza di un pixel dell’intor- no da p e la differenza tra il valore di un pixel dell’intorno e il pixel p. La varianza σs,j serve a incrementare lo smoothing, raddoppiando la larghezza

2.3 JPEG2000 34

dello spazio gaussiano ad ogni livello con una legge del tipo:

σs,0 = σs

σs,1= √

3σs,0 (2.21)

σs,j = 2j−1σj−1 ∀j > 1

mentre la varianza σr,j permette di preservare i contorni pi`u marcati assu- mendo una legge del tipo:

σr,j = σr/2j (2.22)

Un passo di analisi pi`u veloce si pu`o ottenere utilizzando un primo filtro gaussiano pi`u sparso.

A questo punto `e possibile calcolare un insieme di immagini di dettaglio come differenza tra immagini filtrate a due livelli successivi:

Dj = Ij− Ij+1 (2.23)

Il passo di sintesi genera l’immagine finale come:

IResult = IDetail+ βIBase 0 < β ≤ 1 (2.24)

dove IDetail massimizza le piccole variazioni di luminanza ed `e calcolata come media pesata delle immagini di dettaglio Dj di tutte le immagini di input, e IBase combina le informazioni di shading di tutte le immagini di input filtrate a livello pi`u alto, ovvero quello con minor livello di dettaglio. Il parametro β `e utilizzato per bilanciare enfasi dell’immagine di dettaglio con l’immagine base.

I risultati ottenuti dall’applicazione del Multiscale Shape e Detail Enhan- cement si possono valutare in Figura 2.13.

2.3

JPEG2000

Il JPEG2000[fS04] `e una tecnica di compressione di immagini basata sulla trasformata DWT (Discrete Wavelet Transform), creata nel 2000 per rim-

Figura 2.13: Multiscale Shape e Detail Enhancement: un dettaglio nelle 5 immagini di input (sinistra); un immagine di input (centro); risultato finale (destra). (Immagine tratta da [FAR07])

piazzare lo standard JPEG basato sulla trasformata DCT (Discrete Cosine Transform). Mentre nella DCT si scompone l’immagine in componenti ar- moniche (in pratica una analisi in frequenza) e blocco per blocco, nella DWT si scompone l’intera immagine in sottobande a cascata. Adottando questo approccio ed estendendo l’analisi a tutta l’immagine, si elimina una delle principali limitazioni del JPEG: l’eccessiva tassellizzazione che si manifesta al crescere del fattore di compressione.

Le caratteristiche principali del JPEG2000 sono:

• Supporto per differenti spazi di colore; • Supporto per compressione lossless e lossy;

• Fattore di compressione alto e buona qualit`a a bassi bit rate; • Scalabilit`a per risoluzione e per qualit`a;

2.3 JPEG2000 36

• Supporto per regioni di interesse (ROI), che permette di definire aree dell’immagine che saranno codificate con qualit`a pi`u alta rispetto al resto dell’immagine;

• Formato di file flessibile con supporto ai metadati.

L’algoritmo si compone di diverse fasi. Si comincia con la trasformazione dell’immagine dallo spazio RGB ad uno spazio di colori pi`u adatto. Poich´e la trasformata DWT `e eseguita su ogni componente di colore in maniera indipendente rispetto alle altre, `e necessario che le componenti siano ragio- nevolmente decorrelate l’una rispetto all’altra. La rappresentazione RGB non gode di questa propriet`a, dunque si preferisce utilizzare la rappresen- tazione dell’immagine in uno spazio di coordinate luminanza-crominanza, che assicura una sufficiente decorrelazione tra le tre componenti di colore dell’immagine. Le possibili scelte sono due:

• Irreversible Color Transform (ICT) che usa lo spazio di colori Y CbCr e causa degli errori di arrotondamento;

• Reversible Color Transform (RCT) che usa una versione modificata dello spazio di colori Y U V e non introduce errori di quantizzazione in modo da essere pienamente reversibile.

Dopo la trasformazione di colore, l’immagine `e suddivisa in regioni ret- tangolari, tiles, che sono trasformate e codificate separatamente. Le tiles possono avere qualsiasi dimensione ed `e possibile considerare l’intera imma- gine come un unica tile. Una volta scelta la dimensione, tutte le tiles avranno quella dimensione.

Ognuna di queste tiles subisce la trasformazione wavelet. JPEG2000 usa due differenti versioni di trasformazioni wavelet:

• irreversible, che introduce un rumore di quantizzazione che dipende dalla precisione del decoder;

• reversible, che utilizza coefficienti interi ed `e usata nella compressione lossless.

Dopo la trasformazione wavelet, i coefficienti vengono quantizzati per ridurre il numero di bit necessari a rappresentarli, al costo di una perdita di qualit`a. Il risultato `e un insieme di numeri interi che devono essere codificati bit a bit. Il parametro che pu`o essere modificato per settare la qualit`a finale dell’immagine corrisponde al passo di quantizzazione: pi`u grande `e il passo, maggiore `e la compressione e minore `e la qualit`a.

I coefficienti quantizzati sono raggruppati in pi`u code-blocks, ognuno dei quali viene codificati per mezzo di un processo chiamato EBCOT (Embed- ded Block Coding with Optimal Truncation), che si occupa di riscrivere i dati in input, in maniera tale da eliminare le ridondanze dovute alla rappre- sentazione dei coefficienti wavelet, e riordinare l’output, trasmettendo prima l’informazione pi`u importante.

EBCOT `e composto da due blocchi logici distinti, detti tier. Il tier 1 riceve in input un code-block e lo codifica utilizzando un modello di proba- bilit`a adattativo, basato su un codificatore aritmetico. Ogni blocco genera codewords (sequenze di dati compressi indipendenti), che sono raggruppate in livelli di qualit`a progressivi, detti layers. Per costruire i layers, le codewords sono suddivise in pezzi, detti chunks. Il tier 2 raccoglie queste informazioni e dispone i chunks di tutti i blocchi nei layers in base al valore dell’infor- mazione che contengono. Infine, l’informazione codificata `e raggruppata in una collezione di pacchetti, ciascuno contenente i dati codificati per un certa sottobanda (scalabilit`a per risoluzione) e per un certo layer (scalabilit`a per qualit`a).

Questa struttura `e stata progettata con l’obiettivo di ottenere un bit- stream che fosse scalabile per qualit`a e risoluzione e, nello stesso tempo, possedesse un certo grado di scalabilit`a spaziale. La scalabilit`a per risoluzio-

2.3 JPEG2000 38

ne `e ottenuta mediante la decomposizione wavelet. La scalabilit`a spaziale `e assicurata dall’esecuzione dell’operazioni di codifica, in maniera indipenden- te, su blocchi sufficientemente piccoli. L’organizzazione a layers progressivi, infine, garantisce la scalabilit`a per qualit`a.

Il JPEG2000 guadagna circa il 20-30% in termini di compressione rispet- to allo standard JPEG. Questo lo rende utile per applicazioni che utilizzino immagini di grandi dimensioni e che presentano un basso contrasto sui con- torni, come ad esempio le immagini mediche. Lo svantaggio principale `e rappresentato dall’elevata complessit`a computazionale.

RtiViewer

La funzionalit`a principale del sistema RtiViewer `e la visualizzazione di PTM sotto differenti e innovative condizioni di rendering, determinate dalle condi- zioni di illuminazione e dalla tecnica di shading enhancement utilizzata. Rti- Viewer `e il sistema che dovr`a sostituire il precedente tool di visualizzazione per PTM, sviluppato in Java presso i laboratori della HP, migliorandone pre- stazioni, grazie ad uno sviluppo basato sul C++ e su OpenGL, funzionalit`a, grazie alle innovative tecniche di enhancement proposte ed implementate, ed estendibilit`a, grazie ad una architettura basata su plugin che permet- te in maniera molto semplice l’implementazione di tecniche di enhancement aggiuntive ed il supporto di different formati di PTM.

RtiViewer `e stato sviluppato in C++ usando esclusivamente librerie open- source, tra cui la VCGlib del Visual Computing Lab di Pisa, il framework Qt della Trolltech e la libreria OpenJpeg del Communications and Remote Sensing Lab del Universit´e Catholique de Louvain. Per garantire un maggio- re diffusione e utilizzo `e stato adottato un sviluppo multi-piattaforma che ne consente l’esecuzione in ambiente Mac, Windows e Linux. Inoltre il sistema supporta il caricamento di immagini dal disco locale, o via HTTP da un server remoto, in modo completamente trasparente all’utente.

Nel seguente capitolo sar`a analizzata l’architettura di massima del soft- ware. In particolare, dopo una breve descrizione del modello di architettura

3.1 Librerie utilizzate 40

adottato e delle librerie utilizzate, sar`a analizzata l’interfaccia grafica, illu- strando le principali caratteristiche e funzionalit`a. Sar`a inoltre analizzata la modalit`a di visualizzazione per immagini pubblicate su un server remoto e il tool realizzato per predisporre le PTM per questo tipo di visualizzazione. Infine saranno presentati alcuni dettagli implementativi, ponendo particolare attenzione sugli aspetti dell’architetture che garantiscono al software l’esten- dibilit`a sia a nuovi formati di immagini RTI che a nuove tecniche di shading enhancement.

3.1

Librerie utilizzate

Qt: Qt `e un framework sviluppato dalla Trolltech che permette di semplifi- care notevolmente lo sviluppo in C++ di applicazioni multi-piattaforma. `E completamente object-oriented, facilmente estendibile e consente la program- mazione a componenti. Nato come prodotto commerciale nel 1996, a partire dalla versione 4.0 `e stata messa a disposizione una versione open source con un numero di funzionalit`a ridotte utilizzabile per sistemi Windows, Linux e Mac.

All’interno di RtiViewer, il framework Qt viene utilizzato per lo svilup- po dell’interfaccia grafica e non solo, in quanto mette a disposizione diversi moduli che implementano funzionalit`a aggiuntive in modo completamente indipendente dalla piattaforma, come la lettura e la scrittura di documen- ti XML, la gestione delle comunicazioni di rete via HTTP, la gestione di comandi OpenGL all’interno dell’applicazione. Inoltre mette a disposizione una API semplice per la realizzazione di applicazioni multi-thread.

La caratteristica che lo rende particolarmente utile nella realizzazione dell’interfaccia grafica `e il meccanismo denominato signals-slots. In generale, nello sviluppo di un’interfaccia grafica si vuole che oggetti di ogni genere siano in grado di comunicare con altri oggetti. Il meccanismo messo a disposizione

dai toolkit pi`u vecchi `e quello delle callback. Una callback `e un puntatore ad una funzione, che viene passato come argomento alla funzione da eseguire per consentire la notifica di qualche evento. Questo meccanismo presenta due difetti: primo, non `e type-safe, in quanto non si pu`o essere sicuri che la callback venga chiamata con parametri corretti; secondo, la callback `e strettamente accoppiata con la funzione da eseguire, che deve conoscere quale callback chiamare.

In Qt, l’alternativa alle callback `e data appunto del meccanismo dei segna- li e degli slot. Un signal viene emesso quando occorre un particolare evento. Uno slot `e un metodo chiamato in risposta ad un particolare signal. Questo meccanismo `e type-safe perch´e la firma di un signal deve corrispondere con la firma dello slot che lo riceve, quindi il compilatore pu`o controllare i tipi dei parametri. Eccezionalmente, se un signal presenta pi`u parametri dello slot con cui `e connesso, i parametri in eccedenza vengono ignorati. Inoltre signals e slots sono accoppiati in modo lasco: una classe che emette un signal non conosce n´e si preoccupa dello slot che lo ricever`a. L’interno meccanismo garantisce che se un signal `e connesso ad uno slot, allora lo slot sar`a invocato con gli stessi parametri del signal. A sua volta lo slot pu`o essere utilizzato come un normale metodo. Esattamente come un oggetto non sa se qualcuno ricever`a il suo signal, uno slot non sa se qualche signal `e collegato a lui. Tutto questo assicura la creazione di componenti completamente indipendenti.

OpenGL: La libreria usata per il rendering 3D `e OpenGL nella versione 2.1. L’utilizzo all’interno del software `e limitato al rendering dell’immagi- ne come texture. In particolare a partire dalla versione 2.0, OpenGL offre la possibilit`a di utilizzare texture rettangolari e non solo quadrate. Inol- tre a partire dalla stessa versione supporta un linguaggio di shading chia- mato GLSL (OpenGL Shading Language), molto simile al C, che permette di programmare intere parti della pipeline grafica con l’utilizzo di pixel e

3.2 L’architettura di RtiViewer 42

vertex-shader.

VCG: La libreria VCG del Visual Computing Lab del ISTI-CNR di Pi- sa mette a disposizione tutto il necessario per la visualizzazione di ambienti virtuali tridimensionali. La libreria fornisce soprattutto strutture dati e fun- zioni a basso livello per la gestione dei dati di oggetti 3D. Il suo utilizzo `e limitato alla gestione di vettori e punti dello spazio e nel piano.

OpenJpeg: La libreria, scritta in C, mette a disposizione un codec per immagini JPEG2000. Oltre al codec base, offre una serie di funzionalit`a avanzate, come il supporto al formato MJ2 (Motion JPEG 2000), o un tool di indicizzazione utile per il protocollo JPIP. Il suo utilizzo all’interno del software riguarda la compressione delle immagini accessibili su un server remoto, in modo da ridurre la quantit`a di dati scambiati via rete.

3.2

L’architettura di RtiViewer

L’architettura di RtiViewer si compone di quattro moduli:

• l’interfaccia grafica (Gui);

• il modulo per il caricamento dei dati da remoto (HttpThread); • il modulo per la gestione in memoria delle immagini (Rti);

• il modulo per la gestione delle diverse tecniche di shading enhancement (Enhancement).

Ognuno di essi espone un’interfaccia che viene utilizzata opportunamente dagli altri moduli.

Gui: L’interfaccia grafica `e composta da una serie di controlli che consen- tono all’utente finale di interagire in tempo reale e in maniera intuitiva con il software. Il paradigma utilizzato `e quello Model View Control che, insie- me alle funzionalit`a avanzate delle libreria Qt, ha portato allo sviluppo di controlli grafici indipendenti e riutilizzabili.

HttpThread: Il modulo si occupa del recupero di un immagine via HTTP. Il caricamento avviene in maniera completamente asincrona in un thread dif- ferente da quello principale dell’applicazione. Per il caricamento `e necessario che l’immagine venga predisposta per la visualizzazione remota tramite la suddivisione in diverse tiles a differente risoluzione.

Rti: Il modulo si occupa della gestione dell’immagine in memoria. In par- ticolare definisce una gerarchia di classi astratte che consente di estendere il modulo ad eventuali nuovi formati di immagini. Questa gerarchia definisce una serie di metodi che si occupano del caricamento dei dati dell’immagine da locale e da remoto e della generazione del risultato finale del rendering in base alla scelte effettuate dall’utente sull’interfaccia grafica. Alla base del- le gerarchia sono state implementate le classi per la gestione delle diverse tipologie di PTM.

Enhancement: Il modulo contiene tutte le classi che implementano le va- rie tecniche di shading enhancement messe a disposizione dell’utente. Ognu- na di queste classi implementa una classe astratta comune che ne permette l’utilizzo all’interno dell’architettura in maniera completamente trasparente. Questo garantisce l’estendibilit`a del modulo e dell’intero programma. Inol- tre ognuna espone dei metodi specifici per applicare la tecnica in fase di rendering.

3.3 Interfaccia grafica 44

3.3

Interfaccia grafica

L’aspetto cruciale di un programma interattivo `e l’interfaccia grafica. Avere un’interfaccia semplice e intuitiva consente all’utente di interagire velocemen- te con il software. In particolare l’interfaccia `e stata realizzata per consentire l’utilizzo da parte di utenti poco esperti e con conoscenze informatiche limita- te. In questo paragrafo verranno presentate le scelte effettuate per cercare di ottimizzare l’usabilit`a, mantenendo prestazioni accettabili anche su sistemi non modernissimi.

L’interfaccia di RtiViewer, come illustrato in Figura 3.1, si compone di due parti: il browser, che occupa la parte sinistra della finestra e consente di interagire direttamente sull’immagine, e una serie di strumenti di con- trollo nella parte destra, che consentono di impostare i diversi parametri di rendering.

L’idea di base di RtiViewer `e quella di fornire all’utente la possibilit`a di navigare l’immagine e settare i diversi parametri di rendering in tempo reale, visualizzando il risultato all’interno del browser.

In totale l’interfaccia si compone di cinque controlli, tra cui:

• Il browser ; • La toolbar ;

• Il light control, per settare interattivamente la posizione della luce; • Il rendering dialog, per la selezione della tecniche di shading enhance-

ment da applicare all’immagine;

Figura 3.1: RtiViewer per Windows con un particolare della PTM acquisita dalla tomba dell’arcivescovo Giovanni Scherlatti conservata presso il Museo dell’Opera Primaziale di Pisa.

Browser

La funzionalit`a principale del browser `e il rendering del’immagine. Il ciclo di rendering implementato prevede le seguenti fasi:

1. Recupero dei parametri di rendering, come la condizione di illumina- zione, la modalit`a di rendering richiesta, e la porzione di immagine visualizzata;

2. Calcolo della PTM con i parametri di rendering recuperati;

3. Generazione di un’immagine RGB a partire dai dati restituiti dal cal- colo della PTM;

3.3 Interfaccia grafica 46

5. Rendering della texture nel browser.

Tra le ulteriori funzionalit`a messe a disposizione ci sono lo zoom e la naviga- zione dell’immagine, la possibilit`a di variare localmente la posizione della luce e l’implementazione di alcune modalit`a di rendering avanzate particolarmente utili per utenti esperti e con conoscenze nell’ambito della grafica.

L’interazione avviene attraverso il mouse e la tastiera. Nello specifico il dragging con il tasto sinistro del mouse consente la navigazione, qualora l’immagine non sia gi`a interamente visualizzata nel browser, mentre lo zoom si ottiene o tramite la rotella del mouse o tramite le combinazioni classiche di tasti CTRL + ‘+’ (per l’operazione di zoom in) e CTRL + ‘-’ (per l’ope- razione di zoom out ). Il trascinamento con il tasto destro del mouse consente invece di modificare localmente la posizione della luce.

Ad ogni interazione di questo tipo vengono emessi dei segnali dal browser con lo scopo di mantenere coerenti le informazioni sull’immagine visualizzata e sulla posizione della luce in tutti i controlli che compongono l’interfaccia, in particolare nel navigator e nel light control. A questo scopo sono stati implementati degli slots che consentono di ricevere aggiornamenti su queste informazioni dall’esterno.

Con il doppio click `e possibile invece centrare il browser sul punto dell’im- magine in cui si trova il puntatore del mouse ed eseguire contemporaneamente lo zoom.

Le modalit`a di rendering avanzate sono diverse e riguardano aspetti tec- nici e specialistici come la visualizzazione della normal map associata ad una PTM, la visualizzazione della componente di illuminazione o RGB del formato LRGB-PTM, o la visualizzazione di informazioni parziali relative alla tecnica di shading enhancement scelta. La selezione avviene da tastiera tramite combinazioni di tasti.

Inoltre il browser garantisce l’interattivit`a durante l’utilizzo del mouse solo se il tempo necessario al calcolo del buffer dati da cui ricavare la texture risulta minore di un valore massimo di millisecondi. Se questa condizione non viene soddisfatta l’interattivit`a viene garantita solo al rilascio del tasto del mouse.

Toolbar

La toolbar mette a disposizione quattro pulsanti che consentono, partendo da sinistra in Figura 3.2:

• Il caricamento di un’immagine dal disco locale.

Documenti correlati