Segmentazione di Immagini in Tempo Reale per
Transcript
Segmentazione di Immagini in Tempo Reale per
Università degli Studi di Roma “La Sapienza” Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Segmentazione di Immagini in Tempo Reale per Robot Tetrapodi Di: Walter Nisticò Relatore: Prof.Daniele Nardi Contro-relatore: Prof.Giuseppe Santucci Co-relatore: Ing.Luca Iocchi Anno Accademico 2001-2002 SOMMARIO Capitolo 1..............................................................................................................................1 Introduzione.........................................................................................................................1 1.1 Ambiente operativo...............................................................................................2 1.2 Obiettivi...................................................................................................................4 1.3 Problemi affrontati e tecniche utilizzate............................................................5 1.4 Risultati ....................................................................................................................7 1.5 Traccia dell’esposizione ........................................................................................7 Capitolo 2............................................................................................................................10 Segmentazione ...................................................................................................................10 2.1 Thresholding.........................................................................................................12 2.1.1 Thresholding statico .................................................................................12 2.1.2 Thresholding dinamico ............................................................................21 2.2 Region Growing...................................................................................................27 Capitolo 3............................................................................................................................32 Estrazione di contorni ......................................................................................................32 3.1 Filtri ........................................................................................................................33 3.1.1 Filtri di riduzione del rumore ..................................................................36 3.1.1.1 Filtri lineari....................................................................................37 3.1.1.2 Filtri non lineari ...........................................................................45 3.1.2 Filtri di Edge Detection ...........................................................................48 3.1.3 S.U.S.A.N....................................................................................................59 3.1.3.1 S.U.S.A.N. Smoothing................................................................61 3.1.3.2 S.U.S.A.N. Edge Detector.........................................................63 3.2 Riconoscimento di forme...................................................................................67 3.2.1 Trasformata di Hough..............................................................................69 3.2.1.1 Trasformata di Hough per le linee...........................................70 Capitolo 4............................................................................................................................73 Progetto del sistema..........................................................................................................73 4.1 Vincoli legati all’ambiente ..................................................................................73 4.1.1 L’AIBO ERS-210 – Sistema di elaborazione.......................................75 4.1.2 L’AIBO ERS-210 – Telecamera.............................................................77 4.2 Segmentazione......................................................................................................83 4.2.1 Region Growing ........................................................................................84 4.2.2 Segmentazione dinamica..........................................................................87 4.2.3 Filtraggio .....................................................................................................97 4.2.4 Classificazione..........................................................................................101 4.3 Edge detection ...................................................................................................106 4.4 Estrazione di oggetti nell’immagine ...............................................................109 4.4.1 Formazione dei blob...............................................................................110 4.5 Ricostruzione della scena .................................................................................112 4.5.1 Modello di telecamera.............................................................................112 4.5.2 Riconoscimento di oggetti nella scena ................................................116 4.5.3 Riconoscimento di linee.........................................................................127 Capitolo 5..........................................................................................................................129 Implementazione.............................................................................................................129 5.1 Thresholding dinamico.....................................................................................131 5.2 SUSAN ................................................................................................................136 5.2.1 Analisi delle caratteristiche del processore .........................................136 5.2.2 Ottimizzazione degli accessi in memoria............................................139 5.2.3 Ottimizzazione delle istruzioni .............................................................146 5.3 Estrazione oggetti ..............................................................................................152 Capitolo 6..........................................................................................................................153 Risultati..............................................................................................................................153 6.1 Ambiente di prova.............................................................................................153 6.2 Esperimenti.........................................................................................................155 6.3 Ricostruzione della scena .................................................................................170 6.4 Applicazione: localizzazione basata su landmark ........................................171 Conclusioni e sviluppi futuri .........................................................................................179 ii RINGRAZIAMENTI Desidero ringraziare il prof. Nardi per la guida e la supervisione del lavoro, nonchè per l’opporunità concessami di conoscere l’affascinante mondo della robotica in generale e della RoboCup in particolare. Ringrazio l’ing. Luca Iocchi per il supporto, i consigli, gli insegnamenti e le correzioni che mi hanno permesso di portare a termine con successo il lavoro. Alla mia famiglia. iii Capitolo 1 Introduzione Un agente robotico autonomo che deve eseguire una serie di compiti in un ambiente dinamico e potenzialmente ostile, ha bisogno di rilevazioni sensoriali affidabili, ad una frequenza sufficiente ad ottenere una reattività adeguata a rispondere alle varie situazioni che possono crearsi nell’ambiente circostante, e con una capacità di acquisizione di informazioni tale da consentire il raggiungimento dei propri obbiettivi. In particolare, la visione è una fonte di conoscenza sul mondo esterno che fornisce una grande quantità di informazioni, oltre a permettere al robot di orientarsi con modalità simili a quelle dei sistemi biologici. Cardine di ogni sistema di visione è la segmentazione, processo volto a partizionare ed estrarre informazione dall’immagine in base a criteri di omogeneità e rilevanza di particolari caratteristiche in essa presenti che trovano corrispondenza in modelli noti a priori: • Essendo il primo gradino su cui poggia l’intero processo di acquisizione, è fondamentale che essa sia accurata e affidabile in tutte le condizioni operative tipiche del dominio di interesse, in quanto l’informazione persa a tale livello è difficilmente recuperabile negli stadi di elaborazione successivi; • Poiché l’elaborazione viene effettuata direttamente a livello di pixel, quindi su insiemi di dati molto ampi, il carico di lavoro tipico di questa operazione è considerevole, e rappresenta di solito un fattore critico nel determinare le prestazioni computazionali complessive del sistema di visione. 1 Quando il sistema robotico interagisce con un ambiente dinamico in tempo reale, avendo a disposizione risorse d’esecuzione limitate, queste due caratteristiche entrano in conflitto, e tipicamente l’aspetto prestazionale prende il sopravvento, infatti non è di alcuna utilità l’accuratezza delle rilevazioni se il robot non è in grado di reagire tempestivamente ai cambiamenti dell’ambiente. Scopo di questa tesi è quindi la realizzazione di un sistema di segmentazione di uso generale, per sistemi operanti in tempo reale, robusto, affidabile e qualitativamente accurato, in grado di elaborare immagini a frequenze sufficientemente elevate da permettere una reattività del robot sufficiente ad interagire con successo in un ambiente dinamico e competitivo. 1.1 Ambiente operativo Il lavoro descritto in questa tesi è stato sviluppato nel contesto delle competizioni per agenti autonomi RoboCup Sony AIBO Legged League, che forniscono un ambiente dinamico e concorrenziale in cui due squadre di robot tetrapodi si affrontano su un campo da calcio con l’obiettivo di vincere la partita. Caratteristiche rilevanti di tale dominio sono: • Hardware standardizzato: è ammesso l’uso di un solo tipo di robot, comune a tutte le squadre (che partono quindi in condizioni di sostanziale parità), il Sony AIBO ERS-210(A); a determinare il risultato delle competizioni sono dunque solo le prestazioni del software; • Ambiente semplificato: le caratteristiche del dominio di interesse, quali la dimensione, la forma, il colore di tutti gli oggetti, sono interamente note a priori; l’illuminazione è esclusivamente artificiale e ragionevolmente standardizzata; gli oggetti hanno forme semplici 2 (sfera, cilindro, parallelepipedo) e sono caratterizzati da colori uniformi e brillanti; • Dominio dinamico e competitivo: gli agenti si muovono sul campo di gioco e concorrono per il controllo della palla, che può raggiungere velocità di movimento dell’ordine di alcuni metri al secondo; • Risorse di elaborazione limitate: la quantità di memoria a disposizione è di 32Mbyte, il microprocessore è una variante a basso consumo della famiglia MIPS R4000 ed è disponibile in due versioni, a 200MHz e, recentemente, a 400MHz; • Telecamera a bassa risoluzione: la telecamera è basata su un sensore CMOS a basso costo, capace di acquisire 25 fotogrammi al secondo ad una risoluzione massima di 176x144 pixel. In conseguenza delle caratteristiche appena evidenziate, l’approccio sin qui utilizzato dalle varie squadre è stato fondato su varie forme di classificazione statica dei pixel in base al loro colore (si vedano [HIPS00], [CSVYHPS01], [GT02], [VLVRSC02]). La situazione preesistente a questo lavoro, concernente il progetto SPQR Legged della Facoltà di Ingegneria Informatica dell’Università di Roma “La Sapienza”, era la seguente: • La segmentazione era affidata ad un processore dedicato integrato nel robot, capace di classificare i pixel dell’immagine in base al colore mediante tabelle calibrate fuori linea attraverso un insieme di esempi; tale soluzione, in forza del fatto di essere cablata in hardware, imponeva dei vincoli sulla risoluzione, limitata ad 88x77 pixel, e sul dominio di rappresentazione delle tabelle di classificazione; l’immagine così segmentata risultava molto rumorosa, estremamente sensibile a variazioni di illuminazione, oltre 3 a non sfruttare la massima risoluzione messa a disposizione della telecamera; • Il riconoscimento degli oggetti, basato sul colore, utilizzava come unico criterio, nella selezione delle regioni di immagine significative, la dimensione rispetto ad opportune soglie, senza tenere conto della posizione di tali regioni nell’immagine e né di vincoli sulle proporzioni fra le dimensioni; • Nonostante l’hardware fosse in grado di segmentare immagini a costo nullo alla massima frequenza permessa dal dispositivo di acquisizione video, 25 fotogrammi al secondo, in conseguenza della frammentarietà dell’output così ottenuto, veniva generato un altissimo numero di regioni colorate da far processare alle routine di più alto livello preposte all’estrazione oggetti, per cui la frequenza di elaborazione del sistema di visione complessivo variava da 5 a 25 fotogrammi al secondo in funzione delle caratteristiche della scena, ponendo problemi al tracciamento degli oggetti veloci. 1.2 Obiettivi In conseguenza delle suddette limitazioni, posto il robot in un ambiente soggetto ad una componente di illuminazione naturale, era necessario ricalibrare la visione diverse volte nel corso della giornata; oltre a ciò, sia per la risoluzione ridotta, sia per il basso rapporto segnale/rumore, era praticamente impossibile distinguere affidabilmente oggetti di dimensioni contenute, quali palla e landmark, ad una distanza superiore ai 2.5m: tale limitazione, precedentemente trascurabile, è diventata un grave handicap a partire dall’edizione 2002 della RoboCup, perché le dimensioni del campo di gioco sono raddoppiate raggiungendo i 4.40x2.90m. Gli obiettivi per il nuovo sistema di visione che si sono quindi naturalmente posti sono: 4 • Robustezza rispetto a variazioni delle condizioni di illuminazione, in modo da poter utilizzare senza problemi il sistema in ambienti in cui è presente una componente di luce naturale o non uniforme, come ad esempio all’interno di uffici; • Elaborazione di immagini alla massima risoluzione permessa dall’hardware, 176x144 pixel, senza che la frequenza di elaborazione complessiva scenda al di sotto dei 10 fotogrammi al secondo, in modo da poter effettuare efficacemente il tracciamento della posizione di oggetti veloci; • Capacità di riconoscere correttamente gli oggetti a distanze prossime ai massimi teorici consentiti dalla risoluzione della telecamera, dalle dimensioni loro e del campo di gioco. 1.3 Problemi affrontati e tecniche utilizzate Al fine del raggiungimento degli obiettivi prefissi, è stato percorso il seguente cammino: • E’ stata effettuata una partizione fra le tecniche di segmentazione disponibili in letteratura in base alle potenzialità di impiego in tempo reale, scartando gli algoritmi non adatti a tale scopo: ne è risultato che solo i sistemi più semplici, basati su qualche forma di thresholding, forniscono le caratteristiche di efficienza necessarie a processare immagini in tempi dell’ordine dei millisecondi; • Sono state analizzate le tecniche utilizzate dalle altre squadre, mettendone in evidenza i limiti nel cogliere gli obiettivi precedentemente individuati: alcune varianti del thresholding statico ottengono buoni risultati qualitativi, vincolando però eccessivamente il riconoscimento alla condizioni di luce; ne è emersa la necessità di aumentare la capacità di discriminazione dei colori in base alle sole 5 componenti di crominanza, attraverso stadi di elaborazione preliminari; • La costruzione degli istogrammi delle componenti di crominanza e la conseguente analisi mediante tecniche di thresholding dinamico si sono mostrate promettenti nel filtrare colori non necessari al fine della classificazione, frutto della componente di riflessione speculare dei materiali degli oggetti e della non uniformità dell’illuminazione della scena; • Allo scopo di migliorare l’efficacia e la stabilità del thresholding dinamico, si è rivelato molto utile un filtraggio preliminare del rumore delle immagini attraverso convoluzione discreta con filtri di smoothing; sono state analizzate le caratteristiche di filtri lineari e non lineari, ed è stato individuato come operatore ottimo il SUSAN Smoothing, per la sua caratteristica di attenuare tutti i tipi di rumore preservando le strutture dell’immagine; • Si è mostrato come il riconoscimento dei contorni degli oggetti, come luogo dei punti ove è massimo il gradiente della luminosità, sia teoricamente e praticamente molto più robusto delle corrispondenti tecniche di segmentazione cromatica, confrontando poi le prestazioni dei vari operatori, individuando il migliore nel SUSAN Edge Detector; per il modellamento matematico dei bordi così rivelati è stata proposta la trasformata di Hough come tecnica robusta ed efficiente; • E’ stato progettato un sistema di visione di alto livello adatto a complementare efficacemente la segmentazione, filtrando errori di classificazione non eliminabili a basso livello perché frutto di difetti intrinseci del sensore CMOS di aquisizione video, basato sul partizionamento degli oggetti del dominio ammissibile in classi sulla base della loro altezza relativa alla telecamera, attraverso proiezione 6 della linea dell’orizzonte sul piano immagine e confronto della posizione degli oggetti rispetto ad essa; • Analizzando le caratteristiche architetturali del microprocessore in uso sull’AIBO, sono state progettate e implementate delle varianti adatte ad un uso in tempo reale degli algoritmi di segmentazione, filtraggio ed edge detection che costituiscono il percorso più critico del sistema complessivo. 1.4 Risultati Tutti gli obiettivi prefissati sono stati raggiunti: • Il sistema funziona correttamente in condizioni di luminosità non uniforme, e variabile significativamente nell’arco della giornata in conseguenza di luce solare che filtra nell’ambiente di prova attraverso delle tende; • La frequenza di processamento del sistema completo non è mai inferiore ai 20 fotogrammi al secondo su processore a 400MHz, né scende di sotto dei 10 fotogrammi al secondo, senza edge detection, su processore a 200MHz; • La palla, anche in condizioni di scarsa luminosità, viene riconosciuta correttamente fino ad una distanza di 4 metri, i landmark e le porte fino ad oltre 5. 1.5 Traccia dell’esposizione Verrà ora offerta una panoramica dei contenuti e delle tematiche affrontate nelle varie sezioni di questo documento: • Capitolo 2: viene definito formalmente il problema della segmentazione, illustrando le tecniche più diffuse ed approfondendo 7 la trattazione degli algoritmi più importanti adatti ad un uso in tempo reale; vengono anche analizzate le soluzione più efficaci ed interessanti adottate da altri guppi di ricerca. • Capitolo 3: dopo aver definito matematicamente il concetto di filtro, le proprietà della convoluzione e l’analisi in frequenza mediante trasformata di Fourier, vengono trattati dettagliatamente i più diffusi operatori di riduzione del rumore lineari, confrontandoli dal punto di vista delle prestazioni e della risposta in frequenza, e non-lineari, evidenziandone i miglioramenti ottenibili rispetto agli operatori lineari in termini di preservazione delle strutture dell’immagine; dopo aver poi definito il problema del riconoscimento dei bordi, sono stati confrontati i più diffusi operatori differenziali di edge detection ed il noto algoritmo di Canny; la terza sezione del capitolo tratta separatamente gli operatori basati sul principio dell’USAN, sottolineandone la superiorità qualitativa sia nella riduzione del rumore che nel riconoscimento di bordi. • Capitolo 4: partendo dall’approfondimento delle specifiche legate all’ambiente, è stato progettato incrementalmente il sistema di segmentazione mostrando gli effetti ottenuti dai vari stadi del sistema; è stato poi presentato un sistema di visione di alto livello per l’estrazione degli oggetti presenti nell’immagine segmentata, fornendo un modello geometrico di telecamera, basato sulla proiezione della linea dell’orizzonte sul piano immagine allo scopo di partizionare gli oggetti in classi. • Capitolo 5: dopo aver progettato un algoritmo di thresholding dinamico computazionalmente più efficiente della tecnica descritta in letteratura, si è proceduto all’analisi delle caratteristiche architetturali del microprocessore di cui è dotato il robot e conseguentemente a costruire un operatore di riduzione del rumore 8 ed uno di edge detection in grado di ottenere tempi di elaborazione prossimi a quelli di filtri lineari operanti sullo stesso intorno di pixel. • Capitolo 6: Dopo aver definito l’ambiente di prova, sono stati esposti i risultati conseguiti attaverso il confronto, in una serie di esperimenti, con una tecnica di segmentazione tradizionale; è stata poi delineata come applicazione una tecnica di localizzazione con integrazione dei dati attraverso il filtro di Kalman. 9 Capitolo 2 Segmentazione La segmentazione, nell’accezione più ampia del termine, è un processo volto a partizionare un’immagine in regioni caratterizzate da proprietà di omogeneità rispetto ad una o più caratteristiche rilevanti o “features”, finalizzato al riconoscimento degli oggetti in essa contenuti. Se indichiamo con I l’intera immagine, R , R2, …, Rn, n sottoregioni dell’immagine segmentata, H un predicato di omogeneità rispetto ad una determinata caratteristica, possiamo definire la segmentazione in base alle seguenti proprietà: n a) ΥR i =I i =1 b) Ri Ι R j = ∅ ∀i, j i ≠ j c) H (Ri ) = True ∀i d) H (Ri Υ R j ) = False ∀i ≠ j (2.1) Esaminando le proprietà su espresse, appare chiara la necessità di individuare innanzitutto un predicato di omogeneità adatto a strutturare il dominio di interesse secondo le caratteristiche proprie dell’applicazione: tipicamente le caratteristiche che permettono di distinguere gli oggetti di interesse dallo sfondo o ambiente sono la luminosità, il colore, l’ombreggiatura, la tessitura o “texture”. Una volta stabilite le caratteristiche di interesse e formalizzato un criterio di omogeneità adatto a discriminarle, bisogna determinare un algoritmo in grado di realizzare in concreto il processo di segmentazione, 10 soddisfacendo le (2.1) e possibilmente anche la seguente desiderabile proprietà: e) Ri connessa, ∀i (2.1.1) Infatti, tale proprietà facilita notevolmente il compito dei livelli superiori del processo di elaborazione visiva nello stabilire corrispondenze fra le regioni così ottenute e i modelli semantici che costituiscono la base di conoscenza (primitive, forme, oggetti); tale risultato però è strettamente dipendente sia dalla natura dell’algoritmo di segmentazione utilizzato, sia dalle proprietà dell’immagine usate per il processo di partizionamento (predicato di omogeneità), infatti caratteristiche come ad esempio la tessitura hanno una forte caratterizzazione locale, mentre lo stesso non può dirsi per l’intensità luminosa. A questo punto è opportuno introdurre un’importante distinzione fra tecniche di segmentazione: 1. Segmentazione completa: un insieme di regioni disgiunte in corrispondenza diretta con oggetti distinti nell’immagine sorgente; 2. Segmentazione parziale: le regioni non corrispondono direttamente con oggetti dell’immagine, ma hanno caratteristiche omogenee rispetto ad una o più proprietà intrinseche dell’immagine (es. brillantezza, colore). Tipicamente, una corrispondenza diretta a livello di segmentazione fra regioni dell’immagine ed elementi della scena nel mondo reale, così da realizzare una segmentazione completa, si può ottenere solo mediante conoscenza a priori sull’ambiente ed in corrispondenza a domini particolarmente semplici, come ad esempio l’individuazione di oggetti scuri su uno sfondo chiaro quali caratteri stampati su un foglio; altrimenti, a partire da una segmentazione parziale è comunque possibile ricondursi ad identificare gli oggetti di interesse così come in una segmentazione completa 11 mediante integrazione con informazioni di alto livello, ed in effetti è questo il caso più comune nelle applicazioni pratiche. 2.1 Thresholding La segmentazione mediante confronto con una soglia o “thresholding” è un principio comune a molte tecniche semplici ma computazionalmente molto efficienti, di solito impiegate in ambito realtime, dove metodi più raffinati ma costosi in termini di risorse di elaborazione non sono applicabili [SHB98],[Ard00]. Nella sua versione più elementare, la segmentazione mediante thresholding consiste nel costruire un istogramma con i valori di luminosità dei pixel dell’immagine, fissare un valore di soglia compreso nell’intervallo dei valori ammissibili e partizionare l’istogramma e conseguentemente l’immagine in due classi distinte, caratterizzate da valori della luminosità al di sopra o al di sotto del valore di soglia così scelto. 2.1.1 Thresholding statico Se la soglia viene determinata al di fuori del ciclo di esecuzione dell’algoritmo (“off-line”), tipicamente in fase di progetto dell’applicazione, si parla allora di thresholding statico. Sia quindi T una soglia fissata all’interno dell’intervallo dei valori ammissibili di una funzione I(x,y) che rappresenta lo spettro dell’immagine da segmentare nel punto di coordinate x, y, definiamo l’immagine segmentata a valori binari S(x,y) come: 1 se I ( x, y ) ≥ T ∀x, y : S ( x, y ) = 0 se I ( x, y ) < T (2.2) Si distingue poi il caso di soglia globale, ovvero valida sull’intera immagine, dalla soglia locale o adattativa, dipendente dalla regione 12 dell’immagine considerata: in questo caso si divide l’immagine in sottoregioni Ic, si determina un valore di threshold diverso per ogni sottoregione, quindi: T = T (I , I c ) (2.2.1) Ad ogni modo quest’ultima variante ha scarso interesse applicativo. Il thresholding statico così per come è stato definito dalla (2.2) trova applicazione solo in campi molto limitati in presenza di illuminazione forte e uniforme, come nei processi di ispezione automatizzata industriale: Figura 2.1 Figura 2.2 Figura 2.3 Volendo segmentare la figura 2.1, osservando il suo istogramma riportato in figura 2.2, scegliendo un valore di soglia fra 100 e 200 si riesce a separare l’oggetto di interesse dallo sfondo, in questo caso caratterizzato dai 13 valori di luminosità al di sotto della soglia prescelta; il risultato è riportato in figura 2.3. Una prima riflessione che si può fare a questo punto è che il thresholding statico è generalmente una tecnica di segmentazione globale, almeno per immagini strutturalmente non troppo complesse, infatti sfruttando una conoscenza a priori del dominio in esame (in questo caso che si tratti di un oggetto molto scuro su uno sfondo bianco) si riesce ad ottenere una corrispondenza diretta fra la regione così estratta e l’oggetto reale; per lo stesso motivo, si può dire che esse soddisfino anche la proprietà (2.1.1) cioè siano connesse. Ciò detto, bisogna altresì rilevare che questa tecnica di segmentazione per come è stata sin qui illustrata trova un numero molto limitato di applicazioni pratiche, infatti di solito si ha a che fare con immagini multispettrali (quali ad esempio fotografie a colori) ed una singola soglia globale generalmente non è sufficiente a selezionare gli oggetti di interesse; appare così naturale individuare per ogni oggetto di interesse un insieme di intervalli ammissibili su ciascuno spettro e marcare come appartenenti ad esso tutti i punti dell’immagine che soddisfano la condizione di vero sull’AND logico rispetto alle varie componenti spettrali; ad esempio, supponiamo di voler riconoscere un oggetto arancione, in un’immagine rappresentata rispetto allo spazio cromatico YUV1: 1 Lo spazio cromatico YUV rappresenta ogni colore in base a 3 componenti: Y o Luminanza è la rappresentazione in “bianco e nero” dell’immagine; U e V sono dette componenti di Crominanza e sono fra loro ortogonali, dalla loro intersezione si ottengono tutte le tinte. 14 Arancio : ∀i ∈ immagine Pixel (i ) = (compY (i ), compU (i), compV (i )); if yLowOrange ≤ compY (i ) ≤ yHiOrange & uLowOrange ≤ compU (i ) ≤ uHiOrange & vLowOrange ≤ compV (i ) ≤ vHiOrange then PixelSegmentato(i ) = # arancio (2.3) Un’implementazione diretta dello pseudo-codice (2.3) funzionerebbe ma sarebbe molto inefficiente, infatti dovremmo effettuare 6 test per ogni colore2 riconosciuto per pixel, quindi con n colori avremmo: • 6n operazioni di test logico (es. compU (i ) ≤ uHiOrange ) • 5n operazioni di AND logico fra i risultati di tali test • n operazioni di branch o salto condizionale In particolare, le operazioni di salto condizionale possono essere particolarmente costose da eseguire sui microprocessori moderni, caratterizzati da esecuzione speculativa e fuori sequenza, infatti la natura di questi test rende il risultato di tali branch non predittibile, quindi in media nel 50% dei casi si arriverebbe allo svuotamento della pipeline, con conseguente spreco di decine di cicli di clock per ciascuna di tali operazioni. In [Bru00] è descritta un’elegante soluzione a tale problema, che costituisce la base di una libreria di funzioni di larga diffusione nell’ambito della robotica a livello accademico, CMVision. 2 Qui è usato il termine “colore” in un’accezione molto ampia, in effetti ciò che consideriamo è una porzione dello spazio cromatico che può corrispondere a più colori distinti, in questo caso accomunati dal caratterizzare un unico oggetto; in effetti ciò è vero anche per l’accezione comune di “colore”, infatti con “giallo” o “turchese” si intende un intervallo di frequenze di radiazione elettromagnetica distinte. 15 Per ogni componente spettrale dell’immagine, si costruisce un vettore (array) di interi mettendo ciascun elemento in corrispondenza biunivoca con un valore di intensità dello spettro in questione; in questo modo quando si procede alla segmentazione dell’immagine, per ogni pixel si considerano i valori di intensità delle sue componenti e queste vengono utilizzate come indici nell’accesso in lettura agli array corrispondenti; gli elementi di tali array sono usati come maschere di bit (bitmap), dove ogni bit corrisponde ad un colore diverso, e se viene impostato ad ‘1’ indica che il livello di intensità di tale spettro in corrispondenza con l’indice selezionato appartiene appunto a quel colore. Ad esempio, supponiamo di trovarci in un dominio (come quello Robocup) in cui si sa a priori che gli oggetti possono essere solo di 8 colori, arancio, rosa, giallo, verde, blu, rosso, bianco, celeste, che questi caratterizzano gli oggetti presenti nell’ambiente, ad esempio la palla è arancio, il campo è verde, ecc., e che le immagini acquisite dalla telecamera sono rappresentate nello spazio cromatico YUV, a 256 livelli per ogni componente: possiamo allora realizzare 3 array, uno per ciascuna delle componenti Y, U, V, composti da 256 interi di 8 bit, 1 bit per ogni colore: Figura 2.4 16 Nella figura 2.4 vediamo che in corrispondenza al valore di intensità Y selezionato, è possibile classificare il colore come arancio, verde, celeste o rosa; per determinare un colore unico per ogni pixel, è così necessario fare l’AND logico bitwise (ovvero bit a bit) fra le bitmap di tutti e tre gli spettri Y, U, V: Figura 2.5 Quindi: siano Y(i), U(i) e V(i) le componenti Y,U,V del pixel di indice i; siano Classe[j], ClasseU[j], ClasseV[j] gli array di bitmap come sopra definiti, allora: y := Y (i ) u := U (i ) (2.4) v := V (i ) Colore(i ) = ClasseY [ y ] & ClasseU [u ] & ClasseV [v] Il vantaggio di questo approccio, in termini di efficienza, è notevole, infatti per ogni pixel bisogna effettuare: • 3 operazioni di look-up, ossia letture dagli array contenenti le bitmap per le componenti cromatiche; poiché si tratta comunque di strutture piuttosto compatte in termini di occupazione di memoria 17 ( 3 ⋅ 256 elementi, dove ogni elemento tipicamente occupa da 1 a 8 byte a seconda del numero di colori riconosciuti), è alta la probabilità di trovarle presenti nelle cache del processore e quindi di eseguirle a costo di 2-3 cicli di clock; • 2 operazioni di AND bitwise fra i 3 interi così ottenuti, eseguite dalla quasi totalità dei processori in un solo ciclo di clock; Nel confronto diretto con l’approccio delineato in (2.3), si nota subito come il costo computazionale di quest’ultimo sia indipendente dal numero di colori riconosciuti, quindi O(m) , dove m è il numero di pixel presenti nell’immagine, mentre nel caso precedente si aveva un costo O(n ⋅ m) , dove n è il numero di colori riconosciuti, a fronte di una maggiore occupazione di memoria, comunque irrilevante nella maggior parte dei sistemi; oltre a ciò anche il costo e il numero delle singole istruzioni è molto più alto nel caso precedente: complessivamente, la differenza in termini di cicli di clock è può raggiungere e superare un ordine di grandezza. Con l’algoritmo (2.4) in realtà il concetto di thresholding a soglia viene ad essere esteso a vero e proprio “mapping” fra regioni dello spazio cromatico e colori (o categorie di oggetti) nell’immagine segmentata; dal punto di vista della capacità di rappresentazione di dette distribuzioni nell’intero dominio, urge rilevare che è così possibile delimitare solo regioni di forma parallelepipedale, questo per avere proiettato lo spazio avente per dimensioni le componenti spettrali dell’immagine su singoli vettori fra loro 18 indipendenti: Figura 2.6 Come rilevato in [BBV00], volendo riconoscere oggetti che siano ben distinguibili in base al colore, inteso come tinta e tonalità, in modo robusto rispetto a variazioni di intensità luminosa, la caratteristica di rappresentazione dell’algoritmo (2.4) non costituisce un grave limite purché si lavori su spazi cromatici che abbiano la componente di luminanza ortogonale ad un piano di crominanza, quali ad esempio YUV e HSL3, infatti in tal caso la regione del piano di crominanza che identifica il colore può essere racchiusa in una regione rettangolare ad essa circoscritta (“bounding box”) mentre la componente di luminanza può essere ignorata o delimitata in un ampio intervallo; lo stesso non può invece essere fatto in spazi cromatici in cui luminanza e crominanza siano ottenibili solo come combinazione lineare di componenti, quali ad esempio RGB4 o CMYK5, infatti tale dipendenza porta ad assumere forme più complesse, ad esempio coniche nel caso di regioni indipendenti dalla luminosità nello spazio RGB 3 HSL o Hue Saturation Luminance, è uno spazio caratterizzato da un modello di origine percettiva, ossia descrive un colore sulla base di 3 caratteristiche intuitivamente comprensibili cioè Luminosità, Tinta (o tonalità) e Saturazione del colore. 4 RGB o Red Green Blue, è uno spazio caratterizzato da un modello di sintesi a somma di colori, largamente utilizzato da perifiche che realizzano ogni colore mediante emissione di luce dei 3 colori primari, ad esempio attraverso fosfori (monitor). 5 CMYK o Cyan Magenta Yellow Black, è uno spazio caratterizzato da un modello di sintesi a sottrazione di colori, largamente utilizzato da periferiche che realizzano ogni colore mediante riflessione di una radiazione incidente di colore bianco, ad esempio attraverso pigmenti (stampanti) 19 (rapporto fra le componenti costante), per cui l’assunzione di poter fare l’analisi mediante vettori indipendenti viene a cadere, rendendo necessaria una preliminare conversione di spazio cromatico ( RGB ↔ YUV può essere fatta mediante trasformazione lineare); oltre a ciò, anche lavorando in HSL o YUV non sempre è possibile delimitare correttamente uno o più colori mediante regioni parallelepipedali, specialmente in presenza di illuminazione non uniforme e rumore nell’immagine. Per superare tali difficoltà, sembrerebbe allora naturale sostituire ai 3 vettori di classificazione una matrice tridimensionale, capace quindi di rappresentare qualsiasi tipo di regione; sfortunatamente, nel caso comune di quantizzazione a 256 livelli delle singole componenti cromatiche, tale matrice avrebbe 2563 elementi, quindi anche riconoscendo solo 8 colori potendo quindi utilizzare byte come elementi, la dimensione di tale rappresentazione richiederebbe 16Mbyte, ben al di là delle dimensioni della cache di qualsiasi processore di uso comune, che quindi in seguito anche alla modesta località degli accessi a questa struttura provocherebbe il thrashing6 della cache stessa con degrado inaccettabile delle prestazioni del sistema complessivo. Bisogna allora individuare delle soluzioni intermedie, che rappresentino un valido compromesso fra efficienza e rappresentatività, a seconda delle caratteristiche proprie dell’applicazione; due soluzioni valide utilizzate in ambito Robocup sono: • quantizzazione dell’intero spazio cromatico, privilegiando in termini di risoluzione le componenti di crominanza rispetto a quella di luminanza, ad esempio 64 livelli (6 bit) per ciascuna componente di crominanza, 16 livelli (4 bit) per la componente di luminanza; in totale la matrice consta di 216 elementi, pari a 64Kbyte per 6 Thrashing di una cache: continuo riempimento e svuotamento di dati senza che questi siano stati letti o scritti, a seguito di continue richieste di cache-refill, per la non-località spaziale e temporale degli accessi a un insieme di dati 20 riconoscere 8 colori; tale approccio è descritto in [VLVRSC02] e [GT02] nonché di prossima inclusione in CMVision 2.0; • quantizzazione della sola componente di luminanza, rappresentando lo spazio complessivo come un insieme di piani paralleli di crominanza non quantizzati, quindi 256 livelli per ciascuna componente di crominanza (8 bit), per cui ogni piano consta di 216 livelli ovvero 64Kbyte; in [HIPS00] è descritto un tale approccio basato su 14 piani, con quantizzazione della componente Y non uniforme, volta ad assegnare una maggiore risoluzione ai valori di luminosità più bassi, dove la capacità di discriminazione su base puramente cromatica è più ridotta; tale schema richiede complessivamente 896Kbyte di memoria. 2.1.2 Thresholding dinamico Quando non è possibile o non è conveniente fissare la soglia a priori, in maniera statica, si può ricorrere a tecniche che permettano di determinarla attraverso l’analisi delle componente spettrali dell’immagine.[SHB98] Un metodo semplice, applicato alla segmentazione di immagini contenenti solo testo, è il cosiddetto P-Tile thresholding: sia noto a priori p tale che 1 sia la percentuale di pixel dell’immagine appartenenti al testo p (tipicamente, in uno stampato i caratteri ricoprono circa il 10% dell’area totale), si determina allora la soglia T come il valore di luminosità tale che il numero di punti dell’immagine aventi luminosità minore di esso sono in percentuale pari a 1 : p 21 I =n text : {i I (i ) ≤ T } n text = p (2.5) Là dove tale caratteristica non sia nota a priori o non sia comunque adatta al dominio in esame, si ricorre a metodi basati sulla costruzione dell’istogramma delle componenti spettrali nell’immagine, sfruttando le caratteristiche ivi esibite per determinare una o più soglie. L’istogramma rappresenta una densità di probabilità a posteriori7 di trovare nell’immagine un certo intervallo di valori di intensità di un suo spettro, viene rappresentato come un vettore avente tanti elementi quanti sono i valori ammissibili, tipicamente 256, e ciascun elemento funge da contatore che contiene il numero di pixel presenti nell’immagine aventi valore di luminosità corrispondente; prima di procedere alla segmentazione, si fa una scansione completa dell’immagine costruendo l’istogramma. Figura 2.7 7 a posteriori, in quanto viene costruito sulla base dell’analisi dell’immagine stessa, quindi non ha natura predittiva. 22 Nel caso (semplice) in cui l’istogramma risulti bimodale, come per oggetti aventi approssimativamente lo stesso livello di grigio su uno sfondo di luminosità molto diversa (es. figura 2.7), appare abbastanza intuitivo scegliere come valore di threshold il punto di minimo fra i due massimi (locali) che costituiscono i modi; in realtà non è sempre semplice stabilire se un istogramma è bimodale, in quanto la presenza di rumore può generare massimi e minimi locali in prossimità del massimo assoluto; ciò può essere evitato stabilendo a priori una distanza minima (in termini di livelli spettrali) fra i due modi, oppure applicando tecniche di filtraggio o smoothing sull’istogramma; comunque, la bimodalità di un istogramma, non è una proprietà sufficiente a garantire una corretta segmentazione. Naturalmente, è possibile che l’istogramma sia multimodale, nel qual caso si tratterà di determinare più massimi e in corrispondenza ai minimi locali fra due massimi si stabiliranno le soglie, multiple. L’algoritmo di determinazione di soglie dinamiche (“thresholding dinamico convenzionale”) è il seguente: Figura 2.8 • si scelgono i due massimi assoluti dell’istogramma, tali che la distanza fra essi (in termini di livelli) all’interno dell’istogramma sia maggiore di una certa soglia predeterminata; si seleziona il punto di minimo fra essi e lo si sceglie come soglia, dividendo l’istogramma in due sottoregioni (fig. 2.8); 23 Figura 2.9 • tale procedura viene applicata ricorsivamente alle due sottoregioni così ottenute (fig. 2.9); • il processo termina quando non è più possibile applicare ulteriormente la fase di divisione. Supponendo di avere sufficiente conoscenza del dominio per stabilire a priori la modalità dell’istogramma di un’immagine, si possono ottenere risultati qualitativamente molto migliori rispetto agli algoritmi precedenti approssimando l’istogramma mediante una somma pesata di un numero (pari alla modalità) di funzioni di densità di probabilità a distribuzione normale (gaussiana): N (m X , σ X2 ) = 1 2πσ − 2 X e ( x −m X )2 2σ X2 (2.7.1) Il modello dell’istogramma così ottenuto è: hm = ∑ a i ⋅ N (mi , σ i2 ) (2.7.2) i Bisogna quindi determinare a i , mi , σ i2 ∀i tali da minimizzare la funzione, mediante tecniche di ottimizzazione: F (ai , mi , σ i2 ) = hm − hr (2.7.3) hr istogramma reale 24 A questo punto si scelgono come soglie i valori aventi probabilità minima fra due modi, minimizzando l’errore di segmentazione; questa tecnica prende il nome di thresholding ottimo, e permette di stabilire correttamente un valore di soglia in situazioni in cui i metodi precedenti fallirebbero: Figura 2.10 Come si può vedere in figura, nei casi (a) e (b) il thresholding ottimo permette una migliore localizzazione della soglia rispetto al metodo convenzionale, nel caso (c) addirittura riesce a separare due regioni che sarebbero risultate indistinte all’algoritmo convenzionale. Nonostante i suoi meriti, anche il thresholding ottimo presenta dei problemi: • il costo computazionale è più elevato, specialmente nella fase di minimizzazione della funzione F per determinare i parametri caratteristici delle funzioni di densità di probabilità; • se la modalità dell’istogramma non è nota a priori, l’algoritmo non è praticamente applicabile perché in tale situazione si possono individuare numerosi modelli capaci di minimizzare la funzione F, e non si è in grado di trovare un criterio di scelta; 25 • la stessa ipotesi di normalità delle densità di probabilità può non essere verificata nel dominio in esame. Nel caso di immagini multispettrali, quali ad esempio immagini a colori, si possono fare considerazioni analoghe a quelle fatte sin qui, determinando in modo indipendente le soglie relative ai vari spettri; l’immagine finale è ottenuta come sovrapposizione di piani monospettrali, ciascuno partizionato in base alle proprie soglie in opportune sottoregioni; le regioni dell’immagine complessiva sono ottenute come intersezione delle regioni individuate all’interno dei piani monospettrali: Figura 2.11: (a) e (b) rappresentano dei piani monospettrali, ad esempio le componenti di crominanza U e V; (c) rappresenta l’immagine complessiva (segmentata). Alternativamente, si potrebbe pensare di costruire un istogramma ndimensionale (dove n è il numero degli spettri) e cercare di individuare al suo interno dei cluster monomodali; il problema di individuare delle soglie (che in questo caso sono in realtà degli iperpiani) è notevolmente complicato dalla nuova topologia, e il costo computazionale può diventare proibitivo già per immagini a 3 spettri, come la maggioranza delle immagini a colori (O(x3) solo per effettuarne la scansione, dove x è il numero dei livelli in cui è quantizzato lo spettro, di solito 256); il vantaggio di questa soluzione è che può cogliere dipendenze statistiche fra gli spettri, ma le considerazioni precedenti ne sconsigliano comunque l’uso, tranne che in applicazioni molto particolari. 26 Nella maggior parte dei casi pratici, la segmentazione mediante soglia dinamica può essere classificata come segmentazione parziale, specialmente in presenza di soglie multiple ed immagini multispettrali, in quanto non si ha nessuna garanzia che le regioni di immagine individuate con queste tecniche siano in corrispondenza con oggetti del mondo reale, né che al loro interno risultino connesse (proprietà (2.1.1)), in quanto la partizione viene effettuata in base a proprietà dello spettro dell’immagine, che per loro natura hanno valenza globale. 2.2 Region Growing A differenza dei metodi visti sinora, in questa categoria ricadono tecniche che si basano sull’applicazione di una funzione di omogeneità che sfrutti la correlazione spaziale fra un pixel e i suoi vicini, quindi le regioni così formate soddisfano sempre la proprietà di connessione (2.1.1) [SHB98]. Per ogni pixel viene valutato il suo intorno applicandovi la funzione di omogeneità, tutti coloro che soddisfano tale criterio vengono aggiunti alla stessa regione; questo metodo è molto dipendente dal tipo di funzione di omogeneità che viene impiegato e dalla messa appunto dei parametri di questa in base al tipo di immagine. Un metodo più robusto, basato sullo stesso principio, è il cosiddetto seeded region growing, dove le caratteristiche delle regioni non sono controllate mediante messa a punto dei parametri della funzione di omogeneità, ma grazie alla scelta di un certo numero di punti di partenza che prendono il nome di semi. La scelta dei semi è spesso manuale, cioè effettuata direttamente dall’utente, ma può anche essere ottenuta automaticamente mediante analisi preliminare dell’immagine alla ricerca di punti che esibiscano in modo netto una certa proprietà che si intende sfruttare per la segmentazione, ad esempio 27 il fatto di avere la maggiore o minore brillantezza, o essere più vicini ad una determinata tonalità, ecc. Ogni seme costituirà la base per una classe di pixel che ne costituiranno la regione associata, siano A1, A2, …, An tali classi, ciascuna inizializzata con il solo seme corrispondente; sia N(x) l’intorno di x; inteso come 8-connettività: Figura 2.12 sia T l’insieme dei pixel non ancora allocati aventi nel proprio intorno almeno una delle regioni, quindi T contiene i pixel appartenenti alla frontiera di almeno una regione: n T = x ∉ Υ Ai i | N ( x) Ι n Υ A ≠ ∅ i i (2.8.1) sia δ ( x, i ) la “distanza” del pixel in esame dall’ i-esima regione, così definita: m y [] : Valore Medio (2.8.2) g ( x) : Intensità di x δ ( x, i ) = g ( x) − m y∈Ai ( x ) [g ( y )] sia SSL una lista, che sarà usata per tenere traccia dell’insieme corrente dei punti di frontiera T, ordinati sequenzialmente in base alla loro distanza 28 (2.9) da qualche regione; può allora così essere delineato l’algoritmo (“seeded region growing SRG”) [AB94]: • Inizializzazione: si inizializzano le Ai ( ∀i : Ai ≡ {xi } , xi semi), si inseriscono i punti appartenenti agli intorni dei semi ( ∀xi : N ( xi ) ) nella SSL, ordinati in base alla distanza δ ( x, i ) ; • While SSL ≠ ∅ do o Si rimuove il primo pixel y dalla lista SSL o If ∃i | {∀x ∈ ( N ( y ) Ι ¬SSL ) ⇒ x ∈ Ai } (cioè tutti i punti dell’intorno di i già etichettati appartengono ad una stessa regione Ai) o Then § si aggiunge y ad Ai , etichettandolo § si aggiorna m y∈Ai § ∀x ∈ N ( y ) | x ∉ Υ Ai Υ SSL , si aggiunge x i a SSL in una posizione determinata in base a δ ( x) = min δ ( x, i ) in modo da rispettarne i l’ordinamento o Else § si aggiunge y ad Ai | δ ( y, i ) = min δ ( y, j ) § si aggiornano m y∈Ai e SSL come nell’altro caso j Una variante di tale algoritmo prevede, nel caso in cui la condizione di test sia falsa, quindi in N(y) ci siano punti appartenenti a regioni diverse, si può marcare y come punto di bordo, non appartenente ad alcuna regione. 29 E’ importante notare che nell’esecuzione dell’algoritmo, gli elementi già inseriti nella SSL non vengono mai aggiornati ricalcolandone la distanza dalla regione a cui è stato appena aggiunto un punto, il cui valor medio è quindi cambiato; questo fatto produce effetti trascurabili nella maggior parte dei casi pratici, ed aumenta notevolmente la velocità dell’algoritmo, ma rende il processo dipendente dall’ordine di esecuzione delle operazioni, il che significa che se la scansione dell’immagine viene fatta dal basso verso l’alto o viceversa, in generale si ottengono due immagini segmentate differenti. In [MJ97] tali dipendenze vengono classificate in: • Dipendenze intrinseche dall’ordine dei pixel: quando diversi pixel x appartenenti a T hanno lo stesso δ (x) , allora viene valuato per primo quello che precede gli altri nell’ordine di scansione, ciò cambierà poi il valor medio corrente della regione in cui viene aggiunto, influenzando conseguentemente la classificazione dei pixel successivi; oppure quando il pixel estratto da T ha la stessa distanza minima da diverse regioni con cui confina, anche in questo caso la scelta avrà un influenza anche sugli sviluppi successivi; • Dipendenze introdotte dall’algoritmo SRG: durante la fase di inizializzazione, quando si costituiscono le classi A , A2, …, An in base ai semi e si aggiungono i corrispondenti intorni N(x) a T, se qualche punto è equidistante da 2 o più regioni verrà inserito nella lista in base alla sua distanza da solo una di esse, dipendentemente dall’ordine di processamento, e non verrà più aggiornato; inoltre, in ogni fase dell’algoritmo, quando punti di intorno vengono aggiunti alla SSL, l’ordine di questi dipende dall’ordine di scansione, che viene così ad avere un effetto sul valore del δ ad essi assegnato. Il primo tipo di dipendenze può essere eliminato se tutti i pixel di T che hanno lo stesso δ vengono processati in parallelo, il che significa che nessuno di tali pixel viene etichettato finchè non sono stati esaminati tutti gli 30 altri, e i valori medi delle regioni sono aggiornati dopo che sono stati etichettati i pixel; se un pixel non può essere etichettato perché ha lo stesso δ da due o più regioni confinanti, viene marcato come “in sospeso” e riconsiderato in una fase di postprocessamento; ogni volta che viene aggiornato il valore medio di una regione, l’intera SSL viene aggiornata e riordinata in base alle nuove distanze ottenute, rimovendo anche le dipendenze del secondo tipo. Tutto ciò è descritto e implementato in [MJ97], e prende il nome di Order Independent Seeded Region Growing; ad ogni modo, il prezzo da pagare per ottenere l’indipendenza dall’ordine è molto alto in termini di costo computazionale. 31 Capitolo 3 Estrazione di contorni Le tecniche esposte nel capitolo precedente permettono di individuare gli oggetti presenti in un’immagine essenzialmente in base al colore e/o all’intensità della luce che riflettono, che entro certi limiti possono essere considerate proprietà dell’oggetto in sé, quindi indipendenti dal resto della scena; in base a questo, è possibile non solo segmentare l’immagine in regioni omogenee rispetto a certe proprietà, ma anche mettere queste direttamente in relazione con i modelli che si stanno cercando; in questo capitolo verranno invece descritti metodi per partizionare l’immagine in base a proprietà locali che scaturiscono dal contrasto fra le diverse caratteristiche emissive di oggetti confinanti, e riconoscere i modelli sulla base della loro forma. Il concetto cardine attorno a cui ruota tutto il processo di estrazione dei contorni è quello di bordo, che in sé è sufficientemente astratto da poter essere caratterizzato in molti modi diversi, ma che ai fini dell’analisi di immagini al computer, e in accordo con quanto è stato sin qui chiarito riguardo al sistema di visione umano, può essere definito come segue: Insieme di pixel dell’immagine appartenenti alla frontiera tra due regioni omogenee in cui la funzione di intensità subisce una rapida variazione (3.1) Dalla definizione (3.1) emerge immediatamente l’associazione fra il concetto di bordo e quello di gradiente locale dell’intensità dei pixel appartenenti ad una regione di frontiera, infatti il gradiente è un indice della velocità di variazione della grandezza a cui si applica, appare quindi naturale andare a ricercare i punti di frontiera fra quelli caratterizzati da valori elevati 32 del gradiente; bisogna però prestare particolare attenzione nel procedimento, perché le immagini catturate dal mondo reale, a differenza di quelle generate matematicamente al computer, contengono sempre del rumore impulsivo, che per sua stessa natura presenta rapide variazioni di intensità. In conclusione, possiamo rilevare che sia per determinare il gradiente, sia per ridurre il rumore, è necessario processare l’immagine mediante filtraggio. 3.1 Filtri Considerato un segnale x(t) supposto, per semplicità di esposizione, unidimensionale e funzione del tempo, nel suo attraversamento di un sistema S, possiamo definire matematicamente l’uscita y(t) [Cus96]: y (t ) = F {x(ξ ); ξ ∈ (−∞,+∞); t } (3.2.1) cioè l’uscita è determinata da un funzionale F il quale la calcola a partire dal segnale x(ξ ) per tutti gli istanti ξ secondo una legge che in generale dipende dall’istante t stesso; se valgono le proprietà di: • F Linearità: a1 ⋅ x1 (t ) + a 2 ⋅ x 2 (t ) → a1 ⋅ y1 (t ) + a 2 ⋅ y 2 (t ) • Tempo-invarianza: x(t ) ↔ y (t ) ⇒ x(t − τ ) ↔ y (t − τ ) F F (3.2.2) (3.2.3) allora il sistema viene detto filtro. L’uscita di un sistema viene caratterizzata mediante la sua risposta ad un impulso di Dirac unitario centrato in t = τ , ossia δ (t − τ ) , che pertanto prende il nome di risposta impulsiva: y (t ) = h(t ;τ ) (3.2.4) che è una funzione la cui forma dipende dall’istante τ in cui l’impulso è centrato; se il sistema è un filtro, sfruttando le proprietà di linearità e 33 tempo-invarianza è possibile calcolarne l’uscita ad un ingresso qualsiasi x(t) come: +∞ y (t ) = x(t ) ∗ h(t ) = ∫ x(τ ) ⋅ h(t − τ )dτ (3.2.5) −∞ l’operazione x(t ) ∗ h(t ) prende il nome di convoluzione e gode di molte proprietà notevoli: • commutativa: x(t ) ∗ h(t ) = h(t ) ∗ x(t ) (3.2.6) • distributiva: x(t ) ∗ ( y (t ) + z (t ) ) = x(t ) ∗ y (t ) + x(t ) ∗ z (t ) (3.2.7) • derivazione: d ( x(t ) ∗ y (t ) ) d ( y (t ) ) = x(t ) ∗ dt dt (3.2.8) applicando poi sia la (3.2.6) che (3.2.8), si ottiene: y (t ) ∗ d ( x(t ) ) d ( y (t ) ) = x(t ) ∗ dt dt (3.2.8’) le (3.2.8), (3.2.8’) in particolare, sono molto utili nel processamento di segnali, sia perché permettono di effettuare i calcoli in modo più semplice qualora la derivata della convoluzione sia più semplice da calcolare della convoluzione stessa, sia perché permette di eseguire filtraggio e derivazione di un segnale in un’unica operazione. L’analisi e la progettazione dei filtri di solito non vengono effettuate nel dominio temporale, perché non è semplice esprimere certe caratteristiche come la capacità di riduzione del rumore in tale contesto; si ricorre allora al dominio della frequenza mediante trasformate: def +∞ Trasformata di Fourier: X ( f ) = F {x(t )} = ∫ x(t ) ⋅ e − j 2π ⋅ f ⋅t dt −∞ (3.2.9) In generale anche per x(t) reale, la X(f) è una grandezza complessa, quindi è spesso più conveniente esprimerla come: X ( f ) = M ( f ) ⋅ e jϕ ( f ) (3.2.10) 34 dove M ( f ) è detta risposta in modulo, mentre ϕ ( f ) è la risposta in fase. Anche la trasformata di Fourier gode di molte proprietà notevoli: linearità: z (t ) = ∑ ai ⋅ z i (t ) ⇒ F {z (t )} =∑ ai ⋅ F {z i (t )} (3.5.3) • traslazione nel tempo: F {x(t − τ )} = e − j 2π ⋅ f ⋅τ ⋅ X ( f ) (3.5.4) • traslazione in frequenza: F x(t ) ⋅ e j 2π ⋅ f 0 ⋅t = X ( f − f 0 ) (3.5.5) • dx(t ) derivazione nel tempo: F = ( j 2πf ) ⋅ X ( f ) dt (3.5.6) • t 1 integrazione nel tempo: F ∫ x(τ )dτ = ⋅ X(f ) π j 2 f − ∞ (3.5.7) • i i { } in particolare, le (3.5.6) e (3.5.7) permettono di risolvere sistemi di equazioni differenziali come equazioni lineari nel dominio traformato; altre due proprietà legano la trasformata di Fourier all’operazione di convoluzione: • prodotto nel tempo: F {x(t ) ⋅ y (t )} = X ( f ) ∗ Y ( f ) (3.6) • teorema della convoluzione: F {x(t ) ∗ y (t )} = X ( f ) ⋅ Y ( f ) (3.7) Il teorema della convoluzione è un risultato fondamentale nell’analisi ed elaborazione dei segnali, infatti grazie ad esso si può caratterizzare un filtro anziché mediante risposta impulsiva attraverso: risposta in frequenza: H ( f ) = Y( f ) X(f ) (3.7) così, un sistema lineare e permanente può essere facilmente progettato per agire in modo selettivo sulle varie componenti X(f) del segnale in ingresso per determinarne l’uscita; da qui è nato appunto il termine di filtro. 35 3.1.1 Filtri di riduzione del rumore Nel campo dell’elaborazione delle immagini, i segnali con cui si ha a che fare non sono definiti su un dominio temporale unidimensionale, bensì spaziale bidimensionale; altro fatto rilevante è che il dominio è discreto, perché le immagini vengono catturate mediante eccitazione di una griglia composta da un numero finito di recettori; bisogna allora estendere i concetti appena esposti di convoluzione e trasformata di Fourier, per un’immagine rappresentata da una matrice N ⋅ M : • convoluzione discreta bidimensionale: N −1 M −1 f ( x, y ) ∗ g ( x, y ) = ∑ ∑ f ( k , j ) ⋅ g ( x − k , y − h ) (3.8) k =0 h = 0 • trasformata discreta di fourier(DFT): F {g ( x, y )} = G (u , v) = • N −1 M −1 − j 2π ( + ) 1 N M ⋅ ∑ ∑ g ( x, y ) ⋅ e N ⋅ M x = 0 y =0 xu yv (3.9) trasformata inversa: N −1 M −1 F −1 {G ( x, y )} = g ( x, y ) = ∑ ∑ G (u, v) ⋅ e j 2π ( xu yv + ) N M (3.9’) u =0 v =0 tutte le considerazioni fatte nel caso unidimensionale tempo-continuo possono essere estese direttamente, con una notevole eccezione: nel caso tempo discreto la frequenza non può assumere valori nell’intervallo f f (−∞;+∞) ma è limitata a − c ;+ c dove fc è la frequenza di 2 2 campionamento (teorema di Shannon8), pertanto lo spettro della risposta in frequenza appare periodico di periodo Tc = 1 . fc Da quanto detto, appare chiaro come sia possibile ridurre il rumore presente nelle immagini catturate da una telecamera mediante convoluzione 8 fc/2 viene appunto detta frequenza di Shannon 36 discreta con filtri aventi una risposta che attenui o tagli completamente le bande affette da rumore e lasci passare il più possibile inalterate le restanti componenti portatrici di informazione; in particolare il rumore è di solito concentrato nelle alte frequenze, in particolare il rumore di quantizzazione ha sempre frequenza pari alla frequenza di Shannon essendo localizzato negli istanti di campionamento in conseguenza della non idealità dei campionatori ideali, così anche il rumore termico che genera fluttuazioni nelle grandezze elettriche che vengono misurate è ad alta frequenza e lo stesso vale per il rumore che si verifica nelle aree scure in conseguenza della sensibilità insufficiente del sensore; pertanto il profilo di filtro più comunemente utilizzato è quello di passa-basso. Contrariamente alla definizione matematica di filtro, nel campo dell’elaborazione delle immagini accanto ai filtri lineari è stata definita una classe di filtri cosiddetti “non-lineari” in cui la convoluzione viene comunque eseguita, ma l’uscita dipende in modo non lineare dal risultato della convoluzione in conseguenza dell’applicazione di un algoritmo specifico: y (u, v) = Φ{x(u, v) ∗ h(u, v)} (3.10) 3.1.1.1 Filtri lineari I filtri lineari di riduzione del rumore sono noti come filtri di “smoothing” o sfocatura, in quanto esibiscono una caratteristica risposta in frequenza di tipo passa-basso che taglia efficacemente il rumore ma priva l’immagine dell’informazione contenuta in alta frequenza, per cui i bordi e i contorni degli oggetti appaiono attenuati e sfumati, come nel caso di immagini non messe bene a fuoco. Il filtro viene rappresentato con una matrice quadrata N ⋅ N dove di solito N è un numero dispari, dimodochè per ogni pixel dell’immagine originale venga considerato un intorno simmetrico rispetto a x e y ottenendo 37 una risposta isotropa; gli elementi del filtro possono essere interi o numeri in virgola mobile, ma bisogna rispettare il vincolo che l’integrale della risposta impulsiva del filtro abbia area unitaria per evitare di amplificare la luminosità dell’immagine, pertanto se la matrice è composta da interi l’operazione di convoluzione va completata con una divisione di normalizzazione. Sebbene l’operazione di convoluzione discreta in sé sia abbastanza efficiente dal punto di vista computazionale, in quanto sono richieste solo somme e moltiplicazioni e al più una divisione per ogni pixel dell’immagine originaria, il costo algoritmico del filtraggio complessivo è di O( N 2 ⋅ M ) , dove M è il numero di punti che compongono l’immagine; da qui la necessità in ambito real-time di utilizzare sono filtri aventi dimensione 3x3 o al più 5x5. In questa classe il filtro più semplice che si possa realizzare è il cosiddetto box-filter o filtro media-mobile, che consiste nella trasposizione bidimensionale della funzione: 1 1 rectT (t ) = T T 0 T 2 altrimenti se t < (3.11) Nel caso di una matrice 3x3 a coefficienti interi, può essere così rappresentato: 38 Figura 3.1 Box-filter Grazie alla sua semplicità, questo filtro risulta particolarmente efficiente, infatti nell’esecuzione della convoluzione non è necessario effettuare alcuna moltiplicazione visto che ha tutti coefficienti unitari, perciò per filtrare ogni pixel dell’immagine basta sommargli i valori delle intensità dei suoi 8 vicini e dividere per 9; una variante ancora più efficiente è: Figura 3.2 Box-filter, forma alternativa. 39 che ha due peculiarità, innanzitutto che il fattore di normalizzazione è una potenza di 2 (23=8), perciò l’operazione di divisione può essere fatta a basso costo come shift aritmetico a sinistra di 3 posizioni; secondariamente, lo 0 al centro della maschera fa sì che il rumore impulsivo venga attenuato più efficacemente. Il principale difetto di questo tipo di filtri è il brusco profilo di taglio nel dominio spaziale in corrispondenza dei bordi della maschera, che nel dominio trasformato si traduce in un andamento oscillante che lascia passare del rumore in alta frequenza: 1 F rect T (t ) = Sinc (πfT ) 9 T (3.12) Figura 3.3 Risposta in frequenza dei box-filter: la linea rossa rappresenta il primo, la verde il secondo. 9 la sinc o funzione di campionamento è definita come sin(x)/x 40 Come si vede, nel caso della seconda maschera l’andamento è più favorevole in bassa frequenza, dove esibisce un profilo più ripido, ed in alta, dove l’attenuazione è maggiore, ma nella banda intermedia presenta un andamento “passa-banda” inaccettabile nella maggior parte delle applicazioni. In tal senso un netto miglioramento è rappresentato dal filtro gaussiano, approssimazione discreta della funzione gaussiana bidimensionale a valor medio e coefficiente di correlazione nulli: − 1 Gσ ( x, y ) = e 2πσ 2 x2 + y2 2σ 2 (3.13) mediante matrici 3x3 di solito si presenta sotto due forme: Figura 3.4 Smoothing gaussiano ( σ 2 = 0.64 ). a varianza σ 2 = 0.64 e: 41 Figura 3.5 Smoothing gaussiano ( σ 2 = 0.36 ). a varianza σ 2 = 0.36 . Il dolce profilo di taglio spaziale della gaussiana si ripresenta inalterato nel dominio trasformato, infatti questa funzione gode della rara proprietà di essere la trasformata di sé stessa, quindi non presenta oscillazioni e le alte frequenze vengono attenuate in modo progressivo, pertanto molti autori considerano questo filtro come “ottimo” fra quelli lineari. L’ultimo filtro considerato in questa classe è il cosiddetto passabasso ideale, che a differenza dei precedenti viene definito direttamente nel dominio della frequenza ottenendo poi la matrice di rappresentazione della risposta impulsiva mediante antitraformata: −1 F H LP ( f ) = rect2ν ( f ) → hLP (t ) = 2ν ⋅ Sinc(2πνt ) (3.14) Per ottenere un taglio ripido in frequenza, la risposta impulsiva deve essere molto ampia nel dominio spaziale, pertanto questo filtro non è realizzabile con maschere di piccole dimensioni, per ottenere un’approssimazione sufficiente è necessaria una matrice almeno 10x10, perciò non è adatto ad un uso real-time. Una possibile rappresentazione mediante matrice 30x30: 42 Figura 3.6 Risposta impulsiva del passa-basso ideale, vista laterale. Figura 3.7 Risposta impulsiva del passa-basso ideale, vista isometrica. Veniamo quindi ad un confronto diretto fra i filtri illustrati sulla base della loro riposta in frequenza: 43 Figura 3.8: Risposta in frequenza dei filtri lineari: la linea nera rappresenta il passa-basso ideale, la blu il box-filter (1a maschera), la rossa il gaussiano con varianza 0.64, la verde il gaussiano con varianza 0.36 Come si vede, il profilo di gran lunga migliore è quello del passa-basso ideale, che comunque è stato inserito solo come riferimento, in quanto non è ovviamente comparabile un filtro di dimensioni 30x30 con operatori aventi dimensioni (e tempo di calcolo) inferiori di due ordini di grandezza; è invece interessante il confronto fra il box-filter e il gaussiano di varianza 0.64, infatti a dispetto dell’andamento oscillante che ne penalizza il comportamento in alta frequenza, il box-filter presenta un’attenuazione maggiore in quasi tutto lo spettro, perciò in molti contesti può risultare addirittura preferibile al gaussiano, là dove le risorse di calcolo non siano sufficienti ad un uso di maschere di dimensione maggiore a 3x3. 44 3.1.1.2 Filtri non lineari I filtri non lineari estendono il concetto di filtro permettendo di realizzare su ogni pixel dell’immagine operazioni più complesse della semplice combinazione lineare con i punti del proprio intorno; non essendo quindi più valida la definizione matematica di filtro come sistema lineare e permanente, vengono a cadere le proprietà per esso delineate nel paragrafo precedente, quindi non è più possibile caratterizzarne direttamente il comportamento in frequenza mediante trasformata di Fourier. Il problema principale con i filtri lineari è che l’attenuazione del rumore comporta sempre una perdita di risoluzione, per via del taglio delle componenti in alta frequenza; i filtri non lineari permettono invece di operare selettivamente in modo da attenuare il rumore preservando le strutture principali dell’immagine, quali i bordi, gli spigoli, la tessitura. Nell’ambito dell’analisi dei filtri non lineari, è opportuno distinguere il rumore in 3 tipologie: 1. rumore impulsivo, caratterizzato da bruschi picchi di intensità localizzati su aree di piccole dimensioni, di solito di 1 o 2 pixel; 2. rumore gaussiano, a valor medio nullo, coinvolge l’intera immagine ma nella maggior parte dei punti lo scostamento rispetto al segnale è piccolo; 3. rumore uniforme, a valor medio nullo, simile al gaussiano, ma la distribuzione di probabilità è uniforme in un certo intervallo ammissibile. Un buon miglioramento rispetto ai filtri lineari è ottenibile con il cosiddetto filtro KNN (K - Nearest Neighbours) [DR78]: • sia NxN la dimensione della maschera di convoluzione. • si scelgono i K pixel più simili fra loro all’interno della maschera e se ne fa la media. 45 • valori tipicamente utilizzati sono N=3 e K=6 (che è stato dimostrato essere l’ottimo per tale matrice) (3.14) Scartando dalla media i punti che si discostano di più dagli altri, questo filtro è più efficace nel rigettare il rumore impulsivo, oltre ad esibire comunque un buon comportamento in presenza degli altri tipi di rumore, tuttavia soffre comunque di una sensibile attenuazione di bordi e feature bidimensionali. Se invece di calcolare il valore medio dell’intorno (box-filter) si calcola il mediano, si ottiene un nuovo filtro non-lineare che da tale operatore statistico prende il nome: • si ordina l’intera maschera • si prende il valore nel mezzo (mediano) • se il numero di punti della maschera è pari, ci saranno due valori nel mezzo, di cui si fa la media algebrica (3.15) Questo operatore ha un’ottima risposta nei confronti del rumore impulsivo, perché essendo questo localizzato su punti isolati ed avendo deviazione significativa rispetto al suo intorno, facendo il sort si trova sempre in uno dei due estremi della maschera, quindi non viene mai selezionato come valore di uscita; anche il comportamento in presenza di rumore gaussiano e uniforme è buono. Un importante risultato ottenibile con questo filtro è la ridotta attenuazione delle caratteristiche unidimensionali dell’immagine, quali i bordi, grazie al fatto di non generare in uscita valori medi su un certo intorno, perciò nelle zone di alto contrasto fra regioni vengono scelti sempre punti appartenenti o ad una parte o all’altra; quanto detto è però valido solo per edge dritti, mentre i profili curvi e le caratteristiche bidimensionali come gli angoli vengono notevolmente degradati. Diverse varianti di questo algoritmo sono state proposte per migliorarne il comportamento nei confronti delle feature bidimensionali, in 46 particolare [Bro84] descrive il filtro mediano pesato, che attribuisce diversi pesi ai punti appartenenti alla maschera inserendo più volte nella lista da ordinare i valori più vicini al centro rispetto a quelli più lontani, traendone poi il mediano; il risultato è che la migliore preservazione degli angoli viene pagata in termini di minore riduzione del rumore. In questo senso un filtro piuttosto estremo è il cosiddetto conservative smoothing, il quale trova il minimo e il massimo nell’intorno di ciascun punto, e se il valore di quest’ultimo esce dall’intervallo così individuato, viene sostituito con il corrispondente estremo: se : x(u, v) ∈ [min H (u, v), max H (u, v)] x(u, v) y (u, v) = min H (u, v) se : x(u, v) < min H (u , v) max H (u, v) se : x(u, v) > max H (u, v) (3.16) Questo algoritmo praticamente non introduce nessuna sfocatura della struttura dell’immagine, ma l’unico rumore che riesce a filtrare è l’impulsivo localizzato su non più di 1 pixel: se tale ipotesi non è verificata, nell’intorno del picco di rumore è presente almeno un altro punto ad esso simile, che costituisce un massimo o un minimo della maschera, che determina così il passaggio dell’impulso di rumore in uscita. Se si fa la media algebrico fra i due estremi dell’intervallo così individuato e si prende il risultato come valore di uscita, si ottiene il filtro midrange [AF88]: y (u , v) = max H (u , v) + min H (u , v) 2 (3.17) Questo filtro non esibisce un buon comportamento dei riguardi della sfocatura di contorni e non filtra correttamente il rumore impulsivo, che tende a spandersi sui punti circostanti, mentre dà buoni risultati in presenza di rumore gaussiano e uniforme. 47 Quasi tutti i limiti dei filtri sopraelencati possono essere superati determinando dinamicamente vicini, come sottoinsieme per ogni pixel un opportuno intorno di della matrice di convoluzione, aventi caratteristiche ad esso omogenee, ed effettuando lo smoothing su tale intorno; un operatore ben rappresentativo di tale principio è il GIW (Gradient Inverse Weighted) [WVL81], che attribuisce ad ogni punto d’intorno un peso inversamente proporzionale ad una stima del gradiente fra esso e il punto centrale della maschera: ∑∑ x(u + i, v + j ) 1 max , x(u + i, v + j ) − x(u, v) 2 y (u, v) = 1 ∑∑ 1 i j max , x(u + i, v + j ) − x(u, v) 2 i j (3.18) Questo operatore deve essere applicato iterativamente, in genere 5 volte, ed ha il pregio rispetto ad altri metodi di questa famiglia di non richiedere alcun tipo di valore di soglia predeterminato per la messa a punto in relazione al rumore dell’immagine; il suo comportamento nei confronti di rumore gaussiano e uniforme è ottimo, pur preservando le strutture uni- e bi-dimensionali dell’immagine; il suo principale difetto è nella scarsa efficacia nei confronti del rumore impulsivo, limite che potrebbe essere mitigato escludendo dalle due sommatorie il valore centrale della maschera, ma ciò non fa parte dell’algoritmo originale. Tutti i migliori aspetti dei filtri non-lineari suesposti possono essere ritrovati nel S.U.S.A.N. Smoothing [SB95], di cui si parlerà in dettaglio nella sezione seguente. 3.1.2 Filtri di Edge Detection Riprendendo il concetto espresso dalla definizione (3.1), il modo più naturale per rilevare i bordi presenti in un’immagine è di individuare i 48 massimi del gradiente, che sono in corrispondenza con il punto di flesso della funzione di intensità luminosa, in cui è localizzato l’edge; grazie alla proprietà di derivazione (3.2.8) dell’operazione di convoluzione, e grazie al fatto che il risultato della convoluzione di un segnale s(t) con un impulso unitario δ 0 (t ) è il segnale stesso, si può calcolare il gradiente dell’immagine come: s( x, y ) ∗ δ 0 ( x, y ) = s ( x, y ) ∂ (s ( x, y ) ∗ δ ( x, y ) ) 0 ∂s( x, y ) ⇒ ∂(δ 0 ( x, y ) ) ∇ x s ( x, y ) = ∂ x ⇒ ∇ x s ( x, y ) = s ( x , y ) ∗ ∂x ∂x d ( f ( x) ∗ g ( x) ) dg ( x) (3.2.8) = f ( x) ∗ dx dx (3.19) e analogamente ∇ y s (u , v) ; grazie a questo risultato, possiamo precalcolare le due componenti del gradiente dell’impulso matematico discreto sotto forma di matrici, e farne la convoluzione con l’immagine. Prima di illustrare i più noti operatori utilizzati allo scopo, è opportuno definire dei criteri di valutazione della qualità di un edge-detector che permettano di confrontarli [Can86]: 1. Buon riconoscimento: il numero di falsi positivi e falsi negativi deve essere il più basso possibile; 2. Buona localizzazione: la posizione dell’edge rilevato deve essere la più vicina possibile all’edge reale; 3. Risposta singola a bordo singolo: deve essere individuato un solo edge per ogni bordo; 4. Efficienza computazionale: possibilmente veloce. Discretizzando l’algoritmo deve essere (3.20) direttamente il gradiente, considerato che nelle immagini la minima distanza è di un pixel, cioè dx = ∆x = 1; dy = ∆y = 1 : 49 s ( x + dx, y ) − s ( x, y ) = s ( x + 1, y ) − s ( x, y ) dx s ( x, y + dy ) − s ( x, y ) ∇ y s ( x, y ) = = s ( x, y + 1) − s ( x, y ) dy ∇ x s ( x, y ) = (3.21) possiamo così esprimere il gradiente mediante le due matrici: Figura 3.9 Maschere per il calcolo del gradiente (discreto) Ruotando le due maschere in modo che siano dirette una a 45°, l’altra a 135°, otteniamo l’operatore di Roberts [Rob65]: Figura 3.10 Maschere di Roberts Facendo uso di maschere di dimensione pari, gli edge rilevati da questo operatore dovrebbero essere collocati fra un pixel e l’altro, ma non essendo ciò ovviamente possibile, la localizzazione del bordo potrà avvenire su uno qualsiasi dei due fronti o addirittura su entrambi: infatti la convoluzione con operatori che esprimono il gradiente in sé non rileva gli edge, ma li esalta, dando comunque una risposta, pur piccola, anche nelle 50 zone in cui non è presente un bordo, pertanto sono detti filtri di edge enhancement; è necessario applicare un’operazione di thresholding per riconoscere come punti di bordo solo quelli aventi modulo del gradiente superiore ad una certa soglia, poiché tale soglia è in genere globale, è perfettamente possibile, anzi frequente, avere risposte localizzate su più pixel in relazione con un edge singolo, da cui la formulazione del terzo criterio di qualità delle (3.20). Applicata la convoluzione con le due maschere ortogonali, il modulo e la direzione del gradiente possono essere calcolati come: 2 ∇ = ∇ 245° + ∇135 ° ≅ ∇ 45° + ∇ 135° (3.22) ∇ 3 ∠∇ = arctan 45° − π ∇135° 4 L’operatore di Roberts ha come maggior pregio il ridotto costo computazionale, per via della dimensione compatta delle maschere; questa caratteristica ne costituisce però anche il punto debole, perché lo rende molto sensibile al rumore, pertanto è adatto ad essere usato solo su immagini generate al computer o filtrate preliminarmente con un operatore di riduzione del rumore. Fortunatamente, grazie alla proprietà (3.2.8), è possibile ottenere la riduzione del rumore e l’edge enhancement in una sola operazione di convoluzione, basta infatti calcolare un operatore che realizzi la convoluzione fra una funzione di smoothing lineare (gaussiana o box) e la funzione di derivazione; è così che è stato ottenuto l’operatore di Sobel [Sob90]: 51 Figura 3.11 Dalla convoluzione di un operatore differenziale ∇ con un filtro di smoothing gaussiano, si ottengono le due maschere di Sobel Questo metodo, grazie alla maggior dimensione della maschera e alla convoluzione con un filtro di smoothing gaussiano, risulta molto meno sensibile al rumore rispetto all’operatore di Roberts; grazie alla matrice di dimensione dispari, è possibile localizzare bordi che giacciano esattamente su un pixel, anche se spesso questo non accade a causa dell’effetto dello smoothing, che tagliando le componenti in alta frequenza allarga il profilo dei contorni, che possono così raggiungere uno spessore di diversi pixel; per converso, il costo computazionale risulta ovviamente più alto. Anche in questo caso, modulo e direzione del gradiente si possono calcolare come: ∇ = S x2 + S y2 ≅ S x + S y Sy ∠∇ = arctan Sx (3.23) Una variante basata sul box-filter al posto del gaussiano prende il nome di operatore di Prewitt [Pre70]: 52 Figura 3.12 Operatore di Prewitt, ottenuto mediante convoluzione del gradiente con un box-filter. Dallo studio sulla risposta in frequenza dei filtri gaussiano e box, si può comprendere facilmente come questo filtro sia teoricamente più rumoroso rispetto a Sobel, anche se in pratica il comportamento è molto simile, con l’unico svantaggio di non essere isotropo, in quanto la risposta agli edge diagonali di questa maschera risulta accentuata rispetto ai verticali e diagonali. Un’alternativa al calcolo dell’arcotangente per determinare la direzione dell’edge è l’uso di 8 maschere diverse, ciascuna con un risposta massima in una certa direzione, orientate in modo da dividere l’angolo giro in ottanti, quindi a 45° l’una dall’altra; i filtri che fanno uso di questo metodo prendono il nome di operatori a bussola, per la similitudine con tale strumento nell’indicare la direzione (N, NE, E, SE, S, SW, W, NW); un esempio basato sull’operatore di Sobel (a bussola): 53 Figura 3.13 Per ogni punto dell’immagine si applicano le 8 maschere, prendendo come risultato quella che dà la risposta maggiore. Il vantaggio, in termini di prestazioni, degli operatori a bussola rispetto al calcolo diretto dell’arcotangente è molto dipendente dall’ambiente di esecuzione, infatti sebbene le funzioni trigonometriche siano piuttosto lente, con il metodo a bussola è necessario effettuare 8 operazioni di convoluzione anziché due (nel caso del Sobel a bussola, bastano 4 operazioni perché si può sfruttare la simmetria delle maschere, ciò non è, ad esempio, vero nel caso dell’operatore di Kirsch10); dal punto di vista della qualità di risposta i risultati sono piuttosto simili sia in modulo che direzione, nonostante che, con l’arcotangente, la direzione non sia quantizzata in solo 8 angoli possibili. 10 Maschera di Kirsch a 0°: -3 -3 5 -3 0 5 -3 -3 5 54 Un modo alternativo per rilevare gli edge può essere individuato se si tiene conto che in corrispondenza con i massimi e i minimi del gradiente gli la derivata seconda (laplaciano) attraversa lo zero: Figura 3.14 Profilo di un bordo: funzione di intensità luminosa I(x) e sua derivata prima e seconda. Questo metodo è stato proposto in [MH80] nell’ambito dello studio del sistema visivo umano; in realtà i punti di attraversamento del laplaciano non sono in corrispondenza solo con gli edge, ma si verificano anche in zone uniformi dove l’intensità luminosa ha piccole fluttuazioni intorno al valor medio in conseguenza di rumore; il problema è che l’operazione di derivazione in sé amplifica il rumore, è ciò è ancora più accentuato nella derivata seconda; per converso, questo metodo ha due pregi importanti: • tende a formare contorni chiusi, cosa che avviene con difficoltà con i metodi basati sul gradiente, perché in tal caso non vengono considerati i massimi locali, ma assoluti; • lo spessore dei bordi così rilevati tipicamente è di un solo pixel. Discretizzando l’operatore laplaciano: 55 ∇ 2 f ( x, y ) = ∂ 2 f ( x, y ) ∂ 2 f ( x , y ) + ∂x 2 ∂y 2 (3.24) tenendo sempre conto che dx = ∆x = 1; dy = ∆y = 1 : ∂ 2 f ∂∇ x ∂[ f ( x + dx, y ) − f ( x, y )] = = ⇒ ∂x ∂x ∂x ∂[ f ( x + dx, y )] ∂[ f ( x, y )] ⇒ − ⇒ ∂x ∂x ⇒ f ( x + 1, y ) − f ( x, y ) − ( f ( x, y ) − f ( x − 1, y ) ) ⇒ ⇒ f ( x + 1, y ) − 2 f ( x, y ) + f ( x − 1, y ) (3.25) ∂2 f ⇒ f ( x + 1, y ) − 2 f ( x, y ) + f ( x − 1, y ) ∂x ∂2 f ⇒ f ( x, y + 1) − 2 f ( x, y ) + f ( x, y − 1) ∂y questo operatore non è direzionale e quindi si rappresenta con un’unica matrice isotropa: Figura 3.15 Laplaciano. Il principale problema del laplaciano è l’estrema sensibilità al rumore, di molto superiore anche a quella dell’operatore di Roberts, che lo rende praticamente inutilizzabile con immagini che non siano state prefiltrate o generate al computer; infatti Marr e Hildreth [MH80] hanno proposto un 56 operatore ottenuto dalla convoluzione di un filtro gaussiano di smoothing con il laplaciano, operatore che prende il nome di LoG (Laplacian of Gaussian): x 2 + y 2 − 2σ 2 − e LoG ( x, y ) = 2πσ 6 x2 + x2 2σ 2 avente andamento: Figura 3.16 LoG, vista isometrica. Una possibile rappresentazione con matrice 9x9, σ = 1.4 è: Figura 3.17 Log, matrice. 57 (3.26) Il principale problema di questo filtro è che al crescere della varianza del gaussiano si riduce il numero di falsi edge dovuti al rumore, ma gli edge diventano via via arrotondati e spessi e si perdono le strutture più fini dell’immagine; un altro limite è il costo dell’algoritmo, legato alla necessità di usare maschere di dimensione almeno 5x5 per ottenere un qualche effetto di riduzione del rumore, infatti per valori di σ ≤ 0.5 , come in una maschera 3x3, la gaussiana discretizzata tende all’impulso, perciò si ottiene un filtro identico al laplaciano puro. Due varianti approssimate sono il DoG (Difference of Gaussians) ottenuto facendo la differenza fra due gaussiane di varianza diversa, e il DoB (Difference of Boxes) dove la differenza viene fatta fra due box-filter di ampiezza diversa. In [Can83] Canny ha sintetizzato i risultati precedenti formulando una funzione di errore complessivo in base ai primi 3 criteri della (3.20) da minimizzare mediante tecniche di ottimizzazione per ottenere un operatore lineare da convolvere con l’immagine, il risultato è stato (come prevedibile) una approssimazione del gradiente di una gaussiana; l’algoritmo complessivo, che prende il nome dal suo autore, consta di 3 fasi: • edge enhancement: convoluzione con operatore che realizzi il gradiente di una gaussiana (Sobel, o gaussian-smoothing + gradiente come filtri separati) per rilevare modulo e direzione e direzione della normale (quantizzata in angoli di 45°, come negli edge-detector a bussola) dei punti di bordo candidati; • non-maxima suppression: sulla matrice dei moduli del gradiente, per ogni pixel avente valore non nullo se ne legge la direzione nella matrice apposita, si considerano il pixel che precede e quello che segue (nella stessa direzione), se almeno uno dei due ha modulo maggiore del pixel in esame, che quindi non è il massimo lungo il bordo, questo viene soppresso, settandone il modulo a zero; 58 • hysteresis thresh: si stabiliscono due valori di threshold, th e tl , per ogni punto avente modulo superiore a th , si percorre il bordo così individuato secondo la direzione tangente ad esso in entrambi sensi, aggiungendo punti all’immagine finale finché essi hanno modulo maggiore di tl . Il vantaggio del thresholding con isteresi è che usando una soglia singola si rischia di settarla troppo alta, ottenendo una buona reiezione del rumore ma bordi frammentati e discontinui, e il viceversa è vero se la soglia è troppo bassa; grazie all’isteresi, la soglia superiore serve a localizzare solo le strutture significative dell’immagine, mentre quella inferiore serve a connetterle; il problema principale dell’algoritmo di Canny è il tempo di calcolo elevato dovuto soprattutto a quest’ultima fase; inoltre la connettività nelle giunzioni fra più di due regioni (ad ‘Y’, ‘X’ o ‘T’) non è di solito rispettata. Un metodo completamente differente per risolvere il problema della edge-detection verrà esposto nella sezione seguente. 3.1.3 S.U.S.A.N. Il S.U.S.A.N. è un nuovo approccio non lineare al processamento digitale delle immagini a basso livello che è stato applicato, con risultati di assoluta eccellenza sia in termini qualitativi che di costo computazionale, alla riduzione del rumore e all’estrazione di caratteristiche uni- e bi-dimensionali quali edge e corner [SB95]. Il principio su cui si basano questi algoritmi è nella costruzione, all’interno di una maschera circolare di dimensione fissata il cui centro viene detto nucleo, di una sottoregione di punti aventi funzione di intensità molto simile a quella del nucleo al punto da poter essere ad esso assimilati (U.S.A.N. è un acronimo che sta per Univalue Segment Assimilating Nucleus) : 59 Figura 3.18 SUSAN: applicazione delle maschere su un’immagine caratterizzata da un oggetto scuro su uno sfondo chiaro. Figura 3.19 SUSAN: l’area evidenziata in rosso rappresenta l’USAN associato a ciascun nucleo. Per ogni punto, si applica un’apposita funzione di correlazione alla differenza di intensità fra il nucleo e i punti appartenenti alla maschera 60 circolare: l’USAN è composto da tutti i punti appartenenti alla maschera aventi correlazione non nulla con il nucleo. 3.1.3.1 S.U.S.A.N. Smoothing Nella sezione sui filtri di smoothing lineari, si è visto come il principale limite di questi sia l’attenuazione delle caratteristiche geometriche delle immagini, che risultano sfumate e sfocate al punto da non poter più essere riconosciute come edge o corner; si è altresì accennato come filtri non lineari quali il GIW, mediante opportuna selezione dei punti di intorno su cui fare lo smoothing, permettano di superare tale limite: il motivo è che, applicando una maschera di convoluzione isotropa (filtri lineari) su un punto di bordo (figg. 3.18-3.19 punto c) o corner (punto b) viene effettuata una media pesata fra tutti i punti dell’intorno, che dà come risultato un valore di grigio intermedio fra essi, riducendo l’ampiezza del gradiente; se invece si riesce ad individuare una porzione di maschera avente caratteristiche simili al punto in esame su cui effettuare la media, il valore generato sarà anch’esso omologo a tale regione, preservando l’ampio gradiente rispetto all’altro fronte del bordo. A differenza del GIW, che usa l’inverso del gradiente come peso da assegnare ai punti della maschera per individuare la zona su cui fare lo smoothing, il S.U.S.A.N. (Smooth over U.S.A.N.) usa una funzione di correlazione (nel dominio dell’intensità luminosa) gaussiana: c ( p, p 0 ) = e dove ( I ( p ) − I ( p0 ) − T 2 (3.27) p è un pixel qualsiasi della maschera, p0 è il nucleo, I(p) rappresenta l’intensità luminosa, T è un parametro del filtro (threshold della luminosità) che controlla la scala dello smoothing: valori ridotti di T comportano una maggiore selettività nella scelta dei punti da includere nell’USAN, cioè soltanto valori molto vicini (nel dominio della luminosità) al nucleo vengono considerati; al crescere di T, l’USAN tende verso l’intera 61 maschera e il comportamento del filtro verso il corrispondente operatore lineare; ad ogni modo, per filtrare correttamente la maggior parte delle immagini la scelta di T non è critica. Anche nel dominio spaziale i pesi assegnati seguono il profilo gaussiano, per il favorevole andamento in frequenza evidenziato in precedenza, la cui varianza σ 2 controlla quindi lo smoothing spaziale; l’espressione del filtro complessivo è quindi: S ( x, y ) = ∑ I ( x + i, y + j ) ⋅ e − x2 + y2 2σ 2 − ( I ( x + i , y + j ) − I ( x , y ) )2 T2 ( i , j ) ≠ ( 0, 0 ) ∑e − x2 + y2 2σ 2 − ( I ( x + i , y + j ) − I ( x , y ) )2 (3.28) T2 (i , j )≠ ( 0,0 ) Dalla (3.28) si nota subito come, a differenza del filtro GIW, il nucleo della maschera sia escluso dalla sommatoria: nel caso in cui il denominatore della funzione sia 0, caso che si verifica appunto quando l’intensità luminosa del nucleo è considerevolmente superiore a quella di tutto il suo intorno (rumore impulsivo), si calcola il mediano degli 8 vicini del nucleo (come una maschera 3x3). Il filtro così ottenuto integra i migliori aspetti di tutti gli operatori visti sinora, coniugando l’ottimo comportamento del GIW nei confronti del rumore gaussiano e uniforme, ma senza necessità di iterazione, con la risposta del mediano al rumore impulsivo; i bordi e le feature bidimensionali vengono non solo preservati, ma il contrasto ne esce addirittura aumentato: supponiamo ad esempio di essere in presenza di un punto grigio nella zona di transizione fra un’area bianca ed una nera, se questo punto risulta sufficientemente vicino ad una delle due, verrà filtrato solo con punti appartenenti ad essa, risultandone così uniformato; se ciò non avviene, si tratta di un punto isolato a cui viene applicato l’operatore mediano, quindi verrà sostituito con un punto appartenente o ad un fronte o all’altro. 62 3.1.3.2 S.U.S.A.N. Edge Detector Il principio dell’USAN può essere anche utilizzato per individuare gli edge presenti in un’immagine senza far ricorso ad alcun tipo di operatore differenziale: riprendendo in esame le figure 3.18 e 3.19, si nota come nei punti all’interno di aree omogenee come (a) e (d) l’area dell’USAN sia massima, pari o prossima a quella dell’intera maschera, mentre nei punti di bordo (c) sia circa la metà e nei corner (b) sia addirittura solo un quarto; è possibile quindi individuare una nuova definizione di bordo e un nuovo criterio di riconoscimento che non richiede l’esecuzione di alcuna operazione differenziale (che intrinsecamente amplifica il rumore). Figura 3.20 Risposta in area dell’USAN in corrispondenza di una giunzione a Y fra 3 aree omogenee. 63 La funzione di correlazione per determinare l’area dell’USAN varia rispetto al caso del filtro di smoothing, perché qui è utilizzata per valutare quali pixel sono dentro o fuori l’USAN in modo binario: 1 se : I ( p) − I ( p0 ) ≤ T c ( p, p 0 ) = altrimenti 0 (3.29.1) Nonostante tale funzione dia risultati molto buoni, è stata dimostrata l’ottimalità teorica di una variante dal profilo un po’ più morbido, per la maggiore stabilità nei confronti di punti aventi intensità in prossimità del threshold T: c ( p, p 0 ) = e I ( p ) − I ( p0 ) − T 6 (3.29.2) Figura 3.21 SUSAN edge detector, funzioni di correlazione: (a) funzione (3.29.1), (b) funzione (3.29.2). In entrambi casi, il parametro T (threshold di intensità luminosa) determina il contrasto minimo delle feature che verranno riconosciute e il massimo del rumore che verrà ignorato. Per determinare la risposta complessiva del filtro, si calcola quindi l’area dell’USAN: 64 n( p 0 ) = ∑ c( p, p 0 ) (3.30) p Come si vede, non è stato attribuito alcun peso “spaziale” ai pixel della maschera, ad esempio gaussiano, anche se questa eventualità è stata considerata, perché in questo filtro non produce nessun tipo di miglioramento, in quanto a differenza degli operatori visti in precedenza, qui non è necessario alcun tipo di smoothing per ridurre il rumore, perché non viene effettuata nessuna derivazione, anzi il criterio effettua un’operazione di integrazione, che in sé ha un effetto “passa-basso”. A questo punto è possibile calcolare la risposta del filtro come: g − n( p 0 ) se : n( p 0 ) < g R( p0 ) = 0 altrimenti dove g prende il nome di threshold geometrico ed è pari a (3.31) 3 n max : in 4 assenza di rumore, non ci sarebbe alcun bisogno di un threshold geometrico, basterebbe quindi porlo uguale a nmax per ottenere la risposta, tuttavia esso è stato determinato come ottimo dall’analisi del valore atteso della risposta in presenza di puro rumore; d’altronde non c’è alcun rischio che esso sopprima edge reali, infatti, è stato illustrato come in tali casi l’area dell’USAN sia minore o uguale a nmax su almeno uno dei fronti. 2 Nel caso si voglia applicare un algoritmo di non-maxima suppression, o qualora gli stadi di elaborazione successivi richiedano la direzione della normale all’edge, questa può essere calcolata come segue: 65 Figura 3.22 SUSAN edge detector: determinazione della direzione dell’edge. • Se il numero di pixel che compongono l’USAN è maggiore del diametro della maschera, l’edge si localizza fra un pixel e l’altro (casi (a) e (b) in figura); basta allora calcolarne il baricentro come: G ( p0 ) = ∑p 0 p ⋅ c ( p, p 0 ) p c ( p, p 0 ) e ricavare la direzione della normale all’edge come vettore congiungente il baricentro con il nucleo; • Altrimenti il baricentro cade all’interno del nucleo (caso (c) in figura) e per determinare la direzione del bordo bisogna individuare il più 66 lungo asse di simmetria dell’USAN: ( x − x 0 ) 2 = ∑ ( x − x 0 ) 2 ⋅ c ( p, p 0 ) p ( y − y 0 ) 2 = ∑ ( y − y 0 ) 2 ⋅ c ( p, p 0 ) p ( x − x 0 ) ⋅ ( y − y 0 ) = ∑ ( x − x 0 ) ⋅ ( y − y 0 ) ⋅ c ( p, p 0 ) p dall’arcotangente del rapporto fra il secondo e il primo di tali momenti si ottiene la direzione del bordo, dal terzo si ottiene il segno in caso di edge diagonale. Dal confronto fra il SUSAN edge detector e gli operatori differenziali, è emersa una migliore localizzazione dei bordi, anche in presenza di contorni sfumati (es. caso (c) fig. 3.22) , in cui la maschera risulta ancora più sottile, quindi la risposta è addirittura maggiore che nei contorni netti (in [SM95] è stata dimostrata la coincidenza teorica fra la posizione spaziale degli edge rilevati da questo algoritmo e il punto di flesso dei bordi, dove il gradiente è massimo e il laplaciano attraversa lo zero), un rapporto segnale rumore molto più favorevole, una migliore connettività alle giunzioni. 3.2 Riconoscimento di forme Il risultato della edge detection è un’immagine binaria contenente i punti che appartengono ai contorni degli oggetti; perché tale informazione possa essere utilizzata per estrarre conoscenza sulla scena ivi rappresentata è necessario individuare modelli matematici che possano essere messi in corrispondenza con i punti così ottenuti. Il problema del riconoscimento degli oggetti può essere così formulato [RN98]: • sia data una scena consistente in un insieme di oggetti presi da una collezione i cui modelli O1, O2, …, On siano noti a priori; 67 • sia nota un’immagine della scena presa da un punto di vista non noto; si tratta di determinare dall’immagine quali oggetti sono presenti e la loro posizione e orientazione rispetto all’osservatore. A partire da un insieme di punti di bordo ottenuti mediante edge detection, si può determinare la funzione a cui appartengono mediante: [PPR01] • interpolazione polinomiale di grado prefissato, scelto un valore massimo dell’errore di interpolazione come distanza del singolo punto dalla primitiva che congiunge gli altri, qualora un punto superi tale soglia si suddivide la curva in due tratti in esso terminanti e si prosegue il procedimento; • fitting di coniche, in cui occorre minimizzare la somma dei quadrati delle distanze di ogni punto dalla conica rappresentata dal vettore dei suoi parametri; • rappresentazione con curve parametriche (B-Spline, NURBS), dove i punti di edge vengono usati come nodi di controllo della curva; • template matching tramite riconoscimento di invarianti proiettivi, che sono grandezze che si mantengono costanti attraverso cambi di base (rototraslazioni) e proiezioni prospettiche, quali la cross-ratio fra 4 punti (A, B, C, D) appartenenti ad una linea: AC ⋅ BC ; che pertanto possono essere usate per indicizzare una AD ⋅ BD ricerca in un insieme di modelli caratterizzati da diversi valori di tali invarianti; • allineamento con modelli tridimensionali (cilindri generalizzati, superquadriche, Geons), basato sulla scomposizione dell’oggetto in una combinazione di primitive geometriche elementari sottoposte ad una 68 serie di trasformazioni (rotazioni, traslazioni, scalature) con cui si cerca di massimizzare una funzione di sovrapponibilità fra il modello così ottenuto e le caratteristiche estratte dall’immagine. 3.2.1 Trasformata di Hough La trasformata di Hough è uno strumento che consente, a partire da una funzione implicita che rappresenta un modello di cui si vuole ritrovare la corrispondenza in un insieme di punti rilevati sensorialmente, di determinare il vettore dei parametri secondo cui tale funzione si allinea con il massimo numero di punti dell’insieme di ingresso. Sia dunque f una generica funzione definita mediante l’equazione implicita [Gris01]: f ( xˆ, pˆ ) = 0 (3.32) dove xˆ ∈ R n è il vettore delle variabili, pˆ ∈ R m è il vettore dei parametri dell’equazione; dato un insieme di punti S = {xi , i ∈ 1Κ k } appartenenti ad un’immagine, ottenuti ad esempio mediante edge detection, risolvendo il sistema: f ( x1 , p) = 0 f ( x2 , p) = 0 (3.33) Μ f ( xm , p) = 0 con xi distinti, si ottiene una soluzione ~ p che rappresenta la funzione del fascio che passa per tutti i punti suddetti. Sia allora: 1 h xi ( p ) = 0 f ( xi , p ) = 0 altrimenti (3.34) 69 che indica se la funzione contraddistinta dal vettore di parametri p passa per il punto xi; possiamo così definire la trasformata di Hough dell’insieme S di punti considerato come: k HT S ( p ) = ∑ h xi ( p ) (3.35) i =1 Come si vede dalla formula, la trasformata di Hough è un’equazione di voto, cioè esprime il numero di elementi dell’insieme di ingresso che “sono in accordo” (cioè sono allineati) con la funzione rappresentata dal vettore di parametri p; dato quindi un insieme di punti rilevati sensorialmente e supponendo nota la funzione che si vuole ricercare, basta determinare il massimo della funzione di Hough sull’intero spazio dei parametri per individuare il modello che vi si adatta meglio; questa caratteristica è molto importante perché, posto che l’assunzione sulla funzione impiegata sia esatta, il modello così ottenuto è molto robusto rispetto al rumore in quanto è il più probabile, è ottenuto su base globale, non locale, e tutti i punti che non si allineano non danno in effetti alcun contributo al risultato; per gli stessi motivi, è anche robusto rispetto alle occlusioni, purché ovviamente siano parziali. A livello pratico, lo spazio dei parametri deve essere discretizzato, altrimenti la ricerca al suo interno sarebbe ovviamente infinita, con un numero di valori dipendente dalla accuratezza desiderata; anche così comunque, emerge chiaramente il principale limite di questa tecnica, ovvero il rapido incremento del tempo di ricerca al crescere del numero di parametri: se p ∈ R n e ciascuna dimensione viene discretizzata a k elementi, il costo di visita si può esprimere come O(k n ) . 3.2.1.1 Trasformata di Hough per le linee L’equazione della retta in forma implicita ha 3 parametri: ax + by + c = 0 (3.36.1) 70 tuttavia, ponendola in forma esplicita se ne hanno solo 2: y = mx + q (3.36.2) Il problema di tale formula è che non si possono esprimere rette parallele all’asse delle y (x=q); comunque in entrambi i casi, almeno un parametro può assumere valori arbitrariamente elevati, e questo crea problemi nella rappresentazione discretizzata; è però possibile superare tali limiti con rappresentazione alternativa: ρ = x cos θ + y sin θ (3.36.3) dove θ rappresenta l’angolo formato dal segmento passante per l’origine perpendicolare alla retta, e ρ ne rappresenta la lunghezza: Figura 3.23 Rappresentazione della retta in coordinate polari. ad ogni punto (x,y) nell’immagine corrisponde quindi una sinusoide nel dominio trasformato ( ρ ,θ ) : 71 Figura 3.24 Hough: rappresentazione nello spazio dei parametri di un punto in coordinate immagine. Il pregio di questa trasformazione è la possibilità di stabilire facilmente un limite superiore per entrambi i parametri, infatti θ ∈ [0,2π ] per la periodicità della sinusoide, ρ ∈ [0, M 2 + N 2 ] se MxN sono le dimensioni dell’immagine originaria; a questo punto basta determinare un passo di quantizzazione opportuno per ciascun parametro, ottenendo gli intervalli di campionamento: δρ = M2 + N2 R δθ = 2π T (3.37) L’algoritmo complessivo prevede quindi la creazione di una matrice dei parametri di dimensione P(R,T), dove ogni cella è un contatore del numero di punti le cui trasformate ivi si intersecano, inizializzata a zero; sia I(x,y) l’immagine binaria contenente i punti di edge: • Per ogni punto appartenente a un edge nell’immagine originale: ∀(i, j ) | I (i, j ) = 1; ∀h = 1Κ T ⇒ ρ = i cos(hδ θ ) + j sin(hδ θ ) , calcola l’indice k = si ρ e si incrementa di 1 il valore della matrice δρ nella posizione corrispondente P (h, k ) = P (h, k ) + 1 ; • Si individuano i massimi locali al di sopra di una soglia opportunamente scelta. 72 Capitolo 4 Progetto del sistema A fronte della grande varietà di tecniche e algoritmi di visione disponibili in letteratura, il progetto di un sistema completo non può prescindere da un’attenta analisi dei vincoli legati all’ambiente, infatti una soluzione ottima “universale”, paragonabile ai sistemi biologici, è ancora molto al di là da venire. Un grosso spartiacque in tal senso è rappresentato dalla necessità o meno di ottenere informazioni in tempo reale (real-time), come è ad esempio il caso per agenti autonomi in un ambiente sconosciuto e potenzialmente ostile; viceversa, l’estrazione di informazioni da immagini al fine della costituzione di basi di conoscenza ha comunque dei limiti temporali ma non altrettanto stringenti; il risultato è che per sistemi in tempo reale sono accettabili soltanto algoritmi aventi tempo di calcolo lineare, ma ciò è condizione solo necessaria, non sufficiente, in quanto la potenza di calcolo non è comunque scalabile a piacere, e anche l’occupazione di memoria può essere vincolante. 4.1 Vincoli legati all’ambiente L’oggetto di questa ricerca verte sulla realizzazione di un sistema in tempo reale per l’acquisizione di informazioni visive da parte di un agente autonomo operante in un ambiente dinamico competitivo, cioè caratterizzato da variazioni dello stato nel tempo e dalla presenza di agenti concorrenti; in particolare, lo studio è stato focalizzato sull’ambiente RoboCup Legged, dove due squadre di robot autonomi tetrapodi si affrontano in una partita di calcio. 73 Le caratteristiche dell’ambiente RoboCup sono: • Il dominio è dinamico, le posizioni dei robot e della palla variano nel tempo, in particolare la palla può raggiungere velocità di spostamento dell’ordine di alcuni metri al secondo; • L’ambiente è competitivo, due squadre concorrono per vincere la partita; • Ciascun oggetto è univocamente contraddistinto da un colore uniforme, generalmente brillante; la palla è arancione, il campo verde con linee bianche, le porte sono di colore diverso, per facilitare l’orientamento dei robot, le due squadre indossano divise di due colori prestabiliti, possono essere presenti dei segnalatori (landmark) di forma cilindrica e colore univoco, per agevolare l’autolocalizzazione dell’agente; • Si gioca in interni, con illuminazione artificiale standardizzata; • Si fa uso di hardware comune, di facile reperibilità; • I robot devono essere autonomi anche dal punto di vista energetico. In aggiunta, la Sony Legged League presenta le seguenti peculiarità: • Tutte le elaborazioni devono essere svolte a bordo del robot; • L’hardware, uguale per tutte le squadre, è imposto dal regolamento della lega, si tratta del robot Sony AIBO ERS-210; • Il robot è tetrapode, deambula su 4 zampe; la telecamera è montata sulla testa, con 3 gradi di libertà di rotazione. In forza di tali caratteristiche, è necessario progettare dei sistemi real- time che riescano a processare via software un numero di immagini al secondo sufficiente al tracciamento di oggetti veloci (la palla), quindi il tempo medio di elaborazione deve essere dell’ordine dei millisecondi, facendo uso di hardware non specializzato e che rispetti i vincoli energetici 74 imposti dal fatto di essere autoalimentati; d’altro canto, l’ambiente è strutturato in modo da permettere di identificare univocamente un oggetto in base al solo colore, e l’illuminazione è ragionevolmente standardizzata; per tutte queste ragioni, la tecnica di estrazione di caratteristiche universalmente utilizzata è la segmentazione mediante thresholding statico nelle sue varie forme. 4.1.1 L’AIBO ERS-210 – Sistema di elaborazione Il sistema elaborativo dell’AIBO ERS-210 è costituito da un microprocessore embedded11 a 64 bit appartenente alla famiglia MIPS R4000 prodotto da Quantum Effect Devices [AIBOnet], un coprocessore dedicato in grado di effettuare la segmentazione mediante thresholding statico di immagini alla risoluzione di 88x77 pixel, 32Mbyte di memoria centrale, un’interfaccia verso memorie non volatili in formato Sony Memory Stick da 16Mbyte come dispositivo di memorizzazione permanente; sono attualmente disponibili due versioni, l’ERS-210 dotato di CPU a 200MHz, e l’ERS-210A a frequenza di clock doppia (400MHz). Le caratteristiche principali della famiglia di processori MIPS R4000 sono [Hei94]: • set di istruzioni RISC12 a 32 - 64 bit: tutte le istruzioni sono lunghe 32 bit, svolgono compiti semplici ma in modo molto efficiente, possono operare su operandi a 32 o 64 bit a seconda della modalità di funzionamento del processore; • 32 registri di uso generale a 64 bit: grazie all’abbondanza di registri, è possibile srotolare i cicli (“loop unrolling”) e conservare sottoespressioni per velocizzare l’esecuzione di formule complesse; 11 Con il termine “embedded” si indicano dispositivi a basso consumo energetico e ridotta emissione di calore per l’uso in apparecchiature portatili altamente integrate. 12 Per i concetti relativi all’analisi di architetture di microprocessori, si vedano [HP95] e [HP96]. 75 • architettura scalare, superpipelined ad 8 stadi: va in issue13 una sola istruzione per volta, tuttavia nella maggior parte dei casi le istruzioni sono sovrapponibili nell’esecuzione, approssimando il throughput di un’istruzione per clock di pipeline; la pipeline interna funziona ad una frequenza doppia (“double pumped”) rispetto al master clock14, per un picco di 400 milioni di istruzioni al secondo a 200MHz; • coprocessore floating-point integrato: la CPU contiene un’unità di elaborazione per calcoli in virgola mobile conforme allo standard ANSI/IEEE 754-1985, dotata di 32 registri propri a 64 bit, pipelined, e capace di lavorare in parallelo rispetto all’unità centrale; • 16 Kbyte di cache di primo livello integrata: suddivisa in 8Kbyte cache istruzioni, 8Kbyte cache dati, ciascuna dotata di un proprio bus a 64 bit ed accessibile due volte per ciclo di master clock; controllore per eventuale cache di secondo livello integrato; • unità di gestione della memoria (MMU) integrata: supportati in modo nativo modalità di indirizzamento virtuale e reale; in modalità virtuale a 32 bit sono indirizzabili 2Gbyte per processo utente e altrettanti per il server, che in modalità 64 bit arrivano ad 1 Terabyte. Rispetto alle specifiche comuni al resto della famiglia, il processore utilizzato sull’AIBO si segnala per l’assenza di cache di secondo livello e la ridotta ampiezza del bus della memoria, limitato a 32 bit e operante a 100MHz, per un throughput di picco di 400Mbyte al secondo; ciò ha avuto un decisivo impatto sulle scelte progettuali del software di visione, in quanto principale fattore limitante in un’architettura di per sé altrimenti efficiente. L’ambiente di esecuzione è corredato da OPEN-R, un sistema operativo in tempo reale orientato agli oggetti proprietario della Sony: per 13 Stadio di elaborazione in cui un’istruzione entra nella pipeline. 14 Il master clock è il segnale generale su cui sono sincronizzate tutte le operazioni della CPU; ciò non impedisce che specifici percorsi operino ad una frequenza sua multipla o sottomultipla. 76 tali caratteristiche, l’allocazione del tempo di CPU e la sincronizzazione fra i processi sono interamente sotto il controllo del sistema operativo, lasciando all’utente la sola possibilità di selezione delle priorità di esecuzione dei propri oggetti. 4.1.2 L’AIBO ERS-210 – Telecamera Il cuore del sistema di visione è ovviamente la telecamera, che nell’AIBO è montata sulla testa del robot, capace di muoversi con 3 gradi di libertà: sia XYZ una terna di riferimento cartesiana destra posta alla base del collo del robot, con l’asse X diretto secondo la lunghezza del corpo, l’asse Y secondo la larghezza e l’asse Z secondo l’altezza; la testa può ruotare attorno all’asse Z (pan), all’asse Y (tilt) e all’asse X (roll). Figura 4.1 Gradi di libertà di rotazione della testa del robot. I parametri fisici della telecamera sono: 77 • dimensione del sensore: 1/6 di pollice • angolo di vista orizzontale: 57.6° • angolo di vista verticale: 47.8° • distanza focale: 2.18mm • velocità dell’otturatore selezionabile: bassa alta 1 1 sec; media sec, 50 100 1 sec. 200 Il dispositivo di conversione analogico-digitale è costituito da un sensore CMOS da 100Kpixel a basso consumo; le immagini vengono catturate ad una risoluzione massima di 176x144 pixel, convertite in hardware nello spazio cromatico YUV, ad una frequenza costante di 25 fotogrammi al secondo. Il principale problema di cui tenere conto in un sistema di visione basato su questo dispositivo è che, oltre alla ridotta risoluzione e ad una pronunciata rumorosità uniforme, questo manifesta una serie di difetti: • nelle regioni di forte contrasto di luminosità, il colore “spande” (color bleeding) • solo il centro dell’immagine è messo a fuoco, i contorni appaiono sfumati; • la sensibilità alla luce non è uniforme, le aree periferiche appaiono scure; 78 Figura 4.2 Sensore CMOS: nelle due aree evidenziate al centro e a destra dell’immagine, appaiono colori puri inesistenti in realtà (il rosa sul bordo della palla arancio, il blu sul contorno del robot rosso); nell’angolo in basso a sinistra si nota la non uniformità di messa a fuoco e sensibilità alla luce fra centro e bordi dell’immagine. • l’immagine acquisita è molto sensibile a variazioni anche modeste dell’illuminazione della scena, per una ridotta sensibilità luminosa del sensore, un gamma15 troppo elevato e l’assenza di un diaframma, per cui le immagini tendono ad apparire sovraesposte o sottoesposte; gli oggetti chiari saturano verso il bianco, quelli scuri verso il nero; 15 Il sistema visivo umano ha una percezione dell’intensità luminosa logaritmica, non lineare, pertanto le videocamere, per emularlo, usano una scala di luminosità del tipo: g = f γ dove g rappresenta il livello di grigio nell’immagine acquisita, f l’intensità luminosa reale, γ è un valore minore di 1, di solito pari a 0.4 [Ard00]. 79 Figura 4.3 Sensore CMOS: l’immagine appare sottoesposta, al punto da non poter distinguere il colore della livrea del robot nel riquadro. • la sensibilità cromatica è molto limitata, infatti anche le regioni che contraddistinguono i colori più saturi si trovano vicine fra loro e alla zona del bianco, concentrate in un’area non maggiore di dell’intero piano UV; 80 1 4 Figura 4.4 Sensore CMOS: rappresentazione del piano cromatico UV, la stella bianca indica la zona di colore neutro (grigio), i punti colorati la presenza di pixel nell’immagine aventi il colore corrispondente; come si può notare, lo spettro delle immagini catturate da questo sensore è tutto concentrato in una porzione piccola del piano cromatico, indice di scarsa sensibilità. 81 Figura 4.5 Sensore CMOS: nonostante l’immagine sia sottoesposta, un oggetto lucido può comunque saturare verso il bianco. • quando la testa o il corpo del robot non sono fermi, le immagini appaiono affette da sfocatura di movimento (motion blur), in particolare quando si usa una velocità dell’otturatore media o bassa; Figura 4.6 Sensore CMOS, sfocatura di movimento: nel riquadro sono presenti due palle e un marcatore rosa-azzurro, i cui contorni sono difficilmente rilevabili. 82 • utilizzando l’otturatore alla massima velocità, compaiono nell’immagine bande orizzontali di luminosità e colore diverso, dovute ad una frequenza di risposta del sensore più bassa della frequenza di otturazione; • è presente una pronunciata distorsione radiale, per cui le linee tendono ad incurvarsi in prossimità dei margini dell’immagine. Figura 4.7 Sensore CMOS, a sinistra: otturatore alla massima velocità, nella zona evidenziata si notano bande orizzontali gialle e azzurre sovrapposte all’immagine in una regione altrimenti uniforme; a desta: distorsione radiale, le linee diritte della scacchiera tendono a curvarsi ai margini dell’immagine. 4.2 Segmentazione Avendo analizzato le caratteristiche dell’ambiente di esecuzione e della telecamera, appare chiaro come sia necessario conciliare le esigenze contrastanti di correzione dei difetti della telecamera e di efficienza dell’algoritmo, bisogna infatti processare immagini ad una frequenza superiore a 10 fotogrammi al secondo, avendo a disposizione una potenza di calcolo limitata e da condividere con altri processi aventi tempi di risposta critici (ad esempio il sistema di controllo della locomozione del robot). 83 Sinora l’aspetto prestazionale ha avuto il sopravvento, inducendo tutte le squadre a usare una qualche variante di thresholding statico, sotto forma di algoritmo software o facendo uso dell’hardware dedicato di cui è dotato il robot, mentre la ricerca si è concentrata su metodi sofisticati di costruzione delle mappe di classificazione che permettessero di minimizzare il numero di errori di segmentazione (si vedano in proposito [VLVRSC02], [GT02], e [CSVYHPS01]). Lo svantaggio di tale approccio è che il processo di filtraggio dell’informazione significativa rispetto al rumore viene fatto interamente “off-line”, sotto forma di tabelle statiche precalcolate su un insieme di esempi, perciò bastano spesso modeste variazioni delle condizioni di illuminazione per far aumentare sensibilmente il numero di pixel classificati in modo scorretto; là dove sia possibile utilizzare telecamere di buona qualità e grazie anche al controllo sull’illuminazione nell’ambiente RoboCup, ciò non costituisce un grosso problema, ma lo stesso non può dirsi nel caso dell’AIBO ERS-210. In questa sezione verrà innanzitutto descritta una tecnica di Region Growing che, sebbene mostrasse promettenti risultati qualitativi, non ha permesso di ottenere prestazioni sufficienti per un uso in tempo reale; verrà poi prodotto il sistema definitivo di segmentazione attraverso un processo graduale a partire da un modello di immagine idealizzata; in seguito, verrà approfondito il problema del filtraggio e la tecnica di classificazione. 4.2.1 Region Growing Volendo tentare di risolvere il problema alla radice, si può osservare che tutti gli oggetti presenti nel dominio RoboCup godono di una proprietà notevole, ovvero di essere colori saturi (ad eccezione ovviamente del bianco), cioè di trovarsi, dal punto di vista cromatico, in prossimità dei vertici della piramide che rappresenta lo spazio HSV, dove si trovano i colori primari, che sono rosso, blu, verde, giallo, ciano e magenta. 84 Effettuando una conversione dallo spazio cromatico nativo YUV all’HSV, si selezionano tutti i punti aventi valore della componente di saturazione al di sopra di una soglia, opportunamente scelta in modo da non rilevare oggetti estranei al dominio; in generale questi rappresentano solo piccole porzioni degli oggetti presenti nella scena, ma possono essere utilizzati come semi da cui far partire un processo di region growing. Nella pratica, ci sono diversi problemi da risolvere, infatti il concetto quantitativo di saturazione del colore in un’immagine non è così assoluto come lo è il corrispondente concetto qualitativo dato dal senso comune, infatti al variare della tonalità della luce (“temperatura di colore”) da uno spettro caldo ad uno freddo, oggetti che prima apparivano saturi vengono desaturati e viceversa, questo perché i materiali possono solo riflettere componenti spettrali che devono essere presenti nella luce incidente; oltre a ciò, all’aumentare dell’intensità luminosa tutti i colori tendono verso il bianco (effetto di “solarizzazione”) perché si saturano le capacità del dispositivo di cattura, che ha una gamma dinamica finita; viceversa, al decrescere dell’intensità della luce, la stabilità della componente di saturazione decresce, perché se ne riduce la gamma dinamica, per cui diviene difficile discriminare i colori in modo affidabile. 85 Figura 4.8 Spazio HSV: al decrescere della luminosità, la sezione della piramide diventa più stretta, per cui la gamma dinamica della componente di saturazione si riduce; per valori di luminosità molto bassi, diventa impossibile distinguere i colori in modo affidabile. Diviene quindi necessaria una fase preliminare di equalizzazione cromatica volta a neutralizzare la tonalità della luce, ciò può essere fatto agevolmente solo nello spazio cromatico RGB, in quanto in esso il bianco è ottenuto come somma delle tre componenti, per cui per ottenere la neutralizzazione della componente luminosa, è sufficiente far sì che tutti e 3 gli istogrammi si estendano sull’intera gamma cromatica (aumento del contrasto), e ciò può essere fatto automaticamente16. A questo punto, a partire dai semi così individuati, si procede ad una fase di region growing che, per ragioni di efficienza, è stato implementato in maniera semplificata: definita una funzione di correlazione sull’intero spazio RGB (quindi due colori vengono considerati “simili” solo se soddisfano tale 16 Si veda in proposito [Ard00] 86 condizione su tutte le componenti), si fa una doppia scansione dell’immagine controllando per ogni punto il suo intorno 8-connesso, se ivi è presente almeno un punto già classificato avente correlazione al di sopra di una certa soglia, anche il nuovo punto viene incluso in tale regione; la scansione viene fatta dall’alto in basso da sinistra a destra e viceversa; tale crescita è ovviamente dipendente dall’ordine di scansione, tuttavia, per la natura del dominio RoboCup, al confine fra un oggetto e l’altro c’è sempre una variazione significativa di almeno una delle 3 componenti spettrali, per cui non c’è il rischio che una regione travalichi nello spazio di un’altra a causa dell’ordine di scansione. Nonostante i promettenti risultati qualitativi e il costo asintotico lineare, questo metodo, per via delle numerose fasi di scansione, conversione di spazio cromatico e region growing, non ha permesso di ottenere una frequenza di processamento accettabile sul processore integrato sull’AIBO (circa 1 fotogramma al secondo a 200MHz); per tale ragione, non è stato qui ritenuto opportuno offrirne un trattazione approfondita che ne contemplasse i particolari implementativi. 4.2.2 Segmentazione dinamica Alla luce della esperienza precedente, appare evidente che l’utilizzo di trasformazioni di spazio cromatico per mettere in risalto certe proprietà ha un costo troppo alto rispetto alle risorse di esecuzione disponibili in questo dominio, così come la necessità di minimizzare il numero di scansioni dell’intera immagine; d’altro canto, un approccio basato su classificazione puramente statica richiede una sola scansione dell’immagine, ma è poco robusto a variazioni parametriche; bisogna allora cercare di trovare un compromesso fra i due estremi citati, sfruttando al meglio le caratteristiche dello spazio nativo YUV. Una caratteristica apprezzabile di questo spazio è sicuramente l’ortogonalità fra la componente di luminanza (Y) e il piano di crominanza 87 (UV), caratteristica questa che teoricamente dovrebbe garantire l’indipendenza del colore rispetto all’intensità della luce, e questo è indubbio per immagini generate matematicamente al computer, ma nel caso esse siano frutto di campionamento di una scena reale, ciò è vero solo in un intervallo limitato di valori di luminosità; posto σ ( y ) funzione di sensibilità cromatica, dove y è l’intensità luminosa della scena reale, avente andamento qualitativo: Figura 4.9 Curva di sensibilità cromatica. Ai due estremi, la curva tende a zero, per insufficiente energia della luce nell’eccitazione del sensore (verso il nero), o per saturazione delle capacità del dispositivo (verso il bianco); pertanto, il valore delle componenti u, v rilevate nell’immagine è funzione delle componenti U, V reali secondo: u = σ ( y) ⋅ U (4.1) v = σ ( y) ⋅ V Tale relazione fra colore e intensità luminosa è ad esempio ben rappresentata nello spazio cromatico HSL, una variante dell’HSV a doppia piramide: 88 Figura 4.10 Spazio HSL: al tendere della luminosità ai due estremi, la saturazione dei colori tende a 0. In conseguenza di ciò, una segmentazione basata unicamente sulle due componenti cromatiche non è sufficiente a discriminare correttamente gli oggetti di interesse al variare delle condizioni di illuminazione, perché le regioni associate a colori differenti tendono a sovrapporsi; da qui l’opportunità di sfruttare un grado di libertà in più, la componente di luminanza, per rappresentare le diverse condizioni su piani cromatici fra loro paralleli. Si osservi però una rappresentazione idealizzata di una scena ripresa dall’ambiente in esame: 89 Figura 4.11 Immagine idealizzata di una scena tipica dell’ambiente RoboCup: è presente la palla (arancione), una porta (gialla), il campo (verde), le linee del campo (bianco). Come si vede, l’immagine è priva di rumore, i contorni sono netti e l’illuminazione è perfettamente uniforme, gli oggetti riflettono la luce solo in maniera diffusa (non c’è ombreggiatura) né sono presenti ombre, ogni oggetto è rappresentato esattamente da un colore e questi sono perfettamente distinguibili fra loro; se fosse possibile avere come input un’immagine così, la segmentazione si ridurrebbe ad una semplice corrispondenza fra i colori della scena e i modelli di oggetto e potrebbe essere effettuata univocamente rispetto alle sole componenti U e V; esaminandone gli istogrammi: Figura 4.12 Istogrammi delle due componenti cromatiche dell’immagine precedente. 90 Come si nota, entrambi gli istogrammi sono 4-modali, in corrispondenza diretta con i 4 oggetti presenti (palla, campo, porta, linee), con i modi ben separati l’uno dall’altro, e con la particolarità che ogni regione dell’istogramma è costituita dal solo modo. Una situazione un po’ più realistica è ottenibile ammettendo che i materiali che compongono gli oggetti abbiano anche la proprietà di riflessione speculare della luce: Figura 4.13 Immagine idealizzata riflessione diffusa e speculare della luce. con Il corrispondente istogramma è: Figura 4.14 Istogrammi U e V dell’immagine precedente. 91 Anche qui, l’istogramma è 4-modale, tuttavia non vale più la proprietà che le regioni dell’istogramma siano costituite dal solo modo (ad eccezione del modo al centro di entrambi gli istogrammi; esso è relativo alle linee bianche, su cui non è stata aggiunta la componente speculare17), anche se restano comunque ben separate. Applicando un algoritmo di thresholding statico, verrebbero classificati come appartenenti ai rispettivi colori gli intervalli dei due istogrammi che delimitano le 4 regioni: Figura 4.15 Vettore di classificazione della componente U: all’interno di esso sono presenti i codici (bitmap) relativi ai vari colori classificati; per chiarezza e compattezza di notazione, tali codici sono qui rappresentati con il colore corrispondente. Si noti che il vettore di classificazione in figura non è stato costruito sulla base dell’istogramma, infatti nei metodi di classificazione statica l’istogramma non viene nemmeno calcolato: la mappa viene costruita 17 D’altronde ciò non avrebbe modificato l’istogramma, i toni di grigio risultanti avrebbero avuto la stessa componente di crominanza, nulla. 92 manualmente in fase di apprendimento selezionando nell’immagine tutti i punti che devono appartenere ad una certa classe; poiché l’oggetto classificato emette tutti i livelli contenuti nella corrispondente regione dell’istogramma, ne consegue tale equivalenza. A questo punto, si può fare un ulteriore passo in direzione del realismo, aggiungendo 8% di rumore gaussiano e applicando un filtro di sfocatura (gaussiana18) con σ = 0.3 : Figura 4.16 Immagine idealizzata con rumore gaussiano e sfocatura. Il cui istogramma è: Figura 4.17 Istogrammi U e V dell’immagine con rumore gaussiano. 18 Il filtro di sfocatura gaussiana altro non è che il filtro di riduzione del rumore esposto nel Capitolo 3: il motivo per cui è comunemente noto come filtro di sfocatura è perché attenua i contorni degli oggetti. 93 A questo punto, in conseguenza del rumore, e in minor misura anche della sfocatura, la varianza delle regioni monomodali dell’istogramma è aumentata, con il risultato che i confini fra le stesse si fanno meno netti, e si manifesta una tendenza alla fusione, che rende più difficile la classificazione corretta dei punti di confine. Lo stadio finale del processo evolutivo sin qui tracciato è ovviamente l’immagine reale che, rispetto alla precedente, aggiunge la presenza di ombre, illuminazione non uniforme (eventualmente da sorgenti multiple aventi caratteristiche emissive differenti19), ambiente circostante alla scena che può avere colori simili ad uno o più degli oggetti che caratterizzano il dominio, e tutte le non linearità e distorsioni introdotte dalla telecamera: Figura 4.18 Immagine reale. Il corrispondente istogramma è: 19 Un esempio realistico è quello di una stanza illuminata artificialmente con lampade al neon in cui filtra da una finestra una percentuale di luce solare; le due sorgenti hanno differente temperatura di colore (4300K il neon, 6500K la luce solare), differente orientazione e differente diffusione. 94 Figura 4.19 Istogramma relativo all’immagine reale. Anche in questo caso, l’istogramma V è sempre 4-modale, anche se qui alcune distribuzioni sono molto ravvicinate, ma nell’istogramma U è sparita la distribuzione relativa al bianco, assorbita all’interno di quella adiacente, che pertanto è 3-modale. Invertendo il cammino sin qui percorso, cioè partendo dall’immagine reale e arrivando all’immagine “idealizzata”, è stato qui realizzato il sistema di segmentazione dinamica. Sistema di Segmentazione Dinamica: 1. Si processano le componenti U e V dell’immagine acquisita dalla telecamera con un filtro di riduzione del rumore, riducendo la varianza delle distribuzioni e rivelando modi che erano stati cancellati dalla fusione di regioni limitrofe; il risultato è paragonabile all’immagine 4.11; 2. Si costruiscono gli istogrammi delle componenti cromatiche U e V, si applica l’algoritmo di thresholding dinamico convenzionale, associando a ciascuna distribuzione il solo valore modale; il risultato è un’immagine simile alla 4.9; 3. Si effettua una classificazione statica delle regioni individuate al passo precedente, ottenendo l’immagine segmentata. La necessità del passo 1 dell’algoritmo è data sia dalla forte presenza di rumore nelle immagini acquisite dalla telecamera dell’AIBO (modellabile 95 come rumore gaussiano all’8-9%), sia allo scopo di stabilizzare il passo successivo dell’algoritmo. Infatti come tecnica di thresholding dinamico si è scelto di usare l’approccio convenzionale, sia per il minor costo computazionale, argomento come visto tutt’altro che trascurabile, sia perché la modalità degli istogrammi dell’immagine non è nota a priori: si potrebbe pensare che questa sia pari a 9, cioè 8 modi rappresentanti i colori caratteristici del dominio, più uno per l’ambiente circostante, ma in realtà questo valore varia da fotogramma a fotogramma, infatti è molto difficile che tutte e 8 le tipologie di oggetti siano presenti contemporaneamente nel campo visivo del robot, viceversa è facile che lo spettro relativo ad un singolo oggetto sia composto da più modi, in funzione dell’illuminazione. Tuttavia come visto nel capitolo 3, ci sono situazioni in cui l’algoritmo convenzionale non discrimina correttamente fra due distribuzioni così vicine da essere parzialmente fuse: Figura 4.20 Situazione nell’istogramma. di ambiguità Nella situazione illustrata in figura, l’algoritmo di thresholding dinamico convenzionale può oscillare fra le due possibilità, a seconda della configurazione del rumore, fra un fotogramma e l’altro: in tal senso risulta 96 molto utile lo stadio preliminare di filtraggio, che permette di aumentare la separazione fra le regioni stabilizzando il comportamento dell’algoritmo. Il risultato ottenuto dallo stadio di thresholding dinamico è di poter effettuare la successiva fase di classificazione soltanto sui valori modali dell’istogramma, anziché su tutto lo spettro dell’immagine, in questo modo si riesce a sopprimere informazione non significativa ai fini della segmentazione, che non sarebbe eliminabile con filtri locali: in particolare, risulta molto efficace nel ridurre la dispersione cromatica risultante dalla riflessione speculare (shading). L’algoritmo complessivo permette così di aumentare la capacità di discriminazione in base al colore attraverso l’eliminazione di informazione non significativa, dovuta alle condizioni di illuminazione, incrementando la distanza spaziale fra le regioni di classificazione nel piano cromatico UV, con il risultato di evitare sovrapposizioni. 4.2.3 Filtraggio A questo punto, resta da determinare un filtro di riduzione del rumore adatto a stabilizzare l’algoritmo precedente: a tal fine, sono stati valutati tutti i filtri descritti nel capitolo 3, tenendo conto sia della capacità di riduzione del rumore, sia del costo computazionale: • I filtri lineari hanno il pregio di avere il costo di esecuzione più basso, tuttavia non sono adatti per elaborare immagini già a bassa risoluzione, come nel caso dell’AIBO, perché l’effetto di sfocatura che essi introducono riduce effettivamente la massima distanza a cui sono rilevabili gli oggetti20; al di là di ciò, urge sottolineare come questi non siano molto efficaci nel ridurre la varianza delle distribuzioni presenti nell’istogramma, perché se da un lato 20 Ad esempio un oggetto di diametro reale pari a 8 cm come la palla, ad una distanza di 4m, con i parametri caratteristici di questa telecamera (si veda in proposito la sezione seguente sull’estrazione di oggetti) ha nell’immagine un diametro di appena 3.2 pixel. 97 attenuano le componenti dovute al rumore, dall’altro la sfocatura genera colori intermedi fra una regione e l’altra; • Fra gli operatori non lineari, come è già stato rilevato, il miglior comportamento qualitativo spetta al filtro S.U.S.A.N.: se correttamente implementato, questo filtro è anche molto più efficiente computazionalmente rispetto ai concorrenti della stessa classe, perché la funzione di correlazione può essere precalcolata, e le restanti operazioni non sono dissimili da quelle dei filtri lineari; l’argomento verrà approfondito nel prossimo capitolo. La scelta del filtro SUSAN appare perciò naturale, anche perché non solo non cancella gli oggetti lontani, ma grazie alla riduzione del rumore e all’aumento del contrasto fra regioni d’immagine differenti, risulta molto efficace nell’aumentare la separazione fra le regioni monomodali degli istogrammi: Figura 4.21 Immagine reale filtrata con il SUSAN: come si nota, nonostante la forte attenuazione del rumore, la sottile linea bianca che attraversa il campo non è stata cancellata, anzi risulta molto nitida. 98 Figura 4.22 Istogramma dell’immagine filtrata con il SUSAN. Come si vede in figura 4.21, grazie al filtro SUSAN l’istogramma U è adesso 5-modale, sono così emersi due modi che nell’immagine originale erano stati cancellati dal rumore e che l’algoritmo di thresholding dinamico non avrebbe potuto riconoscere; anche i modi dell’istogramma V hanno un profilo più netto. A questo punto bisogna individuare un’implementazione del filtro che permetta di mantenere una frequenza di processamento delle immagini che soddisfi le specifiche dettate dai vincoli di risorse e ambientali, questo perché lo stadio di filtraggio è decisamente la fase più costosa dell’algoritmo di segmentazione dinamica appena definito, infatti le operazioni sugli istogrammi devono processare 2 ⋅ l elementi, dove l è il numero di livelli di intensità in cui sono quantizzati gli spettri dell’immagine, in questo caso 256, mentre il filtro di riduzione del rumore deve operare su n ⋅ h ⋅ w punti per ogni componente spettrale, dove n è il numero di punti che appartengono alla matrice di convoluzione, h è la risoluzione verticale dell’immagine e w è la risoluzione orizzontale, quindi nel caso dell’AIBO si tratta di n ⋅ 176 ⋅ 144 = 25344 ⋅ n ; a ciò si aggiunga che operatori come il SUSAN, pur efficienti, non sono stati progettati per un uso real-time senza l’ausilio di hardware specializzato. 99 Il primo filtro realizzato in tal senso è un’implementazione abbastanza diretta dell’algoritmo SUSAN smoothing, con le seguenti particolarità21: • calcoli svolti in precisione intera anziché virgola mobile; • maschera circolare a pesi uniformi, come nel box-filter: la rinuncia al profilo spaziale gaussiano comporta in generale una minore riduzione del rumore in alta frequenza, come visto nel Capitolo 3, tuttavia nel caso di maschera 3x3 l’attenuazione complessiva è maggiore; • funzione di correlazione gaussiana precalcolata; • sono state considerate maschere di dimensione 3x3 e 5x5. Figura 4.23 Maschere per SUSAN, 3x3 e 5x5: il nucleo di entrambe non ha un peso, perché nel SUSAN esso non partecipa direttamente alla media. La versione con maschera 5x5 è stata realizzata principalmente come riferimento qualitativo, infatti eseguendo una convoluzione con essa, ogni punto dell’immagine viene processato 20 volte, per cui non è decisamente adatta a soddisfare i vincoli imposti, almeno per il processore a 200MHz. 21 Per i dettagli sull’implementazione di questo filtro e dei seguenti, le tecniche utilizzate e le prestazioni ottenute, si rimanda al Capitolo 5. 100 Apportando le seguenti modifiche all’algoritmo precedente, si possono realizzare delle ottimizzazioni (che saranno esposte nel Capitolo 5) che hanno permesso di progettare un filtro molto più veloce, che pertanto può essere battezzato “SUSAN Real-Time”: • funzione di correlazione rettangolare, anziché gaussiana; • maschera 3x3 di cui non si considerano i punti nelle posizioni diagonali rispetto al nucleo. Figura 4.24 Maschera per SUSAN Real Time. Nonostante l’efficienza di questo filtro, paragonabile a quella di un operatore lineare con la stessa maschera, e il fatto che comunque goda della proprietà di preservare le strutture dell’immagine, l’efficacia nell’attenuazione del rumore è ridotta rispetto ai precedenti, sia per la rinuncia al profilo gaussiano della funzione di correlazione, sia per la ridotta ampiezza spaziale della maschera; ad ogni modo utilizzandolo per filtrare i piani U e V è possibile ottenere una frequenza media di elaborazione dell’intero sistema di visione di 13 fotogrammi al secondo sul processore a 200MHz, pertanto la scelta ricade su di esso. 4.2.4 Classificazione L’uscita dello stadio di segmentazione dinamica è un’immagine “a colori ridotti”, cioè ad ogni intervallo degli istogrammi caratterizzato da un 101 modo compreso fra due minimi locali, viene sostituito il valore corrispondente al modo in quanto rappresenta il massimo della probabilità che esso sia il colore effettivo dell’oggetto ad esso associato; in pratica, l’immagine così ottenuta ha istogrammi aventi valore nullo in tutti i livelli ad eccezione dei modi, che corrispondono ai modi dell’immagine originale; si vedano come esempio le figure 4.10 e 4.11. In generale, ad un modo corrisponde una porzione di uno o più oggetti, infatti come illustrato nel Capitolo 2, gli algoritmi di thresholding dinamico sono di segmentazione parziale e le regioni così ottenute non godono della proprietà di essere connesse, è pertanto necessario un ulteriore stadio di elaborazione che sfrutti conoscenza di alto livello sul dominio in questione per aggregare regioni che rappresentano porzioni di oggetti, e per classificare tali aggregati secondo i modelli di oggetto dell’insieme ammissibile, ciò può essere formalizzato come: I = Υ Ri i R = {R1, R2 ,Κ , Rk } M = {m1, m2 ,Κ , mn } (4.2) C:R→M dove R è l’insieme delle regioni in cui è partizionata l’immagine dall’algoritmo di thresholding dinamico (cioè regioni monocromatiche), M è l’insieme dei modelli di oggetto caratteristici del dominio, C è la funzione di classificazione che permette di passare da una rappresentazione all’altra. Tale classificazione può essere effettuata dinamicamente, ad esempio raccogliendo informazioni statistiche dagli istogrammi quali la popolazione complessiva delle regioni e la varianza, sfruttando conoscenza a priori sull’ambiente, e integrando i dati nel tempo sotto forma di rappresentazione probabilistica; tuttavia, poiché il dominio RoboCup è strutturato in base al colore in maniera interamente nota a priori, è molto più efficiente ricorrere ad una classificazione statica mediante mappa dello spazio YUV come i metodi descritti nel paragrafo 2.1.1. 102 In questa ricerca però l’obbiettivo primario è stato la discriminazione degli oggetti in maniera robusta rispetto a variazione di illuminazione, perciò nella quantizzazione dello spazio YUV è conveniente privilegiare le componenti di crominanza U e V rispetto alla luminanza: • Componenti U e V non quantizzate, rappresentate come piano UV per catturare eventuali dipendenze fra i due spettri, sotto forma di matrice a 256x256 elementi, dove ciascun elemento è una maschera di 8 bit, che rappresenta quali colori del codominio della funzione di classificazione sono in corrispondenza ad una determinata coppia (u , v) , per un’occupazione di memoria risultante di 64Kbyte; • Vettore Y a 256 livelli, indipendente dal piano UV, ciascun livello è una maschera di 8 bit, con la stessa semantica del caso precedente. La funzione del vettore Y è di stabilire un intervallo ammissibile dei valori di intensità luminosa in cui ciascun oggetto riconosciuto può presentarsi, allo scopo di filtrare più efficacemente il rumore ambientale, infatti è già stato evidenziato come la sensibilità cromatica sia comunque funzione dell’intensità luminosa, per cui al di fuori di una certa gamma diventa molto difficile discriminare gli oggetti in base alle componenti di crominanza; in aggiunta, questa informazione è necessaria per riconoscere colori quali il bianco e il nero, che ovviamente ricadono nello stesso insieme di valori di crominanza che caratterizzano la scala dei grigi. In conseguenza dell’indipendenza fra il vettore Y e il piano UV, con questa rappresentazione è quindi possibile esprimere unicamente regioni dello spazio YUV che abbiano la forma di cilindri generalizzati, tuttavia è stato così possibile ottenere una rappresentazione compatta ed efficiente, infatti l’occupazione di memoria complessiva supera appena i 64Kbyte. 103 Figura 4.25 Una regione dello spazio YUV ammissibile per la rappresentazione implementata. L’algoritmo di classificazione è quindi il seguente: • Per ogni punto dell’immagine, si leggono le 3 componenti YUV; • Per ciascuna delle componenti U e V, si accede all’istogramma rispettivo, si individua la regione a cui appartiene il valore in ingresso e si ritorna al suo posto il modo corrispondente; i valori modali delle due componenti di crominanza così ottenuti vengono usati come indici nell’accesso alla matrice di classificazione UV, che ritorna una bitmapUV; • La componente Y viene usata direttamente per indicizzare il vettore di classificazione Y, che ritorna una bitmapY; • Il risultato della classificazione è l’AND logico bit a bit delle due bitmap: bitmapUV & bitmapY. La componente Y non viene filtrata né vi si applica il thresholding dinamico, in quanto il riconoscimento poggia principalmente sulle componenti di crominanza; per individuare il bianco e il nero, è sufficiente considerare, nella classe dei valori riconosciuti come grigi, tutti i valori della 104 Y al di sopra o al di sotto di una certa soglia; chiaramente, è difficile ottenere un algoritmo robusto a variazioni di intensità luminosa per questi colori, perché essi sono intrinsecamente definiti in base alla luminanza. Figura 4.26 Schema complessivo. 105 4.3 Edge detection Come rilevato nel paragrafo precedente, il bianco e il nero sono i colori che risultano più sensibili a variazioni di illuminazione, tuttavia il nero non fa parte dei colori che devono essere riconosciuti da un sistema di visione nel dominio RoboCup SONY Legged League, perché nessun oggetto di tale ambiente è individuabile in base a questo colore; il bianco viceversa è rappresentato unicamente dalle linee sul campo di gioco, il quale ha colore verde scuro; poiché il contrasto fra il valore di luminosità delle linee e quello del campo è forte sotto ogni condizione di illuminazione, ad esclusione ovviamente di situazioni limite, è possibile catturare questa informazione in maniera molto robusta mediante tecniche di edge detection. Infatti, mentre la soglia sul valore di luminanza per determinare il bianco deve essere ricalibrata al variare dell’intensità luminosa della scena, il gradiente della luminanza fra regioni ne risulta solo amplificato positivamente o negativamente, ma i massimi restano localizzati sempre nelle stesse posizioni: I Tbianco = f ( I ) ⋅ Tbianco ∇ I ( p1, p 2 ) = f ( I ) ⋅ i ( p1 ) − f ( I ) ⋅ i ( p 2 ) = f ( I ) ⋅ ∇( p1, p 2 ) (4.3) Nella (4.3), I è l’intensità luminosa incidente sulla scena, non nota, f(I) è una funzione che lega la componente di luminanza dell’immagine con I, I monotona, crescente, ma anch’essa non nota, Tbianco è la soglia al di sopra della quale i colori possono essere classificati come bianco, dipendente da I, ∇ I ( p1 , p 2 ) il gradiente fra due punti dell’immagine in funzione di I (i(p) è la luminanza del punto p): per poter riconoscere correttamente il bianco in maniera indipendente dalla luce presente nella scena, bisognerebbe poter misurare I e conoscere f(I), e sotto tali ipotesi, irrealizzabili nella pratica, si potrebbe allora fissare in modo statico Tbianco; nel caso del gradiente invece, calcolati direttamente sull’immagine i massimi locali di ∇ I , la (4.3) esprime 106 l’invarianza di essi da f(I), ovviamente al di fuori dei casi estremi in cui f ( I ) → 0 e f (I ) → ∞ (che nel caso discreto, si traduce nella saturazione dell’immagine verso il massimo valore rappresentabile). Bisogna altresì sottolineare come una qualche forma di rilevamento di bordi sarebbe comunque necessaria per permettere agli stadi successivi di riconoscimento delle linee di operare correttamente, infatti le aree bianche che verrebbero estratte in ragione di un processo di segmentazione avrebbero uno spessore di numerosi pixel, cosa che contrasta con l’assunzione fatta implicitamente nelle tecniche di codifica dei bordi che lo spessore di questi sia unitario; in tal caso, si può risolvere il problema effettuando una correlazione con una matrice rappresentante un modello (pattern) della configurazione dei punti bianchi e verdi in corrispondenza ad una certa tipologia di bordo nell’immagine22, ad esempio: Figura 4.27 A sinistra, pattern per riconoscimento dei bordi di immagini segmentate; a destra, in evidenza due esempi in cui il valore di correlazione dei pattern con l’immagine è alto. 22 Si vedano in proposito [Gri01] e [Mas99]. 107 In generale, la correlazione di un modello su immagini segmentate è potenzialmente più efficiente dell’applicazione di un vero operatore convoluzionale di edge detection, perché sono richieste operazioni di AND bit a bit anziché moltiplicazioni, tuttavia, nel caso di telecamera con 3 gradi di libertà di rotazione, serve la correlazione con almeno 8 pattern diversi per rilevare tutti i bordi, di fatto annullando o ribaltando il vantaggio computazionale; probabilmente ancora più significativo è il fatto che la rilevazione dei bordi così ottenuta è interamente dipendente dall’informazione contenuta nella segmentazione, mentre con le tecniche di edge detection si sfrutta informazione che altrimenti andrebbe persa e che risulta molto più stabile, come visto, alle variazioni di illuminazione. Nel Capitolo 3 è stato messo in evidenza come il SUSAN Edge Detector superi nettamente i metodi basati su operatori differenziali sia per rapporto segnale-rumore, sia per precisione nella localizzazione dei bordi e per continuità spaziale degli stessi; altro aspetto rilevante è che è stato qui possibile determinarne un’implementazione ad un costo di esecuzione prossimo a quello di operatori differenziali di edge-enhancement come Sobel. Operatore SUSAN Edge Detector “Lite”: • Funzione di correlazione precalcolata; • Maschera di convoluzione 3x3; • Non viene determinata la direzione della normale all’edge; • Non viene eseguita la fase di non-maxima suppression; • Per limitare lo spessore dei bordi ad 1 pixel, il threshold geometrico viene fissato pari a Questo filtro 1 n max . 2 nasce dall’osservazione che le operazioni computazionalmente più costose del SUSAN Edge Detector “classico” 108 sono il calcolo dei momenti per la determinazione della direzione normale all’edge e la fase di soppressione dei non-massimi; senza la seconda e senza una tecnica di codifica dei bordi che ne faccia uso, la prima di tali operazioni è del tutto superflua e pertanto può essere eliminata senza conseguenze; diverso è il caso della seconda, in quanto la fase di edge enhancement 3 dell’algoritmo base fissa un valore del threshold geometrico ( n max ) che 4 permette una risposta positiva su entrambi i fronti di un edge a seconda della curvatura di questo, per far sì che i “non-massimi” così ottenuti vengano rimossi solo dalla fase successiva tenendo conto della direzione dell’edge, mantenendo quindi la connettività dei contorni in zone critiche quali le giunzioni e i profili a curvatura elevata. Benchè tale caratteristica sia desiderabile in molti contesti, in un’ottica di riconoscimento di linee, che sono edge diritti per definizione, è sacrificabile in funzione dell’efficienza computazionale, a condizione di utilizzare una tecnica di riconoscimento di forme che non necessiti di tale proprietà; per limitare allora il numero di non-massimi rilevati dall’algoritmo, è stato opportuno ridefinire il threshold geometrico in funzione del profilo di un edge diritto, che su uno dei fronti e in corrispondenza degli angoli ha sempre USAN di area inferiore a metà della maschera (figura 3.19 (b) e (c)), da cui il valore g = 1 nmax . 2 4.4 Estrazione di oggetti nell’immagine La segmentazione e l'individuazione degli edge sono solo il primo passo nel processo di acquisizione di dati dalle immagini, infatti la rappresentazione così ottenuta è solo la proiezione prospettica sul piano immagine di una scena in realtà tridimensionale: nel corso di tale operazione si perde l'informazione relativa ad una dimensione, e tale conoscenza non può essere recuperata a meno di disporre di due diversi punti di vista della 109 scena (stereovisione) attraverso la geometria epipolare ([RN98],[MT96]); tuttavia, avendo conoscenza a priori sulle caratteristiche degli oggetti che compongono im mondo, dovendo determinarne solo la presenza, posizione e orientazione, è possibile risolvere il problema anche avendo a disposizione una sola telecamera, integrando tale informazione con la conoscenza pregressa del dominio. 4.4.1 Formazione dei blob Gli oggetti presenti nell'immagine segmentata sono rappresentati da regioni omogenee di pixel aventi lo stesso colore: il processo di costruzione di tali regioni connesse, che prendondo il nome di blob, è un operazione tipicamente costosa che può avere un serio impatto sulle prestazioni, ed in ambito RoboCup è stato spesso affrontato, con risultati non pienamente soddisfacenti, con algoritmi di riempimento di poligoni mutuati dal mondo della grafica 2D23. In [Bru00] è stata proposta una tecnica che ha riscosso notevole successo per la sua efficienza, e che pertanto è oggi alla base di numerosi sistemi di visione in tempo reale. Il processo si articola in due fasi: • Compressione RLE dell'immagine segmentata: per ogni linea di scansione che compone l'immagine si raggruppano i pixel adiacenti aventi lo stesso colore, che formano così una run: tale struttura contiene il colore comune, il punto di inizio e il punto di fine; poiché l'immagine segmentata ha solo 8 “colori” (sarebbe più giusto dire classi di pixel) e gli oggetti che la compongono tendono a formare ampie aree omogenee, tipicamente è possibile rimpiazzare decine di pixel con una sola run, ottenendo un rapporto di compressione spesso superiore al 90%; 23 Si vedano in particolare [CSVYHPS01] e [GT02]. 110 • Fusione delle run mediante algoritmo di union find: la codifica RLE effettua una fusione dei pixel adiacenti secondo la connettività orizzontale; aggregando insiemi di run secondo la connettività verticale si ottengono i blob; ad ogni run è associato un puntatore ad un nodo padre, il membro più in alto a sinistra della regione, che all'atto della creazione viene inizializzato alla run stessa (foresta di run disgiunte); effettuando la scansione riga per riga dell'immagine RLE, se si trovano due run dello stesso colore che si sovrappongono orizzontalmente e sono connesse verticalmente, vengono fuse, ponendo come padre di quella inferiore la superiore; si effettua quindi un'ultima scansione per comprimere i cammini, in cui si risale dalle foglie (le run che non sono padre di nessuno) verso il nodo radice (il nodo a cui si arriva, per ogni blob, risalendo il cammino dettato dai puntatori padre a partire dalle foglie), etichettando ogni run direttamente con il padre globale della regione, che costituisce così un blob. Figura 4.28 Union find con compressione dei cammini. 111 Di ogni blob, durante il processo di formazione appena esposto, viene determinato il rettangolo ad esso circoscritto (“bounding box”) individuando il massimo e il minimo delle coordinate x e y, da cui se ne x + x min y max + y min , calcola il baricentro max ; viene infine annotata l'area 2 2 effettiva (in pixel) e il colore del blob. Figura 4.29 Blob e bounding box ad esso associata. 4.5 Ricostruzione della scena 4.5.1 Modello di telecamera Per poter ricostruire correttamente l’informazione geometrica contenuta nelle immagini, è necessario fornire un modello spaziale della telecamera in modo da poter applicare le leggi della geometria proiettiva ai punti così rilevati che, altrimenti, sarebbero adimensionali. Il modello più semplice, è quello di telecamera a lente puntiforme (pinhole) [Bak99], in cui si modella la lente della telecamera come un punto, avente quindi diametro infinitesimo, così da poter assumere che tutti i raggi prospettici che congiungono i punti del mondo reale con la loro proiezione sul piano immagine P passino per un unico punto, coincidente con la lente, che prende il nome di centro della proiezione (indicato con O), posto a distanza 112 f dal piano immagine detta distanza focale; tale assunzione è spesso una buona approssimazione della realtà, in quanto le dimensioni effettive delle lenti utilizzate nei sistemi di visione sono molto piccole se confrontate con le distanze fra gli oggetti in gioco. Figura 4.30 Modello di telecamera puntiforme. In molti casi tuttavia, il centro ottico non coincide con l’origine del sistema di coordinate presente nell’immagine, ma ha in esso posizione (u0,v0), gli assi x e y possono avere diversi fattori di scala sx ed sy , e non essere perfettamente ortogonali fra loro ( sθ ); un’estensione del modello precedente che prende in considerazione questi parametri aggiuntivi è detta Trasformazone Diretta Lineare (DLT). Tale modello può essere così espresso formalmente [MT96], [Bak99]: 113 p = [x m q = [w xi ym wy i sx K =0 0 sθ sy 0 Λ Μ M = Λ 0 1 q = K ⋅0 0 Λ z m 1] coordinate reali ( sistema mondo) w] coordinate immagine u0 v0 1 Λ Μ R Μ T Λ Λ Μ 0 0 1 0 0 0 1 0 0 ⋅ M ⋅ p 0 1 0 (4.4) In esso, M è la matrice dei parametri cosiddetti estrinseci che rappresenta il cambio di base dal sistema di riferimento del mondo (scena) al sistema solidale con la telecamera, ed è composta dalla sotto-matrice di rotazione R, le cui colonne sono 3 vettori ortonormali che rappresentano la base del sistema ruotato della telecamera rispetto al sistema di riferimento del mondo, e dal vettore T che rappresenta la traslazione fra le due origini; K è la matrice dei parametri aggiuntivi di questo modello rispetto al pin-hole, che vengono detti intrinseci; il vettore λ ⋅ q al variare di λ rappresenta il raggio prospettico che congiunge il punto reale con la proiezione sul piano immagine, passante per il centro ottico; per ottenere il punto di tale raggio che giace sul piano immagine occorre imporre λ ⋅ w = f (condizione sulla coordinata z nel sistema della telecamera). Per completare il modello, bisogna però tenere conto che le lenti reali introducono una distorsione non lineare significativa nella proiezione prospettica; un metodo largamente usato in ambito di visione artificiale modella in modo esplicito la distorsione in radiale e tangenziale[MT96]: 114 x = x − u0 y = y − v0 r = x2 + y2 (4.5) x ′ = x + k1 x r 2 + k 2 x r 4 + k 3 x r 6 + P1 (2 x 2 + r 2 ) + 2 P2 x y y ′ = y + k1 yr 2 + k 2 yr 4 + k 3 yr 6 + P1 (2 y 2 + r 2 ) + 2 P2 x y dove x ′, y ′ sono le coordinate corrette dalla distorsione, ki sono i coefficienti di distorsione radiale, Pi i coefficienti di distorsione tangenziale; ad ogni modo, il primo coefficiente radiale, k1, di solito rappresenta oltre il 90% dell’intera distorsione. Per utilizzare il modello così definito, occore quindi determinare i parametri intrinseci ed estrinseci e i coefficienti di distorsione: • I parametri intrinseci e i coefficienti di distorsione possono essere calcolati una volta per tutte, per una data telecamera, a partire da un insieme di immagini di esempio utilizzando programmi appositi, quali [Calib]; • Anche i parametri estrinseci possono essere determinati nello stesso modo, a condizione che la posizione e l’orientamento del sistema di riferimento della telecamera siano fissi rispetto al sistema assoluto; non è così nel caso dell’AIBO, perché la telecamera ha 3 gradi di libertà di rotazione e l’altezza della testa del robot non è costante durante la camminata, in conseguenza della deambulazione su gambe; perciò, è necessario ricalcolare tali parametri dinamicamente, in funzione delle rilevazioni dei sensori di giunto relativi alle gambe e al collo del robot, rilevazioni necessariamente affette da sensibile rumore. I valori dei parametri intrinseci che sono stati così ricavati per questo sistema, relativi all’immagine 176x144 sono: 115 f c = 161.1 (in pixel ) (u 0 , v0 ) = (81.65,72.32) sx = s y = 1 sθ = 0 (assi perfettamente ortogonali ) k1 = 0.11553 Avere a disposizione il valore della distanza focale in pixel fc permette di convertire immediatamente le distanze nell’immagine (in pixel) in distanze nel mondo reale (in cm). In questo progetto, per ragioni di efficienza, si è scelto di modellare la non-linearità introdotta dalla lente unicamente in base al primo coefficiente di distorsione radiale (k1); per lo stesso motivo, la funzione di correzione della distorsione viene applicata alla bounding box dei blob, anziché all’intera immagine. Figura 4.31 Distorsione radiale: a sinistra, immagine originale, a destra, immagine corretta con modello di distorsione limitato al coefficiente k1. 4.5.2 Riconoscimento di oggetti nella scena Avendo a disposizione un modello corretto di telecamera, basta integrare la conoscenza a priori sul dominio con le informazioni sui blob estratte dall’immagine segmentata per individuare gli oggetti reali presenti nella scena e la loro posizione rispetto all’osservatore. 116 Gli oggetti che fanno parte del dominio in esame sono: • La palla, di colore arancione e forma perfettamente sferica, di diametro pari a 8 cm, giace sempre sul piano di gioco; • Le porte, una di colore giallo, l’altra di colore azzurro, hanno altezza pari a 30 cm, larghezza 60 cm e profondità pari a 26cm; la forma è parallepipedale, giacciono sul piano di gioco; • I landmark, composti da due cilindri sovrapposti, entrambi alti 10 cm, di raggio pari a 5 cm, una delle due metà è sempre rosa, l’altra può essere verde, gialla o azzurra a seconda della posizione sul campo; si trovano ad un’altezza rispetto al piano di gioco di 20 cm. Il primo problema che si pone è quello di risolvere situazioni di ambiguità in cui non è possibile identificare correttamente un oggetto in base al solo colore del blob, ad esempio un’area azzurra nell’immagine potrebbe essere una porta, ma potrebbe anche essere la parte inferiore di un landmark di cui non si vede la metà rosa perché questa è al di fuori del campo visivo del robot; bisogna anche tenere conto del fatto che la tendenza del sensore di acquisizione di questa telecamera a spandere i colori fra regioni aventi luminosità diversa porta alla comparsa nell’immagine finale di falsi oggetti che non sono eliminabili in fase di segmentazione attraverso il filtraggio, ad esempio la zona di intersezione fra le due metà di un marker giallo-rosa appare spesso nell’immagine di un colore arancione brillante e pertanto può essere confusa con la palla. 117 Figura 4.32 La parte rosa del marker è fuori dal campo visivo del robot, pertanto il blob giallo può essere interpretato anche come porta. In molti casi come quelli appena descritti, si può disambiguare la situazione in modo soddisfacente sfruttando l’informazione nota a priori sull’altezza relativa della telecamera del robot e quelle delle varie tipologie di oggetti, infatti al variare dell’angolo di tilt, l’altezza della telecamera appartiene all’intervallo [12 - 17] cm, per cui gli oggetti si possono dividere rispetto ad essa in 3 classi: • Oggetti interamente al di sotto della telecamera: palla, campo, linee del campo; • Oggetti interamente al di sopra della telecamera: landmark; • Oggetti la cui altezza si estende al di sopra e al di sotto della telecamera: porte. 118 Per effettuare questa partizione sul piano immagine, occorre definire un sistema di riferimento solidale col il corpo del robot, posto alla sua base, avente asse Zr rivolto secondo l’altezza del robot, asse Xr secondo la lunghezza, asse Yr secondo la larghezza; il sistema di riferimento solidale con la telecamera ha invece asse Zc uscente dal piano immagine, assi Xc e Yc diretti come gli assi dell’immagine ma con verso opposto: Figura 4.33 Sistemi di riferimento del robot. Preso p R = [ x y z ] un generico punto espresso nel sistema di coordinate solidale col robot, effettuato il cambio di coordinate verso il riferimento della telecamera e la proiezione prospettica, facendo poi tendere separatamente le sue coordinate x, y, (relative al sistema robot) all’infinito: 119 t x x r11 x + r12 y + r13 z + t x r22 r23 t y y r21 x + r22 y + r23 z + t y ⇒ = ⋅ r32 r33 t z z r31 x + r32 y + r33 z + t z 0 0 1 1 1 r x + r12 y + r13 z + t x f ⋅ 11 r x r y r z t + + + C z 31 32 33 px f C p C r21 x + r22 y + r23 z + t y z ⇒ p y → ⇒ f⋅ r31 x + r32 y + r33 z + t z C pz f r11 f⋅ r31 r ⇒ lim p C = f ⋅ 21 = x Cf x →∞ r31 f r12 f⋅ r32 r ⇒ lim p C = f ⋅ 22 = y Cf y →∞ r32 f r11 r C p = 21 r 31 0 r12 r13 (4.6) Al tendere di x, y all’infinito p C tende a x Cf e y Cf che sono detti punti di fuga, cioè il luogo geometrico dei punti in cui convergono nella proiezione prospettica tutte le direzioni parallele agli assi Xr , Yr nel sistema di riferimento del robot. La linea che congiunge i due punti di fuga è l’orizzonte, ed è l’intersezione del piano immagine con un piano parallelo al piano XYr nel sistema di riferimento del robot posto ad un’altezza pari all’altezza della telecamera. 120 Figura 4.34 Orizzonte come intersezione fra il piano immagine P e il piano H parallelo al suolo ad altezza pari a quella della lente della telecamera C. Rispetto all’orizzonte, le 3 classi di oggetti precedentemente definite sono individuabili come “interamente al disotto” (palla, campo, linee del campo), “interamente al disopra” (landmark) e “a cavallo” (porte). Per stabilire la posizione di un punto p dell’immagine rispetto alla linea ρ dell’orizzonte h , occorre calcolare il versore ortonormale all’orizzonte ẑ C , il vettore congiungente p con un punto qualsiasi sulla linea dell’orizzonte, ad esempio uno dei due punti di fuga, e proiettare tale vettore su ẑ C mediante prodotto scalare: zˆ C = 1; ρ zˆ C ⋅ h = 0; (4.7) altezza h ( p ) = x cf p ⋅ zˆ C 121 Figura 4.35 Calcolo dell’altezza di un punto sull’orizzonte. Applicando il calcolo dell’altezza rispetto all’orizzonte sui 4 punti nord, sud, est e ovest che ne delimitano la bounding-box, si può stabilire se un oggetto è interamente al disopra o al disotto o a cavallo dell’orizzonte. La palla viene quindi individuata secondo i seguenti criteri: • il colore del blob deve essere arancione; • deve essere interamente al disotto dell’orizzonte, questo perché la sua altezza rispetto al piano di gioco è di 8cm, quindi sempre minore dell’altezza da terra della telecamera, il cui minimo è di 12cm; il margine di differenza fra le due altezze è sufficiente a garantire stabilità della decisione nel tempo anche a fronte dell’errore nel calcolo della proiezione dell’orizzonte dovuta alla rumorosità dei sensori di giunto; • l’area del blob espressa in pixel deve superare una soglia prefissata, determinata dalla massima distanza ammissibile a cui è possibile trovare la palla, che è funzione delle dimensioni del campo; questo 122 serve ad eliminare blob frutto di colori spurii in conseguenza dei difetti del sensore CMOS ed errori di segmentazione; • il rapporto fra le dimensioni minima e massima della bounding-box deve essere superiore ad una soglia compresa fra 0 e 1, infatti la proiezione prospettica di una sfera è un cerchio perfetto, che ha tale rapporto pari a 1, ma in conseguenza della sfocatura di movimento la forma della palla tende ad essere dilatata secondo una direzione; • la densità del blob, ovvero il rapporto fra l’area effettiva della regione colorata e l’area del rettangolo circoscritto deve essere prossima a quella di un cerchio perfetto inscritto in un quadrato avente lato pari al suo diametro, cioè: • πr 2 π → ; 2 4 4r se più oggetti soddisfano le condizioni precedenti, si sceglie come palla il blob più grande. La posizione della palla viene calcolata come segue: sia ( x pI , y Ip ) la posizione del baricentro della palla in coordinate immagine, si trasforma nel sistema di coordinate della telecamera λ[ x Cp y Cp f ] (che ha origine alle coordinate (u 0I , v0I ) ), al variare di λ il punto si muove lungo il raggio prospettico; si passa infine al sistema di riferimento solidale con il corpo del x Rp robot y Rp = M zR p λx Cp ⋅ λy Cp e si determina λ imponendo che la coordinata z Rp λf della proiezione del baricentro coincida con il valore noto a priori, che per la palla è pari a 4 cm; in questo modo si ottengono i corrispondenti ( x Rp , y Rp ) , da cui la distanza dalla palla y Rp ( x Rp ) 2 + ( y Rp ) 2 e l’angolo arctan R x p ; questo metodo dà buoni risultati nel calcolo dell’angolo, con un errore medio di circa 1°, mentre per la distanza dà risultati soddisfacenti solo da 123 vicino; in effetti il problema è nel cambio di coordinate telecamera -> robot, che risente dell’errore di misura dei sensori di giunto nel calcolo dell’altezza della telecamera da terra; la distanza può però essere ricavata con un’altra tecnica in maniera più affidabile, che non fa uso di cambi di coordinate: Figura 4.36 Calcolo della distanza dalla palla: C è il centro ottico, P il piano immagine, d la distanza del punto sul piano immagine, hi il diametro della palla nell’immagine, hr il diametro nel mondo reale, D la distanza della telecamera dalla palla. Osservando la figura 4.36, si nota come i triangoli Cab e Ca’b’ siano simili, quindi hanno tutti i lati in proporzione, così come sono in proporzione d e D; per determinare D basta quindi calcolare d= 2 f 2 + OB dove f è la distanza focale, OB è la distanza del baricentro della palla B dal centro dell’immagine O, misurare hi diametro della palla nell’immagine (essendo hr noto a priori), per ricavare D = d ⋅ hr . hi Utilizzando questa formula, è anche possibile calcolare la soglia sulla dimensione minima ammissibile del blob, infatti il campo ha dimensione 124 440x290 cm, per cui la massima distanza fra un robot e la palla può essere circa 530cm, da cui: hi = d ⋅ hr 161 ⋅ 8 ≅ = 2.44 pixel è il diametro minimo D 530 ammissibile a cui corrisponde un’area di circa 6 pixel, tenendo conto della sfocatura dei contorni e degli errori di segmentazione si può porre tale soglia a 4 pixel. Nel caso dei landmark, i criteri di discriminazione sono: • un marker è composto di due blob, di cui uno deve avere colore rosa, mentre l’altro può essere giallo, verde o azzurro; • entrambi i blob devono essere interamente al disopra dell’orizzonte, occorre individuare quale dei due è più in alto rispetto all’orizzonte per classificare il landmark (es. rosa su verde o verde su rosa); • il rapporto fra l’area del blob che appare più piccolo (perché occluso o parzialmente fuori dal campo visivo o influenzato dal rumore) e quella del più grande, compresa fra 0 e 1, deve essere superiore ad una certa soglia (idealmente, tale rapporto dovrebbe essere pari ad uno); • la distanza massima fra i baricentri dei due blob deve essere prossima alla lunghezza dell’asse più lungo del blob, infatti entrambe sono pari a 10cm nell’oggetto reale; • l’area di almeno uno dei due blob deve essere superiore ad una certa soglia, per ragioni analoghe al caso della palla; • se vengono individuati più landmark aventi la stessa combinazione di colori e che soddisfano le condizioni precedenti, si considera solo il più grande; • nel campo visivo del robot possono essere presenti al più due landmark (differenti). 125 Il calcolo di distanza e angolo dal landmark si effettua con le stesse formule utilizzate per la palla, con la differenza che, in questo caso, nella prima si sostituisce al baricentro della palla il punto di mezzo sulla congiungente i baricentri dei due blob, e si usa la distanza fra i detti baricentri in luogo del diametro della palla nella seconda formula. Il riconoscimento delle porte non comporta sostanziali variazioni rispetto a quanto detto per palla e landmark, se non che in questo caso il blob giallo o azzurro deve estendersi a cavallo dell’orizzonte, e l’unico modo per calcolarne la distanza è in base all’altezza del baricentro, infatti si tratta di oggetti che sono facilmente soggetti ad occlusioni per la presenza di robot avversari e per le grandi dimensioni; più rilevante è il fatto che il diametro per la palla e la distanza fra i baricentri dei marker sono grandezze invarianti rispetto alla rotazione del piano immagine attorno all’asse ottico, mentre un discorso analogo non può essere fatto per la larghezza o altezza della porta, che non sono direttamente misurabili: ciò che si ha invece sono la larghezza e l’altezza della bounding-box, che dipendono dalla rotazione. Figura 4.37 Effetti della rotazione del piano immagine rispetto al mondo: il raggio della palla e la distanza fra i baricentri dei marker restano invariati, la larghezza e l’altezza della bounding-box della porta no. 126 4.5.3 Riconoscimento di linee Anche nel caso dei punti appartenenti alle linee del campo rilevati mediante edge-detection, è utile effettuare una selezione rispetto all’orizzonte o a piani posti ad un’altezza inferiore, per eliminare punti che hanno comunque un valore elevato del gradiente ma che non appartengono alle linee del campo, bensì a contorni di altri oggetti, ad esempio landmark, o all’ambiente circostante. Figura 4.38 Sull’immagine è stata sovrapposta la edge detection (in bianco) e la linea dell’orizzonte (in viola), si noti come al di sopra di essa si trovino bordi non appartenenti alle linee del campo. La tecnica di riconoscimento di forme scelta è la trasformata di Hough per le rette, perché si presta bene a complementare i limiti di un algoritmo di edge detection in versione semplificata che, per ragioni di efficienza, non garantisce la connettività dei contorni, oltre ad essere robusta rispetto al rumore e alle occlusioni. Ai punti così selezionati è possibile correggere la distorsione radiale e applicare il cambio di coordinate verso il sistema solidale col corpo del robot ed ivi effettuare la trasformata di Hough: questo approccio ha il 127 vantaggio di fornire direttamente distanza ed angolo dalle linee così riconosciute e di poter dimensionare la quantizzazione della matrice dei parametri ρ,θ in funzione della risoluzione spaziale reale che si vuole ottenere (ad esempio, quantizzando in maniera logaritmica ρ per tenere conto della perdita di precisione nella misura all’aumentare della distanza); d’altro canto, l’errore nel calcolo della matrice di cambio di coordinate che affligge i robot che si muovono attraverso gambe può generare problemi nel corretto riconoscimento delle linee; un’alternativa può essere la ricerca di linee direttamente nel piano immagine, effettuando il cambio di coordinate solo sulle rette così ottenute o su caratteristiche particolari quali le intersezioni fra linee; i pregi e i difetti di questo approccio sono i duali del precedente, oltre al fatto di essere praticamente inattuabile, per ragioni di costo computazionale, nel caso di primitive di ordine superiore: la ricerca di un cerchio di raggio noto nel piano del campo, a 2 parametri (costo O(n 2 ) ) si traduce nel piano immagine nella ricerca di un’ellisse prospettica ad 8 parametri (costo O(n 8 ) ). 128 Capitolo 5 Implementazione Il progetto del sistema esposto nel capitolo precedente è stato influenzato direttamente dalla necessità di ottenere un risultato consistente in presenza di vincoli stringenti, sia dal punto di vista delle risorse di elaborazione a disposizione, sia del tempo di risposta richiesto, pertanto l’aspetto implementativo ha avuto un ruolo non trascurabile nella scelta delle varie soluzioni, facendo pendere l’ago della bilancia a favore di tecniche che permettessero un’esecuzione efficiente. Dopo aver illustrato con uno schema il sistema progettato, verrà approfondita l’implementazione dei blocchi funzionali più importanti ai fini del progetto e signficativi dal punto di vista delle prestazioni: verrà prima progettato un nuovo algoritmo di thresholding dinamico computazionalmente più efficiente rispetto alla tecnica descritta in letteratura; successivamente, alla luce dei risultati dell’analisi delle caratteristiche del microprocessore di cui è dotato il sistema in esame, verrano sviluppati due nuovi algoritmi basati sui principi dell’USAN, uno dedicato alla riduzione del rumore, l’altro alla edge detection. 129 Figura 5.1 Schema funzionale del sistema di visione: le parti tratteggiate non sono state implementate in questo progetto, e per esse si rimanda a lavori specifici sul tema della localizzazione. 130 5.1 Thresholding dinamico Il thresholding dinamico convenzionale, così come descritto in letteratura (Capitolo 2), offre prestazioni sicuramente superiori al thresholding ottimo, oltre al fatto di essere più adatto al dominio in esame perché non fa assunzioni sulla modalità dell’istogramma, tuttavia la natura di questo algoritmo comporta, nel caso migliore, la scansione dell’intero istogramma ( 1 + log 2 m ) volte, se questo è m-modale, perché le chiamate ricorsive si espandono ad albero binario: se l’albero è completo (caso migliore), ogni nodo ha due figli, la profondità massima raggiunta è appunto log 2 m e il costo temporale di visita, se n è il numero di livelli dell’istogramma, è O(n ⋅ log 2 m) ; nel caso peggiore, un ramo ha profondità m e il costo è O(n ⋅ m) . Figura 5.2 Espansione dell’albero per m=4. 131 Figura 5.3 Numero minimo di scansioni dell’istogramma (caso migliore) necessarie per il thresholding dinamico convenzionale. Tuttavia, cercare i massimi e i minimi assoluti di una regione e suddividere rispetto ai minimi, iterando il procedimento, non è l’unico modo per partizionare l’istogramma in regioni monomodali: si può infatti immediatamente osservare come, effettuando una scansione da sinistra a destra dell’istogramma, le regioni siano caratterizzate da una zona in cui la funzione di probabilità è monotona crescente, che culmina in un massimo, e sfocia in una zona in cui è monotona decrescente, che termina quando la funzione inizia nuovamente a crescere; la prima zona è perciò caratterizzata dal segno positivo della derivata prima, che si annulla in corrispondenza del massimo e diviene negativa nella zona finale. Nel caso discreto, la derivata dell’istogramma I nel punto i si ottiene come semplice differenza ∆ i = I (i ) − I (i − 1) , e i punti di interesse per delimitare una regione monomodale possono essere individuati in base al segno di ∆ i e ∆ i −1 : • Inizio di una regione: ∆ i > 0; ∆ i −1 = 0 , se I (i − 1) = 0 la regione che inizia è isolata e i ne rappresenta l’inizio, altrimenti è presente 132 un’altopiano24 che la congiunge ad una regione precedente; in tale ipotesi, si sposta indietro l’inizio della regione nel punto di mezzo dell’altopiano; Figura 5.4 Inizio di una regione. • Fine di una regione: ∆ i = 0; ∆ i −1 < 0 , se I (i − 1) = 0 la regione che finisce è isolata e i-1 ne rappresenta la fine, altrimenti è presente un altopiano che la congiunge ad una regione seguente; in tale ipotesi, la determinazione del punto di fine di questa regione viene rimandata al momento in cui si raggiungerà la fine dell’altopiano; 24 Un altopiano è un intervallo dell’istogramma in cui il valore I(i) è costante e diverso da 0. 133 Figura 5.5 Fine di una regione. • Punto angoloso: ∆ i > 0; ∆ i −1 < 0 in i termina una regione e ne inizia un’altra, il punto i viene assegnato all’inizio della nuova regione. 134 Figura 5.6 Punto angoloso fra due regioni adiacenti. Il modo di ciascuna regione viene determinato incrementalmente a partire dal punto di inizio, confrontando ogni nuovo valore letto con il massimo relativo alla regione sin lì individuato, fino al raggiungimento del punto di fine. L’uscita di questo stadio è un vettore (per ciascuna componenente cromatica), avente tanti elementi quanti quelli dell’istogramma (256 in questa implementazione), che associa a ciascun livello di intensità presente nell’istogramma il corrispondente valore modale, così costruito: ogni volta che viene raggiunto il punto di fine di una regione nel processo di analisi dell’istogramma, si scrive sull’intervallo del vettore di uscita, delimitato dall’inizio e dalla fine della regione, il valore modale ricavato; tale vettore, indicato nello schema generale come istogramma monomodale serve in fase di classificazione per effettuare il mapping fra i colori dei punti dell’immagine e i modi corrispondenti, semplicemente utilizzando il valore U o V del pixel in esame come indice nell’accesso ad esso. L’algoritmo qui progettato effettua la scansione di ogni istogramma una volta sola, indipendentemente dalla modalità dell’input, per cui il costo asintotico è O(n) , dove n è il numero di livelli dell’istogramma: tale risultato 135 è molto più favorevole rispetto all’ O(n ⋅ log 2 m) che caratterizza il caso migliore dell’algoritmo descritto in letteratura. 5.2 SUSAN Nonostante l’importanza del processo di segmentazione dinamica, gli stadi del sistema di gran lunga più costosi in termini di tempo di elaborazione sono il filtraggio per la riduzione del rumore e la edgedetection, in quanto operano su un insieme di dati superiore di due ordini di grandezza per cardinalità rispetto agli istogrammi: l’immagine è infatti composta da tre piani Y,U,V di 176x144 punti ciascuno, mentre gli istogrammi sono rappresentati da 256 livelli; effettuare la convoluzione di ogni pixel con un intorno di dimensione m significa moltiplicare ulteriormente per tale fattore il costo di esecuzione. Da ciò segue la necessità di svolgere ciascuna operazione coinvolta nel processo di filtraggio nel modo più efficiente possibile, e ciò non può prescindere da un’analisi delle peculiarità del processore di elezione su cui sarà eseguito l’algoritmo (la variante MIPS installata sul robot AIBO), pur tenendo in considerazione caratteristiche più generali comuni a processori di largo utilizzo. 5.2.1 Analisi delle caratteristiche del processore La famiglia di processori MIPS R4000, descritta in [Hei94], presenta un’architettura decisamente efficiente, con un ampio spazio di registri a disposizione (32 di uso generale e 32 in virgola mobile), architettura superpipelined in cui la maggior parte delle istruzioni sono sovrapponibili nell’esecuzione, coprocessore matematico integrato. Una caratteristica notevole è il nucleo di esecuzione operante ad una frequenza doppia rispetto al clock principale (“double-pumped”), per cui il throughput di picco teorico è di 2 operazioni per clock; questa forma di 136 parallelismo a livello di flusso di istruzioni è più efficiente rispetto alle architetture cosiddette superscalari ([HP95], [HP96]), in cui il processore è in grado di eseguire due o più istruzioni in parallelo per ciclo di clock sotto opportune condizioni, perché, a fronte di un’identico throughput di picco, è minore la frequenza degli stalli della pipeline o di una risorsa di esecuzione dovuta alla dipendenza fra i dati. Un altro aspetto di rilievo è la presenza di un’unità di calcolo in virgola mobile implementata come un coprocessore indipendente, dotato del proprio insieme di registri, accessibili anche al processore principale per le operazioni di lettura e scrittura, e capace di operare in parallelo rispetto all’unità centrale. Figura 5.7 Istruzioni floating-point, con tempo di latenza25 associato e periodo di interdizione26. 25 La latenza (di esecuzione) è il numero di cicli richiesti per il completamento di un’istruzione dal momento in cui entra nello stadio di esecuzione. 137 Le operazioni che rappresentano il percorso più critico dal punto di vista dell’esecuzione sono l’addizione (ADD), la moltiplicazione (MUL), e le operazioni di conversione da numeri interi (pixel) a floating-point (CVT.S.W, CVT.W.S); da tenere in considerazione anche la divisione (DIV) e il test condizionale (COND); le corrispondenti operazioni intere sono: Figura 5.8 Istruzioni intere su operandi a 32 bit. Un periodo di interdizione pari a 0 significa che l’istruzione non può essere sovrapposta con nessun’altra operazione di CPU. Le corrispondenti operazioni a 64 bit hanno latenza e periodo di interdizione circa doppi. Le operazioni aritmetiche di CPU che non sono in tabella, quali addizione e shift, hanno latenza e periodo di interdizione unitari, pertanto sono molto efficienti; da notare che moltiplicazione e divisione sono invece più lente delle corrispondenti operazioni floating-point, in particolare la divisione, che paralizza la pipeline per 75 cicli. Altre istruzioni importanti sono i salti condizionali (branch) che sono implementati con la tecnica del delay-slot: l’istruzione seguente un branch viene sempre eseguita mentre viene letto l’indirizzo di destinazione; sono richiesti complessivamente 3 cicli di clock nel caso in cui il salto venga effettuato, per il calcolo dell’indirizzo di destinazione; altrimenti non si incorre in alcuna penalità; esso è l’unico costo associato a questa operazione, in quanto in flusso delle istruzioni avviene rigidamente in ordine sequenziale, a differenza di processori più moderni che fanno uso di 26 Il periodo di interdizione è il numero cicli che devono trascorrere prima che si possa mandare in esecuzione una nuova istruzione dello stesso tipo o che usa le stesse risorse di esecuzione (ad esempio, addizione e sottrazione). 138 predizione di salto ed esecuzione speculativa27, che nel caso di predizione errata comporta la perdita di decine di cicli di clock per lo svuotamento della pipeline. Il principale fattore limitante le prestazioni di questa efficiente architettura è l’assenza, nella variante embedded in uso sull’AIBO, di una cache di secondo livello, in quanto la cache di primo livello, di 8Kbyte dati più 8Kbyte istruzioni, non è sufficiente a lavorare efficientemente su insiemi di dati ampi. 5.2.2 Ottimizzazione degli accessi in memoria La parte più critica dal punto di vista delle prestazioni degli algoritmi SUSAN smoothing ed edge detection è sicuramente la funzione di correlazione, infatti nel processamento di un’immagine di N pixel con una matrice di convoluzione di M pixel, essa viene invocata NxM-1 volte; oltretutto, è una funzione non lineare, che implica l’esecuzione di operazioni costose quali elevamento a potenza e divisione, per cui può richiedere complessivamente centinaia di cicli di clock per ogni esecuzione. c ( p, p 0 ) = e ( I ( p ) − I ( p0 ) − T k ; k ∈ {2;6} (5.1) Osservando la funzione di correlazione, si nota però una caratteristica importante: il dominio della funzione è dato da tutti i valori che la differenza I ( p ) − I ( p 0 ) può assumere, e poiché gli spettri Y,U,V dell’immagine sono quantizzati in 256 livelli ciascuno, I ( p ) − I ( p 0 ) ∈ [−255;255] ; poiché tale differenza nella formula è elevata ad una potenza pari (2 o 6), di tale intervallo ha senso considerare solo i valori positivi, quindi [0;255]. 27 L’esecuzione speculativa è l’esecuzione di istruzioni secondo il ramo più probabile di un branch, è detta “speculativa” in quanto tali istruzioni vanno in esecuzione prima di avere risolto la direzione del branch. 139 Essendo la funzione definita su un intervallo abbastanza contenuto di valori, può essere calcolata off-line e memorizzata in un vettore di 256 elementi (look-up table); durante l’esecuzione del filtro SUSAN, basta così utilizzare il valore assoluto della differenza I ( p) − I ( p 0 ) come indice del vettore per ottenere il valore della correlazione fra p e p0. Su un processore dotato di un quantitativo ragionevole di cache, come le moderne CPU per personal computer, non ci sarebbe bisogno di particolari accortezze in questo procedimento, ma nel caso di un processore dotato di un cache dati complessiva di appena 8Kbyte, è necessario effettuare delle ottimizzazioni al fine di dimensionare la look-up table in modo da avere un’alta probabilità che essa sia interamente contenuta nella cache ogni volta che sia necessario accedervi, e che possa venire ricaricata, in caso non sia presente, con un numero minore possibile di accessi in memoria principale, che ha tempi di latenza superiori di due ordini di grandezza. Un primo aspetto su cui occorre porre l’attenzione è la quantizzazione dell’immagine della funzione, essa infatti nel caso continuo appartiene all’intervallo [0;1], ma ciò su computer potrebbe essere realizzato solo attraverso una rappresentazione in virgola mobile, che richiede 4 byte per elemento in precisione singola, 8 byte in precisione doppia, che si traducono in 1 e 2Kbyte rispettivamente di occupazione di memoria complessiva, troppi rispetto alla dimensione della cache; lavorando invece con numeri interi, si può rappresentare la funzione attraverso singoli byte, effettuando una quantizzazione dell’immagine della funzione a 256 valori (il massimo ammesso dal tipo byte); l’occupazione di memoria complessiva in questo caso è di 256byte. Da osservazioni sperimentali su immagini e relativi istogrammi, questa perdita di risoluzione della funzione di correlazione non sembra avere alcun effetto negativo apprezzabile sulla qualità dell’algoritmo. 140 L’unico problema con l’uso di interi per la rappresentazione della look-up table è l’assenza di una istruzione specifica del processore per il calcolo del valore assoluto, cosa che in virgola mobile può essere fatta con l’istruzione ABS, poco costosa su questo processore; tuttavia, l’esecuzione dei calcoli necessari alla convoluzione in virgola mobile, per quanto efficienti, sono significativamente più costosi rispetto ai calcoli interi, in particolare l’operazione di addizione che è 4 volte più lenta, oltre alla necessità di ricorrere ad istruzioni di conversione di formato interi->virgola mobile perché i punti dell’immagine sono memorizzati sotto forma di interi; si può allora raddoppiare la dimensione della look-up table per tenere conto anche di valori negativi di I ( p) − I ( p 0 ) : poiché un array non può avere indice negativo, è necessario traslare l’origine della funzione di correlazione nell’elemento di mezzo dell’array di dimensioni doppie. In questo modo, la dimensione dell’array in cui è memorizzata la funzione di correlazione sale a 511byte (non 512, perché l’origine del dominio non viene duplicata); per ridurre tale valore, si può cercare una quantizzazione anche del dominio della funzione, individuando un compromesso ottimale fra prestazioni e qualità della risposta: sperimentalmente, si è ricavato che effettuando una quantizzazione 4:1 l’immagine risulta indistinguibile rispetto alla versione non quantizzata, e le prestazioni sfiorano il massimo; con una quantizzazione 8:1 si raggiunge il frame rate massimo, ma il modesto incremento prestazionale di circa il 5% non giustifica la perdita di qualità, pur lieve; rapporti di quantizzazione superiori non producono alcun ulteriore aumento di velocità e introducono distorsioni dell’immagine via via più accentuate; in ultima analisi, si è quindi individuato come ottimo il rapporto 4:1, che si traduce in una dimensione complessiva della tabella di 127byte. 141 Figura 5.9 SUSAN: look-up table per funzione di correlazione quantizzata 4:1. Nonostante l’accesso alla tabella quantizzata richieda un’operazione di divisione per 4 del valore di ingresso, e la divisione sia di per se un’operazione molto lenta, lavorando su interi la divisione per numeri che siano potenze di 2 può essere ottenuta come shift a destra di un numero di posizioni pari all’esponente di 2, in questo caso 4=22; l’operazione di shift è eseguita in un solo ciclo di clock dalla maggior parte dei processori, e in questo il MIPS R4000 non fa eccezione. Figura 5.10 Operazione di shift a destra. 142 Confrontando questa implementazione con l’alternativa offerta dall’implementazione della funzione valore assoluto (ABS) ottenuta tramite test per determinare fra I(p) e I(p0) quale sia il maggiore, con look-up table di 64 elementi, il risultato è stato favorevole alla prima, per cui questa è la soluzione che è stata scelta per la realizzazione dell’algoritmo complessivo. Un altro aspetto critico nel determinare la velocità d’esecuzione dei filtri è il percorso di accesso alla matrice che rappresenta l’immagine stessa: considerando un maschera di convoluzione 3x3, è evidente come, per filtrare ogni pixel, sia necessario accedere anche ad 8 altri pixel che ne costituiscono l’intorno, per cui si può ben capire l’importanza di minimizzare il numero di volte che uno stesso pixel viene letto dalla memoria principale, potendo ritrovare i punti del suo intorno già letti all’interno della cache. L’immagine fornita dal dispositivo di acquisizione del robot è memorizzata come un array monodimensionale dove tutti i punti appartenenti ad una lina orizzontale sono memorizzati consecutivamente, una componente spettrale dopo l’altra, per cui per saltare da una riga alla successiva, occorre sommare all’indice dell’array corrente tre volte il numero di punti che costituiscono una linea. Figura 5.11 Rappresentazione dell’immagine in memoria. 143 Per far sì che l’immagine venga letta dalla memoria una volta sola durante la convoluzione, è necessario poter ritrovare in cache tutti i punti dell’intorno ad eccezione del punto più avanti nell’ordine di scansione, che per una matrice 3x3 è il punto più in basso a destra: ogni volta che la maschera viene spostata di una posizione verso destra o verso il basso, esso conterrà un valore nuovo, mentre tutti gli altri punti della maschera sono già stati letti in un passo precedente. Figura 5.12 Filtraggio del punto contrassegnato dalla croce: nella scansione per riga, i punti rappresentati in grigio sono già stati letti dalla memoria almeno una volta, l’unico punto nuovo appartenente al suo intorno è stato evidenziato in nero; i punti in grigio scuro rappresentano il numero minimo di punti che devono essere sempre presenti in cache per garantire che l’immagine venga letta una sola volta dalla memoria. Perché quindi ogni punto venga letto dalla memoria una e una sola volta, è necessario che durante la convoluzione siano sempre presenti in cache le ultime due righe o colonne (a seconda dell’ordine di scansione orizzontale o verticale) su cui è già passato l’algoritmo: poichè le righe sono lunghe 176 pixel e le colonne 144, si potrebbe pensare che una scansione dell’immagine per colonna sia più efficiente nello sfruttamento della cache, perché sarebbe sufficiente trovare 2x144 elementi anziché 2x176. Tale ragionamento è in realtà errato, perché non tiene conto di una caratteristica importante degli accessi in memoria comune ormai a tutti i 144 processori: per minimizzare l’effetto della latenza della memoria principale sfruttandone maggiormente la banda passante, per il principio di località degli accessi, ogni volta che si cerca di leggere (o scrivere) un dato che non è presente in cache, non viene letto il dato isolato, ma viene trasferito un blocco di memoria che lo contiene, di dimensione prefissata, che prende il nome di cache line; nel caso del MIPS R4000 la dimensione minima28 di una cache line è di 16 byte, e per come sone organizzati i dati in memoria (per riga), una scansione per colonna comporterebbe la necessità di conservare 2x16x144=4.6Kbyte pari a oltre la metà della cache dati; nel caso di una scansione per riga si ha un valore oltre 10 volte inferiore, pari a 2x176=352byte, pertanto è sicuramente la scelta più efficiente. In realtà anche nel caso della scansione per riga, a meno che i dati in memoria non siano allineati modulo 16, al termine della scansione di una riga vengono letti dei valori che appartengono alla riga successiva di un’altra componente dell’imagine, per via dell’ordine di memorizzazione già illustrato; ci si può chiedere se sia allora più conveniente processare insieme le varie componenti spettrali oppure effettuare 3 scansioni separate dell’immagine: la scelta più efficiente è la seconda, infatti nel caso peggiore verrebbero letti 15 byte in più per ogni riga (ciò come detto dipende dall’allineamento in memoria dell’array), per un totale di 2x191=382byte, mentre per effettuare il filtraggio in parallelo delle 3 componenti dell’immagine, la quantità di dati da mantenere in cache sarebbe di 3x2x176=1056byte. Considerando quindi la memoria necessaria per la look-up table e per la scansione dell’immagine, questo algoritmo può funzionare alla massima velocità utilizzando al più 382+127=509byte, pari a circa 1/16 della dimensione della cache complessiva; se la visione fosse l’unico processo, questa condizione sarebbe quindi sempre verificata, tuttavia ciò non è possibile a causa dei cambi di contesto effettuati dalla CPU in conseguenza 28 A seconda della modalità di funzionamento del processore (32 o 64 bit), la cache line può essere di 16 o 32 byte. 145 dell’esecuzione concorrente di altri processi necessari al funzionamento del robot. 5.2.3 Ottimizzazione delle istruzioni Il modo più semplice per accedere all’immagine è attraverso un insieme di funzioni messe a disposizione dal sistema operativo del robot, in particolare, esiste una funzione che permette di leggere direttamente il valore di una componente di un pixel attraverso la sua posizione (x,y) all’interno dell’immagine; il problema di tale approccio è che non è efficiente, sia perché le chiamate a funzione di per sé hanno un costo dovuto al salvataggio e al ripristino di registri sullo stack e alla necessità di effettuare un doppio salto di indirizzo, sia perché per permettere l’accesso casuale all’array, tale funzione deve necessariamente contenere un’operazione di moltiplicazione del valore y per la larghezza dell’immagine: la moltiplicazione è un operazione abbastanza costosa, come visto, e utilizzando tale funzione verrebbe effettuata NxM volte solo per leggere i pixel dell’immagine e il loro intorno; discorso analogo, a parte l’evitare la chiamata a funzione, se si accedesse al vettore immagine come ad un array bidimensionale attraverso l’aritmetica dei puntatori. Sfruttando la sequenzialità degli accessi è però possibile evitare moltiplicazioni semplicemente mantenendo un contatore che rappresenta la posizione corrente all’interno dell’array, incrementato di 1 ogni volta che si passa al pixel adiacente fino al termine della riga, in cui occorre sommare un valore pari a 2 volte la lunghezza della riga, per saltare lo spazio di memoria occupato dalle righe relative agli altri spettri; nell’effettuare la convoluzione, per ottenere i punti che hanno coordinata y superiore o inferiore rispetto al nucleo basta sommare o sottrarre dall’indice una quantità pari a 3 volte la larghezza di una riga. L’algoritmo del filtro sin qui progettato è quindi: SUSAN Smoothing: 146 Figura 5.13 Algoritmo SUSAN Smoothing. Con questo algoritmo di filtraggio, grazie all’insieme di ottimizzazioni sin qui introdotte, l’intero sistema di visione, in concorrenza con altri processi, riesce a processare circa 7-8 fotogrammi al secondo a 200MHz (con la maschera 3x3): tale risultato di per sé può già essere considerato adatto ad una elaborazione in tempo reale, anche se, per effettuare al meglio il tracciamento di oggetti veloci come la palla, sarebbe desiderabile superare i 10 fotogrammi al secondo. Tale soglia può essere raggiunta con questo algoritmo utilizzando una maschera di convoluzione che consideri solo i 4 vicini del nucleo nelle posizioni nord, sud, est e ovest; come si vede, a fronte di una riduzione del 50% del numero di punti di intorno considerati, l’incremento di prestazioni è solo del 25%; in tal senso è molto probabile che il collo di bottiglia sia da attribuirsi all’operazione di divisione necessaria a normalizzare il risultato, dovuta al fatto che la funzione di correlazione assume valori compresi nell’intervallo [0;255] anziché [0;1]; oltre a ciò, nel calcolo della media dei 147 valori all’interno dell’USAN, viene effettuata una moltiplicazione per ogni punto appartenente alla maschera, e tali operazioni rappresentano sicuramente un fattore importante nel costo complessivo. Come detto nel Capitolo 4, utilizzando una funzione di correlazione binaria anziché gaussiana, è possibile apportare delle modifiche importanti all’algoritmo che permettono di migliorarne in modo significativo le prestazioni: • Lo scopo delle moltiplicazioni nell’algoritmo base è di pesare i punti nella media in funzione del loro valore di correlazione; in questo caso però la funzione è binaria, perciò basterebbe un’operatore condizionale per verificare se un punto appartiene o no all’USAN per includerlo o meno nella media; sfortunatamente tale operazione richiederebbe un test e un branch, pertanto non sarebbe molto più efficiente di una moltiplicazione; sfruttando però il fatto che la rappresentazione binaria di -1 è 11111111, e la rappresentazione di 0 è ovviamente 00000000, si può far sì che la funzione di correlazione ritorni -1 o 0 e così utilizzare il valore ritornato come maschera di bit per fare un operazione di AND (che ha costo d’esecuzione di 1 clock) con il valore di luminosità del pixel al posto della moltiplicazione; • Il valore di correlazione così definito può anche essere usato per determinare l’area dell’USAN (cambiata di segno), a tale scopo basta infatti sommare i valori da essa ritornati per ogni punto d’intorno; poiché con questo tipo di maschera tali punti sono solo 4, si possono individuare 5 diverse situazioni: • Area dell’USAN pari a -4: per ottenere il valore medio dell’USAN, bisogna dividere per 4, operazione ottenibile a costo unitario tramite shift a destra di 2 posizioni; • Area dell’USAN pari a -3: bisognerebbe dividere per 3, ma poiché il nucleo è comunque correlato con il resto 148 dell’USAN, basta sommare il valore del nucleo ed effettuare di nuovo lo shift a destra di 2 posizioni; • Area dell’USAN pari a -2: la divisione è per 2, come shift a destra di una posizione; • Area dell’USAN pari a -1: si somma il nucleo e si effettua lo shift a destra di una posizione; • Area dell’USAN pari a 0: il punto è isolato, perciò bisogna trovare il mediano, non è però necessario ordinare completamente il suo intorno, ma basta trovare i suoi due valori di mezzo e farne la media, ciò può essere fatto dividendo l’intorno in due coppie e ordinandole separatamente, con un semplice test; si confrontano così i due massimi ottenuti, prendendo il minore, e i due minimi, prendendo il maggiore; essi sono i valori di mezzo dell’intorno. • In questo modo, non viene effettuata alcuna divisione, ma è necessario eseguire 5 operazioni condizionali; l’impatto di esse può essere minimizzato annidando i confronti in modo che la situazione più probabile richieda un solo test, la seconda 2, la terza 3 e così via, minimizzando il costo d’escuzione dell’algoritmo nel caso più comune, che ha quindi il maggior impatto sulle prestazioni. 149 Figura 5.14 Percentuale di pixel dell’immagine aventi USAN di una certa area per valore del threshold di luminosità: la linea rossa rappresenta area 4, la blu area 3, la viola area 2, la verde area 1, la nera area 0. Osservando il grafico, costruito su un campione di immagini riprese dalla telecamera del robot, si nota come, a parte i casi degeneri caratterizzati da un valore di threshold inferiori a 4, in cui l’algoritmo comunque è inutilizzabile perché non si comporta correttamente (per threshold pari a 0, coincide con il filtro mediano), già a partire da un threshold pari a 8, oltre il 90% dei pixel abbiano USAN di area 3 o 4, e per i valori nell’ordine di 1820, in cui il risultato qualitativo per questo tipo di immagini è massimo, la quasi totalità dei pixel abbiano area dell’USAN pari a 4 e il costo di esecuzione dell’algoritmo è molto prossimo a quello di un box-filter di pari maschera; la frequenza di elaborazione media del sistema di visione usando il filtro così progettato è di circa 14 fotogrammi al secondo a 200MHz; in conseguenza di tale risultato, il filtro qui realizzato è stato battezzato SUSAN Smoothing “Real Time”. 150 SUSAN Smoothing Real Time: Figura 5.15 Nel caso dell’operatore di edge detection, questo tipo di maschera non si può usare, perché non rileva bene i bordi diagonali: la maschera minima utilizzabile è pertanto la 3x3, tuttavia l’algoritmo di per sé è esente da moltiplicazioni e divisioni, ed è pertanto efficiente. SUSAN Edge Detector “Lite”: 151 Figura 5.16 La frequenza di elaborazione media del sistema di visione comprensivo di Smoothing “Real Time” e Edge Detection, su processore a 400MHz, è superiore a 20 fotogrammi al secondo. 5.3 Estrazione oggetti Il processo che porta dalla formazione dei blob al riconoscimento degli oggetti è stato implementato e testato con successo nell’ambito di questa progetto, tuttavia la sua esposizione non risulta significativa ai fini di questa trattazione, non ponendo particolari problemi dal punto di vista delle prestazioni. 152 Capitolo 6 Risultati 6.1 Ambiente di prova Allo scopo di valutare i risultati conseguiti con questa ricerca, il sistema progettato è stato messo a confronto con un algoritmo tradizionale, basato unicamente sulla classificazione statica descritta nella Sezione 2.1.1, in un ambiente in cui potesse essere messa alla prova la robustezza della segmentazione in condizioni operative più realistiche rispetto a quelle delle gare. Il campo di gioco è stato perciò posto in un ambiente dove l’illuminazione è rappresentata da: • una componente artificiale sotto forma di lampade al neon poste sul soffitto della stanza, modellabili come una sorgente di luce diffusa a temperatura di colore di 4300K; • una componente naturale, di intensità variabile nell’arco della giornata, rappresentata da luce solare che filtra attraverso delle tende in prossimità della porta azzurra del campo, modellabile come una sorgente di luce direzionale a temperatura di colore di 6500K. • oltre a ciò, i landmark aventi metà inferiore di colore rosa sono parzialmente in ombra rispetto ad entrambe le sorgenti, per la prossimità di scrivanie. 153 Figura 6.1 Condizioni di illuminazione sul campo di gioco. Come termine di paragone, è stato utilizzato lo stesso algoritmo di classificazione statica impiegato nel nuovo sistema, senza gli stadi di filtraggio e thresholding dinamico, né edge detection: in questo modo, da un lato si può verificare il miglioramento introdotto specificamente da questi stadi aggiuntivi, dall’altro è possibile effettuare il confronto in condizioni non stazionarie, infatti questa tecnica di classificazione è poco vincolata alla componente di luminosità, a differenza di rappresentazioni quali quelle descritte in [VLVRSC02], [GT02] e [CSVYHPS01] che ottengono migliori risultati qualitativi ma solo in condizioni di luce stabili. 154 6.2 Esperimenti29 Il primo risultato che merita di essere rimarcato è la compressione del dominio di classificazione associato all’apprendimento da un’imagine di esempio, dovuto sia alla filtraggio del rumore che al thresholding dinamico. Figura 6.2 Immagine d’esempio. Figura 6.3 Immagine segmentata, Sistema 1. 29 Da qui in poi, per chiarezza e concisione di notazione, si indicherà il sistema basato sul solo thresholding statico come “Sistema 1”, mentre il nuovo sistema qui progettato verra indicato come “Sistema 2”. 155 Figura 6.4 Immagine segmentata Sistema 2. Come si vede dalle figure, nel segmentare la prima immagine d’esempio il comportamento di entrambi i sistemi è buono, si nota una leggera rumorosità nell’algoritmo convenzionale, che comunque non comporta alcun problema al corretto riconoscimento degli oggetti; il nuovo sistema non classifica il bianco, sebbene ciò sia comunque possibile, ma rileva i contorni delle linee del campo tramite edge detection. Si osservi ora la corrispondente occupazione della mappa di classificazione UV: 156 Figura 6.5 Mappa di classificazione UV, relativa alla figura 6.1, Sistema 1: i colori (rosa, verde, giallo, bianco) indicano il valore assegnato ad una certa zona della mappa Figura 6.6 Mappa di classificazione UV, relativa alla figura 6.1, Sistema 2. 157 Come si vede, nel caso del Sistema 2, la classificazione di un’immagine occupa appena pochi punti sparsi nella mappa di classificazione, questo perché essa avviene solo sui modi dell’istogramma, che rappresentano delle regioni omogenee dell’immagine, mentre con una tecnica tradizionale la classificazione avviene a livello di pixel, quindi è necessario classificare tutti i valori degli spettri degli oggetti che si vogliono estrarre. La conseguenza è che in nuovo sistema è in grado di discriminare colori che, a causa delle condizioni di illuminazione, tendono a sovrapporsi nel piano cromatico UV: Figura 6.7 158 Figura 6.8 Immagine segmentata con il Sistema 1. Figura 6.9 Color map usata per segmentare l’mmagine precedente. La Color Map riportata in figura 6.9 è stata ottenuta imponendo che la parte inferiore del landmark posto nell’angolo in alto a sinistra in figura 6.7 159 sia verde, come è in realtà: la conseguenza è stata però che anche la porta azzurra, in alto a desta, sia stata classificata erroneamente come verde, perché nell’immagine le componenti cromatiche dei due oggetti si sovrappongono, in conseguenza dell’illuminazione non ottimale e della scarsa sensibilità della telecamera; tale risultato non è accettabile, perciò bisogna imporre che la porta venga riconosciuta come azzurra. Figura 6.10 160 Figura 6.11 Nuova Color map: nel riquadro tratteggiato è stato evidenziato il cambiamento rispetto alla precedente. Il risultato della nuova associazione è che una porzione del piano UV che prima era classificata come “verde” è stata cambiata in “azzurro”: la porta è ora identificabile correttamente dalle funzioni di estrazione oggetti, ma una parte del landmark verde è adesso classificata come azzurra: ciò non pone problemi nel riconoscimento in questo fotogramma, perché l’area verde è comunque superiore per dimensioni all’area azzurra. Ripetendo la segmentazione dell’immagine in figura 6.7 dopo aver ultimato il processo di calibrazione della Color map utilizzando altri fotogrammi che riprendono varie porzioni di campo sotto differenti condizioni di luce, si ottiene: 161 Figura 6.12 Nell’immagine, si nota che la parte del landmark verde classificata in modo scorretto come azzurra ha dimensioni simili alla parte riconosciuta correttamente, pertanto il sistema di estrazione degli oggetti potrebbe identificare erroneamente tale marker come “rosa-azzurro”, e ciò avrebbe come conseguenza un errore (temporaneo) del robot nell’orientarsi sul campo. Questo problema può essere superato utilizzando il nuovo sistema, che grazie alla capacità di filtrare l’informazione non significativa, riesce ad evitare la sovrapposizione fra le due regioni: 162 Figura 6.13 L’immagine ottenuta, oltre ad essere globalmente meno affetta da rumore, non presenta situazioni problematiche per il corretto riconoscimento degli oggetti presenti nella scena. Una situazione analoga può essere rintracciata nel fotogramma seguente: 163 Figura 6.14 164 Figura 6.15 Sistema 1. In questo fotogramma, la parte verde del landmark, nell’angolo in alto a sinistra, è del tutto irriconoscibile. 165 Figura 6.16 Sistema 2. L’ultimo elemento che occorre evidenziare è l’opportunità dell’uso della edge detection per il riconoscimento delle linee, che permette sia una rilevazione molto più robusta a variazioni di luminosità della scena, sia una migliore localizzazione dei bordi; si consideri in proposito l’immagine seguente: 166 Figura 6.17 167 Figura 6.18 Immagine segmentata, Sistema 1. Osservando la figura 6.18, si nota come le due righe più grandi, che delimitano il campo, siano diversamente illuminate, infatti il bordo parallelo all’osservatore si trova nella zona d’ombra del terreno di gioco, dovuta alla prossimità di suppellettili; nell’immagine segmentata, si nota come tale bordo venga rilevato in maniera molto confusa e frammentata; si può allora intervenire sulla Color map per includere nella classificazione delle linee quei valori che non sono stati correttamente riconosciuti. 168 Figura 6.19 Nuova immagine segmentata, Sistema 1. In questo caso, l’aver risolto il precedente problema ne ha però aperto uno nuovo, infatti adesso i muri, che hanno luminosità nell’immagine simile al nuovo bordo, vengono classificati come bianco, e ciò rende difficile individuare le linee. Utilizzando la edge detection, i bordi vengono rilevati correttamente sotto un’ampia gamma di condizioni di luce: 169 Figura 6.20 Sistema 2, rilevamento delle linee mediante edge detection. 6.3 Ricostruzione della scena Alla luce degli ottimi risultati ottenuti dal sistema di segmentazione, è stata svolta una breve analisi delle prestazioni delle routine di alto livello di ricostruzione dell’informazione tridimensionale, in particolare misurando la corrispondenza fra le distanze dai landmark stimate dal sistema di visione e le distanze reali, fattore molto importante nel determinare l’accuratezza che può essere raggiunta da un algoritmo di auto localizzazione che ne faccia uso . Tali risultati sono così riassumibili: 170 Distanza Reale Valore medio rilevato Deviazione Standard 1m 95cm 10cm 2m 190cm 10cm 3m 280cm 20cm 4m 370cm 30cm A parte un lieve errore sistematico per difetto nella stima della distanza di circa il 5-7%, la deviazione standard è sufficientemente contenuta anche per landmark molto lontani. Nel caso della palla e delle porte, la caratteristica più importante è la massima distanza a cui esse sono rilevabili: è stato verificata la capacità di individuare la palla correttamente fino a circa 4 metri, con una deviazione standard della misura simile al caso dei landmark; per le porte, in virtù anche delle loro dimensioni, non ci sono problemi anche a distanze superiori ai 5 metri. 6.4 Applicazione: localizzazione basata su landmark Grazie all’affidabilità dell’informazione visiva acquisita con questo sistema, è stato possibile sviluppare una tecnica di localizzazione basata su landmark con tracciamento della posizione mediante filtro di Kalman30. Il filtro di Kalman è un’osservatore asintotico dello stato, ottimo nel caso di sistemi lineari31, che permette di stimare lo stato interno di un sistema sulla base del modello del processo, della distribuzione di probabilità dell’errore di misura dell’uscita del sistema, e della distribuzione di 30 Per un’introduzione sul filtro di Kalman, si veda [WB95]. 31 Una trattazione completa sulla teoria dei sistemi può essere trovata in [Mon00]. 171 probabilità dell’errore sulla stima del modello del sistema; nel caso in esame, lo stato del sistema è rappresentato dalla terna [ x y θ ] che esprime la posizione e l’orientazione del robot nel sistema di riferimento solidale con il campo. Quando il robot viene posto sul campo di gioco, la sua posizione gli è interamente ignota, pertanto è necessario effettuare la localizzazione assoluta: vedendo due landmark (i=1,2), senza che il robot si sposti, se ne hanno a disposizione sia le coordinate relative alla posizione del robot R R W ( x mi , y mi ) , sia le coordinate assolute ( x mi , y Wmi ) , note a priori, nel sistema di riferimento del campo; si hanno allora a disposizione 4 equazioni che permettono di risolvere le 3 incognite [ x Wr x Wmi cosθ rW W y mi = sin θ rW 1 0 − sin θ rW cosθ rW 0 y Wr θ rW ] : R x rW x mi W R y r ⋅ y mi ; i = 1,2 1 1 (6.1) Posto: a = cosθ rW b = sin θ rW v = x mR1 − x mR 2 w = y mR1 − y mR 2 k=x W m1 −x j=y W m1 − y mW2 (6.1’) W m2 v − w M = w v e risolvendo il sistema, si ottiene: 172 k a = M −1 ⋅ j b x rW = x Wm1 − a ⋅ x mR1 + b ⋅ y mR1 (6.2) y Wr = y Wm1 − b ⋅ x mR1 − a ⋅ y mR1 b θ rW = arctan( ) a A partire dalla posizione iniziale così determinata, integrando di volta in volta i dati di spostamento relativo ottenuti dal modulo di locomozione del robot (odometria) con l’informazione visiva sui landmark attraverso un filtro di Kalman lineare, si effettua il tracciamento della posizione: a differenza della localizzazione assoluta, non è necessario vedere due landmark per localizzare il robot, ma basta aggiornare la stima dello stato del sistema al passo precedente con la posizione relativa rispetto ad un marker solo. In generale, il modello del sistema in esame non è lineare, in quanto per uno spostamento relativo di [∆x ∆y ∆θ ] nel sistema di riferimento del robot, ∆x, ∆y dipendono da θ secondo la matrice di rotazione; il modello può essere però reso lineare separandolo in due processi, uno che contolla l’evoluzione della posizione (x, y), l’altro dell’orientazione θ ; tale scelta implica l’assunzione che questi due sottosistemi siano indipendenti, e questo è ragionevole nel caso della rilevazione visiva, in cui la distanza e l’angolo dal landmark vengono stimati in base a proprietà differenti dell’oggetto presente nell’immagine, mentre lo stesso non può dirsi nel caso dell’odometria, tuttavia l’errore odometrico di per sé tende a divergere se lo stato non viene aggiornato sufficientemente di frequente attraverso rilevazioni sensoriali. Il processo è allora stato così modellato: θˆk− = Akθ θˆk −1 + Bkθ u θk + wθk p( wθk ) = N (0, Qkθ ) θ − k P θ k −1 =P +Q (6.3) θ k 173 L’equazione (6.3) rappresenta il predict del filtro di Kalman relativo all’orientazione del robot sul campo, e serve ad integrare i dati dell’odometria: u θk = ∆θ kodom Akθ = I (6.3.1) Bkθ = I wθk è l’errore di processo relativo all’incertezza sul modello, e tramite il filtro di Kalman la sua densità di probabiltà deve avere andamento gaussiano a valor medio nullo e varianza data dalla matrice Qkθ , Pkθ − è la matrice di covarianza dell’errore d’angolo sin qui determinato; poiché il sistema è unidimensionale, Qkθ = q ⋅ ∆θ kodom , dove q è un paramentro da determinare opportunamente. Dopo aver aggiornato lo stato stimato θˆk− , esso verrà utilizzato per determinare il processo relativo a (x,y): zˆ k− = Akz zˆ k− + Bkz u kz + wkz p( wkz ) = N (0, Qkz ) xˆ zˆ k = k yˆ k ∆x odom u kz = kodom ∆y k z Ak = I 2 x 2 (6.4) cosθˆk− − sin θˆk− Bkz = ˆ − cosθˆ − sin θ k k z− z z Pk = Pk−1 + Qk La (6.4) rappresenta il predict relativo alla posizione del robot: come si vede, l’aver modellato il sistema come due processi separati, che si influenzano reciprocamente al di fuori del filtro di Kalman, ha permesso di 174 produrre un modello lineare per l’aggiornamento dell’odometria relativa alla posizione del robot. La matrice di covarianza Qkz può essere calcolata come segue: Figura 6.21 La direzione del movimento del robot rispetto al sistema assoluto è data dalla somma fra θˆk− e la direzione che esso ha nel sistema relativo, β k : la gaussiana bidimensionale che rappresenta l’errore di processo avrà allora un asse diretto secondo il moto e l’altro ortogonalmente, aventi varianze σ //2 , σ ⊥2 proporzionali all’ampiezza dello spostamento. α = θˆk− + β k Qkz = U Q Λ QU Q−1 cos α U Q = sin α − sin α cos α (6.5) σ 2 0 Λ Q = // 2 0 σ⊥ 175 Quando la visione rileva la presenza di un landmark nell’immagine, si effettua il correct del filtro di Kalman relativo alla posizione: s kz = Hz k + v kz p(v kz ) = N (0, Rkz ) zˆ k = zˆ k− + K kz ( s kz − Hzˆ k− ) (6.5) H = I 2 x2 ⇒ ⇒ K kz = Pkz − ( Pkz − + Rkz ) −1 ⇒ Pkz = ( I − K kz ) Pkz − Nella (6.5), s kz rappresenta la misura dell’uscita del sistema di posizione, che in questo modello coincide con lo stato stesso (matrice di trasformazione di uscita H pari all’identità). Avendo a disposizione un solo landmark, non si può misurare direttamente la posizione del robot, ma si sa che essa giace su una circonferenza di raggio pari alla distanza dal landmark e in esso centrata: assumendo che la frequenza di rilevazioni sensoriali sia adeguata, la posizione s kz può essere ricavata come il punto su tale circonferenza che intercetta la congiungente fra il landmark e la posizione stimata del robot in base all’odometria ẑ k− (predict); l’incertezza di misura dovrebbe avere una distribuzione di probabilità a forma di corona circolare intorno al landmark, tuttavia con il filtro di Kalman si possono modellare solo distribuzioni gaussiane, quindi Rkz sarà approssimato attraverso una gaussiana centrata in s kz , con un asse molto lungo diretto tangenzialmente alla circonferenza, funzione del raggio ( σ //2 ), e un asse ad esso ortogonale proporzionale all’errore di misura della distanza del robot dal landmark ( σ ⊥2 ). 176 Figura 6.22 Calcolo della posizione e della matrice di covarianza rispetto ad un landmark (M). Sulla base del calcolo della posizione stimata ẑ k è possibile effettuare anche il correct relativo all’orientazione: s θk = Hθ k + v kθ p (v kθ ) = N (0, Rkθ ) θˆ = θˆ − + K θ ( s θ − Hθˆ − ) k k k k (6.6) k H=I⇒ ⇒ K kθ = Pkθ − ( Pkθ − + Rkθ ) −1 ⇒ Pkθ = ( I − K kθ ) Pkθ − Infatti l’angolo s θk è dato dalla somma dell’angolo fra il landmark e il robot in coordinate assolute β , calcolabile quindi in base a ẑ k , e l’angolo relativo sotto cui il robot vede il marker γ , misurato dal sistema di visione. 177 Figura 6.23 Costruzione di 178 s θk = β + γ Conclusioni e sviluppi futuri Nel corso dello sviluppo di questa tesi, sono stati raggiunti i seguenti risultati: • Sono state analizzate le caratteristiche di un dominio dinamico e competitivo su cui è stata focalizzata la ricerca, e dell’ambiente di esecuzione, individuando gli aspetti critici al fine del conseguimento degli obiettivi; • Si è progettato un sistema di segmentazione di immagini in tempo reale, capace di superare i limiti tipici di tecniche che si muovono nello stesso ambito, attraverso thresholding dinamico e filtraggio non lineare, allo scopo di scartare informazione non significativa ai fini della classificazione. • Si è messo a confronto tale approccio con una tecnica basata esclusivamente sulla classificazione statica, attraverso una serie di esperimenti, mettendo in risalto i problemi incontrati dal sistema tradizionale dovuti alla non uniformità e stazionarietà delle condizioni di illuminazione, e l’efficacia della nuova tecnica nel superarli. • In conclusione, il sistema soddisfa tutti gli obiettivi proposti. Sviluppi futuri Un aspetto su cui non è stata focalizzata l’attenzione di questa tesi sono le tecniche di calibrazione del sistema di classificazione: per costruire la mappa UV e il vettore Y, è necessaria una lunga fase d’apprendimento basata su un gran numero di esempi; indubbiamente, la capacità di adattamento dell’algoritmo a condizioni di illuminazione variegate rende poco frequente tale operazione, tuttavia lo studio di tecniche ad hoc per 179 l’apprendimento da esempi può portare dei benefici anche in termini di qualità dei risultati raggiungibili, attraverso una migliore capacità di generalizzazione e una minore dipendenza dagli errori (umani) in fase di calibrazione. Un altro aspetto interessante, meritevole di approfondimento, è lo studio di tecniche di calibrazione automatica basate sul tracciamento delle proprietà della luce presente nella scena: tale problema, nel caso generale, è estremamente complesso, sia per l’impossibilità di misurare direttamente l’intensità e la temperatura di colore della luce, sia per la difficoltà di ricavare una legge che permetta di stabilire la variazione della tonalità nell’immagine di certi colori reali al variare delle condizioni di luce. Limitando il dominio di applicazione di tale ricerca a variazioni contenute della luce rispetto ad un riferimento utilizzato in fase di calibrazione manuale, è possibile sfruttare qualche proprietà nota a priori e facilmente individuabile del dominio operativo per ricavare dal confronto un’indicazione sulla variazione della luce stessa: nel caso dell’ambiente RoboCup, è noto che il piano sotto le zampe del robot è sempre di colore verde; sfruttando tale informazione si possono costruire gli istogrammi limitati ad una porzione dell’immagine al di sotto di una linea parallela all’orizzonte e posta ad un’altezza prossima a quella del piano di gioco, cercare il modo principale, rappresentativo della massima probabilità di essere il verde del campo, e confrontandolo con il valore di riferimento determinato in fase di calibrazione manuale, integrando le differenze così ottenute nel tempo attraverso metodi probabilistici; dopo un certo periodo di osservazione, sarà così disponibile una stima della variazione delle condizioni di illuminazione rispetto a quelle in essere durante la calibrazione manuale, da usare per aggiornare le mappe di classificazione secondo qualche legge da determinare (traslazione, dilatazione, erosione, ecc.). Anche il tema dell’estrazione di linee, di cui qui è stato progettato solo il primo stadio, può essere ripreso e sviluppato in un’ottica di localizzazione, 180 attraverso l’integrazione di dati medianti formalismi più potenti rispetto al filtro di Kalman, in grado di rappresentare distribuzioni multimodali, data la maggior incertezza di identificazione di una linea rispetto ad un landmark. 181 182 BIBLIOGRAFIA [SB95] S.M.Smith, J.M.Brady. S.U.S.A.N. – A new approach to low level image processing. 1995. [Can86] J.F.Canny. A computational approach to edge detection. 1986. [Can83] J.F.Canny. Finding edges and lines in images. 1983. [Rob65] L.Roberts. Machine Perception of 3-D Solids. 1965. [Sob90] I.Sobel. An isotropic 3x3 image gradient operator. 1990. [Pre70] J.M.S.Prewitt. Object enhancement and extraction. 1970. [MH80] D.Marr, E.C.Hildreth. Theory of edge detection. 1980. [RN98] S.J.Russel, P.Norvig. Intelligenza Aritificale – un approccio moderno. 1998. [PPR01] F.Pirri, M.Pirrone, M.Romano. Dispense dal corso di Ingegneria della conoscenza. 2001. [Gris01] G.Grisetti. Localizzazione robusta ed affidabile per robot mobili in ambiente dinamico. 2001. [AIBOnet] www.aibonet.com. [Hei94] J.Heinrich. MIPS R4000 Microprocessor User’s Manual. 1994. [Ard00] E.Ardizzone. Teoria e Teniche di Elaborazione dell’Immagine. 2000. [CSVYHPS01] S. Chen, M.Siu, T.Vogelgesang, T.F.Yik, B.Hengst, S.B.Pham, C.Sammut. The UNSW Robocup 2001 Sony Legged League Team. 2001. [Mas99] D.Mastrantuono. AutoLocalizzazione per robot mobili basata su trasformata di Hough. 1999. [MT96] R.Mohr, B.Triggs. Projective Geometry for Image Analysis. 1996. [Bru00] J.Bruce. Realtime machine vision perception and prediction. 2000. [BBV00] J.Bruce, T.Balch, M.Veloso. Fast and inexpensive color image segmentation for interactive robots. 2000. [VLVRSC02] M.Veloso, S.Lenser, D.Vail, M.Roth, A.Stroupe, S.Chernova. CMPack-02: CMU’s Legged Robot Soccer Team. 2002. [GT02] Autori Vari. German Team report for Robocup 2002. 2002. [HIPS00] B.Hengst, D.Ibbotson, S.B.Pham, C.Sammut. The UNSW United 2000 Sony legged robot software system. 2000. [SHB98] M.Sonka, V.Hlavac, R.Boyle. Image Processing, Analysis, and Machine Vision. 1998. [AB94] R.Adams, L.Bischof. Seeded Region Growing. 1994. [MJ97] A.Mehnert, P.Jackway. An improved seeded region growing algorithm. 1997. [Cus96] R.Cusani. Teoria dei segnali. 1996. [DR78] L.S.Davis, A.Rosenfeld. Noise cleaning by iterated local averaging. 1978. [Bro84] D.R.K.Brownrigg. The Weighted Median Filter. 1984. [AF88] G.R.Arce, S.A.Fontana. On the midrange estimator. 1988. [WVL81] D.C.C.Wang, A.H.Vagnucci, C.C.Li. Gradient Inverse Weighted smoothing scheme and the evaluation of its performance. 1981. 183 [Bak99] H.Bakstein. A complete DLT-based Camera Calibration with a Virtual 3D Calibration Object.1999. [Calib] J.Y.Bouguet. Camera Calibration Toolbox for Matlab. www.vision.caltech.edu/bouguetj/c alib_doc/ [HP95] J.L.Hennessy, D.A.Patterson. Struttura e Progetto dei Calcolatori. 1995. [HP96] J.L.Hennessy, D.A.Patterson. Computer Architecture: a Quantitative Approach (second edition). 1996. [WB95] G.Welch, G.Bishop. An Introdcution to the Kalman Filter. 1995. [Mon00] S.Monaco. Teoria dei Sistemi. 2000. 2 4