You are on page 1of 8

Augmented Reality: augmented cover of a book.

Fantoni Maria Elena, Furieri Luca


February 2, 2015

Obiettivo del seguente progetto di realt aumentata quello di sovrapporre a un video, nel
quale viene costantemente inquadrato un libro, un layer su cui sono presenti un logo ed un
terzo autore da aggiungere alla copertina: il video aumentato dovr essere tale da rendere
realistica tale sovrapposizione.
Partendo dai suggerimenti proposti, utile osservare come sussista una relazione di identit
fra il layer fornito ed il primo frame del video di input. Poich la telecamera compie delle rototraslazioni durante il video, la posizione del libro nellinquadratura cambia ad ogni frame,
ed necessario quindi definire un algoritmo in grado di parametrizzare tale variazione e di
applicarla al layer cos che risulti orientato esattamente come il libro.
Un secondo problema poi rappresentato dai cambi di luminosit che avvengono nella scena
tra i successivi frame del video (lenti in un primo momento, salto repentino verso il finale del
video). Questo comporta infatti sensibili variazioni al colore del libro reale, e risulta quindi
necessario ai fini del realismo del video aumentato inseguire al meglio tali cambiamenti cromatici anche nel layer di realt aumentata.
Il progetto pu quindi essere separato nei due sottoproblemi appena descritti; nel presente
documento si procede trattandoli separatamente.

1 L A SOVRAPPOSIZIONE
Analizzando due diversi frame del video di input, dal momento che la telecamera compie
delle roto-traslazioni, possibile trovare la trasformazione geometrica che lega le due scene.
Lidea quella di applicare al layer di realt aumentata tale trasformazione in modo da sovrapporlo correttamente alla copertina del libro. Partendo dal fatto che la relazione che lega la

copertina del libro al layer aumentato nel primo frame del video lidentit, possiamo individuare due modi principali di procedere:
Frame-to-Reference (F2R): per ogni frame si calcola lomografia che lo lega al frame
iniziale del video, la quale viene poi semplicemente applicata al layer aumentato per
sovrapporlo alla copertina. Le variazioni tra le due scene possono per essere anche
molto elevate, rendendo difficoltoso in alcuni casi il calcolo dellomografia.
Frame-to-Frame (F2F): le due scene confrontate sono sempre due frame consecutivi.
In questo modo le variazioni nella posizione del libro risultano contenute, agevolando
cos il calcolo dellomografia. Tuttavia, si verifica un fenomeno di accumulo di errore
rendendo nel tempo lomografia calcolata sempre pi inesatta.
Tratteremo in seguito pi nel dettaglio il problema dellimplementazione software di questi
approcci; proporremo anche un approccio ibrido F2R-F2F, in grado di mitigare gli effetti indesiderati di entrambi.

1.1 I L CALCOLO DELL OMOGRAFIA : L OCAL I NVARIANT F EATURES


E necessario estrarre informazioni semantiche di alto livello relativamente a ciascun frame,
in modo da identificarne la relazione reciproca e quindi lomografia che li lega. Esistono
diversi metodi per determinare tale tipo di relazione: il pi utilizzato nellambito della Augmented Reality (markerless) basato sulla descrizione dellimmagine tramite caratteristiche
locali invarianti (rispetto alle trasformazioni che subisce la scena) e sulla disposizione di
queste ultime, per poi effettuare il matching con il modello di riferimento (nel nostro caso, il
primo frame oppure il frame precedente). La descrizione teorica dei necessari algoritmi (feature detectors, descriptors, matchers) esula dagli scopi di questa trattazione: porremo il focus
solamente sullimplementazione in OpenCv.
la funzione

void cvGoodFeaturesToTrack( const CvArr* image, CvArr* eig_image,


CvArr* temp_image, CvPoint2D32f* corners, int* corner_count,
double quality_level, double min_distance,const CvArr* mask=NULL,
int block_size=3, int use_harris=0, double k=0.04 );
stata utilizzata per estrarre i migliori feature points (impostabile con algoritmo Harris Corner Detector oppure Lukas Kanade Tomasi), mentre la funzione

void cvCalcOpticalFlowPyrLK( const CvArr* prev, const CvArr* curr,


CvArr* prev_pyr, CvArr* curr_pyr, const CvPoint2D32f* prev_features,
CvPoint2D32f* curr_features, int count, CvSize win_size, int level,
char* status, float* track_error, CvTermCriteria criteria, int flags );
stata utilizzata per trovare le corrispondenze tra i feature points nelle coppie di immagini. Trovate le corrispondenze, lo step successivo quello di calcolare gli effettivi parametri

dellomografia tra le due scene planari; tuttavia i frames sono affetti da rumore, e cos anche le
coordinate dei feature points. Risulta quindi necessario utilizzare molte pi corrispondenze
di quelle matematicamente necessarie (almeno 4), rendendo cos impossibile la risoluzione
analitica del sistema. Si perviene allora ad una soluzione cosiddetta ai minimi quadrati (regressione lineare). Un metodo particolarmente efficace per trovarla fornito dallalgoritmo
RANSAC, il cui scopo quello di eliminare preventivamente gli outliers (i.e. misure non coerenti con la distribuzione del rumore che si assume affligga i dati) che possono pesare in
maniera consistente sul risultato della regressione; si parla in questo caso di regressione robusta. Lalgoritmo RANSAC viene utilizzato nel programma tramite la funzione

void RansacEstimator::m_fRansacModelEstimation(CvPoint2D32f* pCorners,


CvPoint2D32f* pPreviousCorners,int iCorners,float fEstimatedCornersUncertainty)
presente nel file Ransac.cpp. La matrice 3x3 rappresentante lomografia viene ricavata da
unistanza della classe RansacEstimator

pEstimator->m_pFinalTransformationMat
a seguito di un reshaping dei parametri.

1.2 I MPLEMENTAZIONE
Il calcolo dellomografia costituisce senza dubbio la parte del progetto concettualmente pi
complessa e pi pesante a livello computazionale. Tuttavia, al fine di una corretta implementazione degli algoritmi stato necessario considerare anche diversi side aspects.
Analizzando le immagini fornite come input, si pu notare come il layer presenti su sfondo
nero gli elementi da aggiungere alla copertina, cio il logo e lautore. quindi evidente che
una semplice sovrapposizione del layer al frame non darebbe lesito desiderato, poich la
scena del video verrebbe completamente oscurata. Viene a tal proposito fornita una maschera,
in cui sono presenti pixel bianchi in corrispondenza degli elementi utili del layer, contornati
sempre da sfondo nero. Anche fra maschera e layer sussiste una relazione di identit, cos
come fra layer e frame iniziale. Pertanto, lomografia da applicare al layer potr essere utilizzata anche per la maschera. Per individuare i punti del layer da riportare sul frame (una
volta applicata lomografia a tutte le immagini coinvolte) necessario un ciclo che selezioni
unicamente i punti dellimmagine che corrispondono a pixel bianchi della maschera.
Si noti a tal proposito che, per ottenere immagini realistiche, opportuno utilizzare lopzione
CV_INTER_LINEAR della funzione

void cvWarpPerspective(const CvArr* src, CvArr* dst, const CvMat* map_matrix,


int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,
CvScalar fillval=cvScalarAll(0) )
Lutilizzo dellinterpolazione lineare ha per leffetto negativo di sporcare le zone di confine del layer, in quanto a seguito dellapplicazione dellomografia vengono pesati anche i

pixel circostanti (neri nel layer fornito). Per ovviare a questo problema si sostituiscono i pixel
neri con i pixel corrispondenti presi dal reference frame. Si vedano a tal proposito le due immagini 1.1 e 1.2 .

Figure 1.1: pixel neri riportati per interpolazione lineare.

Figure 1.2: soppressione pixel neri


Passiamo ora allanalisi dei possibili approcci (F2R,F2F,ibrido)
1.2.1 F RAME - TO -R EFERENCE
Come abbiamo detto, nel caso dellapproccio frame-to-reference sufficiente applicare lomografia al layer ed alla corrispondente maschera, per poi passare alla fase di ricolorazione e
stampaggio sul frame.
PRO: facile da implementare una volta ottenuta lomografia/ non c accumulo di errore.
CONTRO: fenomeno di jitter del layer aumentato, dovuto alla difficolt di trovare sufficienti
feature points quando la differenza tra frame corrente e reference frame molto marcata.
1.2.2 F RAME - TO -F RAME
Nel caso frame-to-frame invece, ottenuta lomografia che lega le due immagini analizzate, si
deve considerare il fatto che il layer non legato da una relazione di identit con nessuno dei
due frame in esame, ma si riferisce a quello iniziale. Si deve dunque considerare la relazione
che sussiste fra i due frame analizzati e quello di riferimento. Si procede quindi nel seguente
modo:
Lomografia trovata viene definita diffHomography, a indicare che si tratta di quella
relativa a due frame consecutivi. Si utilizza poi una seconda matrice, chiamata prevHomography, inizializzata, a inizio progetto, alla matrice identit. Infine una terza
matrice, pHomography, contiene i dati da applicare al layer e alla maschera.

Dopo aver applicato RANSAC, e quindi aggiornato la matrice diffHomography, la si


moltiplica per la matrice prevHomography, memorizzando il risultato in pHomography che sar quella da applicare al layer.
Per i primi due frame, il confronto avverr come nel caso F2R, perch la prima sequenza video coincider con il riferimento. In questo caso, lomografia fra i due frame
sar analoga a quella da applicare al layer. Infatti, essendo prevHomography lidentit,
diffHomography e pHomography conterranno gli stessi dati e il caso si riconduce a
quello F2R. Per i frame successivi invece necessario aggiornare prevHomography,
copiandovici ad ogni ciclo pHomography. In questo modo si tiene memoria della relazione del frame corrente con quello iniziale e si riesce ad ottenere la trasformazione
da applicare al layer, moltiplicando ogni volta prevHomography aggiornata con la matrice ottenuta dallalgoritmo RANSAC.
PRO: si trovano sempre molti feature points tra frame consecutivi, evitando cos il fenomeno
di jitter.
CONTRO: Si verifica un fenomeno di accumulo di errore nellomografia effettivamente applicata al layer (prodotto di omografie in serie, nessuna perfetta) che si ripercuote in un
disallineamento, a volte piuttosto evidente, del layer rispetto alla scena.

1.2.3 A PPROCCIO IBRIDO


Al fine di evitare gli svantaggi che comporta lutilizzo di uno dei due metodi F2R o F2F, legati
per motivi diversi al calcolo di unomografia errata, si pensato di inserire uno stadio di stima
dellapproccio pi corretto per ogni frame della sequenza video. Una volta scelto lapproccio,
si procede nella sua applicazione in base a quanto descritto nei due paragrafi precedenti. A
tal fine:
Si binarizza il reference frame, basandosi sul canale B nella rappresentazione RGB e
scegliendo la soglia con lalgoritmo di Otsu. Nella nostra applicazione si riesce cos
ad isolare in maniera sufficientemente efficace il libro dal resto della scena. Un modo
di procedere pi preciso ed universale sarebbe stato quello di scegliere un reference
color e binarizzare limmagine in base alla distanza di Mahalanobis da quel colore
(scegliendo una soglia T opportuna).
Ad ogni iterazione del ciclo principale, si binarizza alla stessa maniera il frame corrente.
Si calcolano entrambe le omografie secondo lapproccio F2R e F2F.
Applichiamo entrambe le omografie cos calcolate al reference frame binarizzato, e per
entrambi i metodi effettuiamo il confronto pixel-by-pixel con il frame corrente binarizzato. Lapproccio pi corretto sar quello per cui il numero di pixel di colore differente
minore.
N.B: la binarizzazione, effettuata in questo modo, considera una parte considerevole del libro come sfondo; porzione che in pi varia al cambiare della luminosit. Lalgoritmo rimane

comunque efficace perch ci che interessa non tanto identificare correttamente il libro,
quanto piuttosto lo scarto di identificazione tra i due metodi.
Generando il video aumentato secondo questa procedura, ci accorgiamo che entrambi i principali problemi di F2R e F2F (rispettivamente jitter e disallineamento progressivo) vengono
eliminati, proprio in virt del fatto che viene scelta per ogni frame lomografia pi esatta (interrompendo cos anche il fenomeno di accumulo di errore ogni volta che si passa a F2R).

2 T RACKING DEL COLORE


La luminosit del video di input non costante: si assiste a variazioni ridotte durante la prima
fase del video (sufficienti a far risaltare il layer di realt aumentata nel caso non si prendano
provvedimenti) e molto grandi nella fase finale (il colore di sfondo della copertina del libro
vira improvvisamente verso il viola).
Gli obiettivi da raggiungere applicando opportune trasformazioni cromatiche sono:
Trasparenza tra layer e frame in corrispondenza di quelle zone in cui il layer non
inserisce informazione aggiuntiva rispetto al video di input.
Mantenere costante il rapporto di colore e intensit tra la scritta aumentata (Pietro
Azzari) e la scritta reale (Richard Harley and Andrew Zisserman) durante tutta la
durata del video.
Modificare il colore di sfondo del logo CVLab per rispecchiare i cambiamenti di luminosit.
Si dapprima provato ad operare nello spazio di colore RGB, ma con scarsi risultati: i tre
canali risultano altamente correlati ed molto difficile comprendere come si ripercuotono
su di essi i cambi di luminosit, essendo uno spazio percettivamente non uniforme. Nella
ricerca di uno spazio di colore che isolasse su un singolo canale linformazione relativa alla
luminosit, abbiamo identificato Lab.

2.1 L O SPAZIO DI COLORE L AB


Riportando una definizione trovata in rete (Wikipedia), risulta che lo spazio colore Lab o
CIELAB o CIE 1976 (L*, a*, b*) uno spazio colore-opponente con la dimensione L per la luminosit e a e b per le dimensioni colore-opponente, basato sulle coordinate dello spazio
colore non lineare compresso CIE XYZ. La luminosit, calcolata come la radice cubica della
luminanza relativa, dunque uninformazione contenuta nel singolo canale L.
OpenCV dispone della funzione

void cvCvtColor(const CvArr* src, CvArr* dst, int code)

che permette di passare dallo spazio RGB a quello Lab, e riconvertire in RGB una volta effettuate le operazioni necessarie.
N.B: abbiamo riscontrato che tale funzione contiene un errore nelle prime versioni di OpenCV
(la 1 compresa) e non converte correttamente in Lab. Pertanto abbiamo utilizzato OpenCV
2.4.

2.2 L ALGORITMO DI CAMBIO COLORE


Per raggiungere lobiettivo di trasparenza nelle zone senza informazione aggiuntiva, abbiamo
due possibili strade:
Inseguire, pixel per pixel, le variazioni dei valori di ogni singolo canale nel video di
input. In questo caso lalterazione dei canali viene eseguita su tutti quei pixel del layer
che risultano bianchi nella sua maschera (a cui sia stata applicata lomografia).
effettuare la differenza tra il frame iniziale e la parte non nera del layer (identificabile
sfruttando la sua maschera) per estrarre la posizione di quei pixel che appartengono
esclusivamente alla scritta "Pietro Azzari" e al logo "CVLab". Tutti gli altri pixel del
layer, compresi quindi quelli che vogliamo lasciare trasparenti, rimarranno invariati.
Per quanto riguarda il canale L abbiamo optato per la prima ipotesi per un motivo di maggiore uniformit risultante sui contorni della scritta Pietro Azzari" (e di CVLab, anche se
in maniera meno evidente). Questo per permettere che linterpolazione lineare operasse sui
contorni della scritta, in modo da rendere dolci le transizioni di luminosit.
Per quanto riguarda i canali a e b, invece risultato necessario isolare la scritta Pietro Azzari
ed il logo per non far trasparire in loro corrispondenza lalterazione dei colori tra i vari frame.
Pertanto su tali canali, in corrispondenza della scritta e del logo, verr propagato inalterato il
colore del Layer.
N.B: nelleffettuare tale operazione abbiamo notato che la dicitura relativa agli autori originari non perfettamente corrispondente tra layer e reference frame (una possibile spiegazione di questo fatto che lalgoritmo di compressione lossy dellimmagine a seguito
dellediting per inserire le informazioni aggiuntive abbia alterato anche la parte degli autori
reali). Abbiamo quindi dovuto restringere la maschera del layer per eliminare questa zona
che risultava erroneamente diversa.
In definitiva, lalgoritmo utilizzato per la trasformazione cromatica riassumibile come segue:

Per tutti i pixel appartenenti a layerMask_warp:


Canale L:
risultato = frame_attuale + layer_warp - referenceFrame_warp;
Canali A e B:
IF (e un pixel della scritta AZZARI o del logo)
risultato = layer_warp

ELSE
risultato = frame_attuale + layer_warp - referenceFrame_warp
dove per frame_attuale, layer_warp, referenceFrame_warp si intendono i valori nei rispettivi
canali e nelle rispettive immagini (per _warp si intende a cui stata applicata lomografia di
sovrapposizione).

3 R ISULTATI .
Il software permette di scegliere con quale approccio generare il video di output (F2R, F2F, ibrido). E possibile anche scegliere se utilizzare la maschera del layer originale, oppure quella
ridotta per evitare le scritte dei primi due autori.
possibile trovare i video di output del software ai seguenti link:
Approccio Frame-to-Reference
Approccio Frame-to-Frame
Approccio Ibrido
Effetto della maschera originale
Come previsto, si possono osservare i seguenti fenomeni:
Nel video F2R la sovrapposizione a volte instabile: capita che tra frame successivi
la posizione del layer cambi di poco ma repentinamente, generando un effetto poco
realistico di discontinuit. Il fenomeno apprezzabile soprattutto nellultima parte
del video, quando pi difficile trovare corrispondenze con il reference frame a causa
dellalterazione dei colori.
Nel video F2F non si presentano i problemi evidenziati nel caso F2R: ciononostante si
accumula via via un errore che si ripercuote in un disallineamento costante di scritta
aggiuntiva e logo rispetto al libro.
Nel video Hybrid entrambi i problemi di F2R e F2F risultano fortemente mitigati.
Leffetto dellutilizzo della maschera originale (non ridotta) quello di rendere poco
nitida e molto rumorosa la zona in corrispondenza dei due autori reali.