Università degli Studi di Roma “LA SAPIENZA” Facoltà di Ingegneria Dipartimento di Scienza e Tecnica dell’Informazione Corso di Laurea Specialistica in Ingegneria delle Telecomunicazioni Tesi di Laurea Analisi comparativa delle prestazioni di video motion detection commerciali Candidato SALVATI MATTEO Relatore Chiar.mo Prof. Roberto Cusani Correlatore Frediano Maria Di Carlo ELECTRON - Elsag Alla mia famiglia Indice Indice Indice............................................................................................... i Indice delle figure .......................................................................... iii Introduzione ................................................................................... v Struttura della tesi ....................................................................... viii 1. Il sistema di videosorveglianza....................................................1 1.1 Introduzione ....................................................................................1 1.2 Schema di funzionamento .................................................................2 1.2.1 Architettura analogica..............................................................2 1.2.2 Architettura digitale .................................................................4 1.3 Prestazioni di un sistema TVCC ..........................................................5 2. Il Video Motion Detector ..............................................................8 2.1 Riconoscimento del movimento ..........................................................8 2.2 Estrazione dello sfondo .....................................................................9 2.2.1 Algoritmi derivativi ................................................................ 10 2.2.1.1Single difference ........................................................ 11 2.2.1.2Double difference ....................................................... 13 2.2.2 Algoritmi con background....................................................... 14 2.2.3 Algoritmi statistici ................................................................. 14 2.2.3.1Modello gaussiano ...................................................... 15 2.2.3.2Modello intra-frame .................................................... 16 2.2.3.3W4............................................................................ 16 2.2.4 Algoritmi con immagine di riferimento ..................................... 17 2.2.4.1Absolute difference..................................................... 17 2.2.4.2Block Based NCCF (normalized cross correlation function) ................................................................... 17 2.2.4.3Pixel Based NCCF ....................................................... 17 2.3 Aggiornamento dello sfondo ............................................................ 18 2.3.1 Aggiornamento dello sfondo ad 1 peso: ................................... 18 2.3.2 Aggiornamento dello sfondo a due pesi .................................... 19 2.4 Segmentazione .............................................................................. 20 2.5 Rimozione delle ombre.................................................................... 24 2.6 Tracking........................................................................................ 26 3. Sistemi commerciali VMD ed analisi delle loro caratteristiche .... 29 3.1 Tipologie ....................................................................................... 29 3.2 GPS STANDARD VIVP-VMD01 .......................................................... 31 3.2.1 Principi generali di funzionamento ........................................... 31 3.2.2 Parametri modificabili dall’operatore ........................................ 32 3.2.3 Altre caratteristiche tecniche .................................................. 36 3.3 BOSCH VMD01-M50 ....................................................................... 37 3.3.1 Parametri modificabili dall’operatore ........................................ 38 3.3.2 Altre specifiche tecniche......................................................... 39 4. Procedura sperimentale per la comparazione delle prestazioni .. 41 4.1 Introduzione .................................................................................. 41 i Indice 4.2 Individuazione degli scenari critici .................................................... 41 4.3 Individuazione dei filmati ................................................................ 42 4.3.1 Descrizione dei video ............................................................. 43 4.3.1.1Primo gruppo: Prato con alberi, elevata profondità di campo ...................................................................... 43 4.3.1.2Secondo gruppo: Neve ............................................... 46 4.3.1.3Terzo gruppo: Cancellata fronte strada ......................... 48 4.3.1.4Effrazione recinzione perimetrale ................................. 51 5. Generazione della ground truth con C# ...................................... 52 5.1 Introduzione .................................................................................. 52 5.2 Motivazione ................................................................................... 53 5.3 Caratteristiche generali ................................................................... 53 5.4 Visualizzazare filmati ...................................................................... 54 5.4.1 Descrizione qualitativa ........................................................... 54 5.4.2 Implementazione .................................................................. 55 5.5 Disegnare rettangoli e memorizzarne le coordinate in un file di testo. ... 56 5.5.1 Descrizione qualitativa ........................................................... 56 5.5.2 Implementazione della sovrimpressione rettangoli..................... 58 5.5.3 Implementazione della memorizzazione ................................... 60 5.6 Disegnare i rettangoli a partire da un file di testo ............................... 64 6. Rilevare con Matlab le sovrimpressioni generate dai VMD. ......... 66 6.1 Introduzione .................................................................................. 66 6.2 Elementi in comune ........................................................................ 67 6.3 Algoritmo per GPS Standard ............................................................ 69 6.4 Algoritmo per Bosch ....................................................................... 76 6.5 Algoritmo per il calcolo e il confronto delle prestazioni ........................ 81 7. Analisi dei risultati..................................................................... 85 7.1 Introduzione .................................................................................. 85 7.2 Primo gruppo................................................................................. 86 7.2.1 Analisi dei frame ................................................................... 86 7.2.2 Conclusioni: ......................................................................... 91 7.3 Secondo gruppo ............................................................................. 93 7.3.1 Analisi dei frame ................................................................... 93 7.3.2 Conclusioni........................................................................... 98 7.4 Terzo gruppo ............................................................................... 100 7.4.1 Analisi dei frame ................................................................. 100 7.4.2 Conclusioni......................................................................... 104 8. Conclusioni .............................................................................. 106 bibliography ................................................................................. 108 ii Indice delle figure Indice delle figure Fig. 1-1 monitor di una sala di controllo .................................................. vi Fig. 1-1 Distanze di funzionamento di una camera termica ......................... 1 Fig. 1-2 Schema di funzionamento di un sistema di videosorveglianza analogico ................................................................................. 2 Fig. 1-3 Schema di funzionamento di un sistema di videosorveglianza digitale .................................................................................... 4 Fig. 1-4 Il bersaglio Rotakin ................................................................... 5 Fig. 1-5 Dimensioni minime dell’oggetto per garantire la rilevazione, la classificazione e l’identificazione.................................................. 6 Fig. 1-6 tavola per la prova di risoluzione................................................. 7 Fig. 2-1 Livelli di analisi del movimento.................................................... 9 Fig. 2-2 Classificazione degli algoritmi per l’estrazione dello sfondo ........... 10 Fig. 2-3 Single difference ..................................................................... 11 Fig. 2-4 Effetto della velocità sulla single difference................................. 12 Fig. 2-5 Double difference .................................................................... 13 Fig. 2-6 Distribuzione gaussiana della luminanza di un pixel ..................... 15 Fig. 2-7 Schema di aggiornamento dello sfondo ...................................... 18 Fig. 2-8 Umbra e penumbra ................................................................. 24 Fig. 2-9 Rimozione delle ombre dai blob................................................. 26 Fig. 2-10 Schema di funzionamento del sistema di tracking........................ 27 Fig. 3-1 GPS Standard VIVP-VMD01 ...................................................... 31 Fig. 3-2 GPS VIVP-VMD, setup allarme .................................................. 33 Fig. 3-3 GPS VIVP-VMD, setup oggetto .................................................. 34 Fig. 3-4 GPS VIVP-VMD, setup dimensioni oggetto .................................. 35 Fig. 3-5 GPS VIVP-VMD, maschera ........................................................ 36 Fig. 3-6 Bosch VMD01-M50 .................................................................. 37 Fig. 3-7 Bosch VMD01-M50, creazione di una maschera ........................... 38 Fig. 3-8 Bosch VMD01-M50, oggetto lontano-vicino ................................. 38 Fig. 3-9 Bosch VMD01-M50, impostazione direzione di interesse ............... 39 Fig. 5-1 Finestra all’avvio dell’applicazione “GroundTruth” ........................ 54 Fig. 5-2 “GroundTruth”, riproduzione video ............................................ 55 Fig. 5-3 “GroundTruth”, rettangoli disegnati sulla lavagna senza video....... 58 Fig. 5-4 Organizzazione delle PictureBox ................................................ 58 Fig. 5-5 Algoritmo relativo agli eventi Memorizza, Aggiungi, Pulisci ....... 62 iii Indice delle figure Fig. 5-6 Visualizazione box: il box viola è disegnato al momento, quello rosso è ricostruito dal file di testo) ............................................ 64 Fig. 6-1 Due tipi di sovrimpressione ...................................................... 66 Fig. 6-2 Struttura della matrice XY ........................................................ 67 Fig. 6-3 Canali rgb di un immagine in scala di grigi.................................. 68 Fig. 6-4 Trasformazione della scala di grigi ............................................. 69 Fig. 6-5 Schema di funzionamento della funzione Esegui_GPS .................. 70 Fig. 6-6 Effetto funzione resize_matching sul video ............................... 72 Fig. 6-7 Struttura del vettore minimo..................................................... 72 Fig. 6-8 Maschere per la valutazione della somiglianza............................. 73 Fig. 6-9 Creazione della struttura minimo ............................................... 74 Fig. 6-10 Ricerca delle corrispondenze tra angoli ...................................... 76 Fig. 6-11 Schema di funzionamento della funzione Esegui_Bosch................ 77 Fig. 6-12 Diverse tonalità di rosso del contorno sovrimpresso dal VMD ........ 78 Fig. 6-13 Connettività pixel .................................................................... 78 Fig. 6-14 Esempio di rilevamento di un bordo ........................................... 79 Fig. 6-15 Processo di identificazione di bordi ............................................ 80 Fig. 6-16 Struttura della matrice tav....................................................... 83 Fig. 7-1 grafici delle prestazioni GPS-Standard, video del primo gruppo ..... 86 Fig. 7-2 grafici delle prestazioni Bosch, video del secondo gruppo ............. 87 Fig. 7-3 Istogramma parametri prestazionali VMD GPS-Standard .............. 91 Fig. 7-4 Istogramma parametri prestazionali VMD Bosch.......................... 91 Fig. 7-5 Comparazione statistiche delle prestazioni, video gruppo 1........... 92 Fig. 7-6 grafici delle prestazioni GPS-Standard, video del secondo gruppo .. 93 Fig. 7-7 grafici delle prestazioni Bosch, video del secondo gruppo ............. 94 Fig. 7-8 Istogramma parametri prestazionali VMD GPS-Standard .............. 98 Fig. 7-9 Istogramma parametri prestazionali VMD Bosch.......................... 98 Fig. 7-10 Comparazione statistiche delle prestazioni, video gruppo 2........... 99 Fig. 7-11 grafici delle prestazioni GPS-Standard, video del terzo gruppo .... 100 Fig. 7-12 grafici delle prestazioni Bosch, video del terzo gruppo................ 101 Fig. 7-13 Istogramma parametri prestazionali VMD GPS-Standard ............ 104 Fig. 7-14 Istogramma parametri prestazionali VMD Bosch........................ 104 Fig. 7-15 Comparazione statistiche delle prestazioni, video gruppo 3......... 105 Fig. 8-1 Comparazione conclusiva delle prestazioni................................ 106 iv Introduzione Introduzione I recenti eventi mondiali hanno portato tanto i governi quanto le industrie a ripensare al proprio approccio alla sicurezza fisica. Le minacce che vengono affrontate non sono più attacchi militari di grande scala, da parte di avversari conosciuti, ma piccoli gruppi di individui, già presenti nel territorio, che possono causare danni, con un costo estremamente alto in termini economici ed ambientali, di vite umane e di destabilizzazione. Non solo la natura della minaccia è cambiata, ma anche quella degli obiettivi, che, da militari, si sono convertiti in civili e infrastrutture pubbliche, quali aeroporti, installazioni di produzione di energia, rifornimenti idrici e mezzi di trasporto pubblico. La naturale reazione a queste nuove minacce è l’innalzamento del livello di vigilanza, che si traduce in un sensibile aumento degli investimenti nella sicurezza logica e fisica. Relativamente a quest’ultimo settore si è vista esplodere la diffusione di impianti di videosorveglianza, sia per grandi infrastrutture, ma anche per utenze residenziali (testimoniata anche dalle molteplici offerte commerciali anche a basso costo, in primo luogo le telecamere IP). Il successo di tale sistema di controllo è dovuto alla sua intuitività ed al suo funzionamento in tempo reale, ma il paradosso è che spesso non venga utilizzata per rilevare in tempo reale la minaccia, bensì per scopi legali e dissuasivi: le persone sono meno inclini a commettere attività criminali se sanno di essere riprese e, se qualcosa dovesse comunque accadere, il video è utilizzato per risalire ai responsabili del crimine. Invece, usare pienamente le potenzialità della videosorveglianza significa, rilevare una minaccia (l’effrazione di una recinzione perimetrale), capirne la natura, la composizione ed il modello dell'attacco (se si tratta del nucleo che vuole intromettersi o se è solo un diversivo), seguirne l’evoluzione per prendere le corrette contromisure. Una delle problematiche relative alla videosorveglianza, utilizzata per la rilevazione preventiva, riguarda il monitoraggio di numerose immagini. Il numero di telecamere impiegate nel sistema cresce con la dimensione della superficie da sorvegliare, in alcuni siti si possono raggiungere quantità importanti, anche nell’ordine di diverse centinaia. I flussi uscenti dalle telecamere sono solitamente convogliati in una centrale di monitoraggio, dove possono essere registrati su unità di archiviazione o, con l’ausilio di matrici v Introduzione video, visualizzati in tempo-reale su banchi di monitor. L’operatore presente nella sala di controllo non può dedicare il proprio sguardo a più di sedici monitor contemporaneamente, inoltre dopo pochi minuti, si riduce progressivamente la soglia di attenzione., con la conseguente perdita delle informazione acquisite con le telecamere. Fig. 1-1 monitor di una sala di controllo La soluzione a questi problemi è la videosorveglianza automatizzata, che consiste nell’utilizzo di dispositivi hardware o software che, analizzando le scene video, determinano le attività, gli eventi o i comportamenti che potrebbero essere considerati sospettosi e forniscono una risposta adatta quando tali azioni accadono (attirare l’attenzione dell’operatore, attivare un allarme, bloccare delle porte, ecc). Lo sviluppo di tali dispositivi rientra nella Computer Vision (Visione Computazionale), un ramo dell’Intelligenza Artificiale, che si propone di insegnare al calcolatore a capire cosa vede attraverso la videocamera, ovvero cosa è presente nella scena e dove. Una delle applicazioni della Computer Vision, che ha trovato il consenso dell’industria, è il VMD (Video Motion Detection), un dispositivo che rileva il movimento nella scena. Esso esiste nella sua versione più elementare, Activity (il quadro è diviso in celle, come una matrice, vengono semplicemente evidenziate quelle in cui è presente del vi Commento [DCFM1]: Di solito si “parla” di 16 monitor e non 2. Introduzione movimento), ma anche in versioni più evolute, ottenute aggiungendo funzioni di tracking e di classificazione. Nell’utilizzare un VMD è necessario verificare che i falsi allarmi siano ridotti: se ciò non accade si corre il rischio di infastidire l’operatore con continue e inopportune richieste di attenzione, che possono indurre a trascurare anche le segnalazioni corrette. vii Struttura della tesi Struttura della tesi L’obiettivo di questa tesi è quello di realizzare un software in Matlab in grado di compiere una comparazione delle prestazioni di VMD commerciali, per valutare i dispositivi con un metodo oggettivo, anziché tramite impressioni maturate esclusivamente durante l’ispezione visiva del funzionamento. Come prima fase è stato necessario uno studio approfondito dei sistemi di videosorveglianza (cap. 1), per capire come un VMD sia integrato in tale struttura. In particolar modo ci si è concentrati sul funzionamento dei VMD, analizzando i vari passi dell’analisi della scena che portano all’individuazione del movimento (cap. 2). Nella seconda fase è stata effettuata un’analisi dei prodotti offerti dal mercato, seguita da una comparazione degli stessi, eseguita tramite i data sheet. Il confronto ha tenuto conto delle diverse funzioni offerte, delle possibilità di configurazione e dell’accuratezza con cui avvengono le elaborazioni. Questo lavoro ha portato alla scelta dei due apparati da sottoporre alle prove da banco (cap. 3). Successivamente è stato necessario individuare le scene critiche in cui solitamente i VMD incontrano i maggiori problemi di analisi. Per quanto possibile sono stati raccolti filmati contenenti scene di questo tipo (cap 4). E’ stato preparato il banco di prova per testare i due prodotti. Per ogni filmato si è cercata la configurazione migliore del VMD, che garantisse un numero accettabile di falsi allarmi e successivamente si è passati all’acquisizione dei video in uscita ai VMD. Si è poi proceduto con la realizzazione di un’applicazione Windows, scritta in C#, per facilitare il processo di generazione della round truth dei filmati (cap. 5). Sono state scritte diverse funzioni in Matlab per implementare due algoritmi, uno per ogni VMD, che consentono l’identificazione delle sovrimpressioni (riquadratura e bordatura) che i dispositivi creano intorno agli oggetti in movimento, con lo scopo di mappare il numero, la posizione, e la dimensione degli oggetti rilevati (cap. 6). Infine si è scritto altro codice Matlab che, confrontando i dati ricavati precedentemente con quelli della round truth, compara le prestazioni dei due viii Struttura della tesi VMD, per decretare il migliore e evidenziare le situazioni in cui effettivamente si ha un degrado delle prestazioni (cap. 6). ix Il sistema di videosorveglianza Capitolo 1 1. Il sistema di videosorveglianza 1.1 Introduzione La videosorveglianza è uno strumento utile per monitorare tanto luoghi ristretti quanto grandi aree; in questo secondo caso risulta quasi indispensabile, se non si vuole ricorre alla sorveglianza umana: si pensi ad esempio quante persone occorrerebbero per sorvegliare piazze, autostrade, boschi, siti a rischio, aeroporti, porti, ecc. La videosorveglianza si sta affermando anche in contesti in cui sarebbe possibile utilizzare sensori alternativi: nei porti, ad esempio, potrebbero essere impiegati sonar o radar di terra, ma le telecamere, oltre al vantaggio di far vedere, nel vero senso della parola, cosa accade, hanno un costo minore. Camere termiche di alta qualità consentono di rilevare un uomo a 4 Km e di riconoscerlo a meno di 2. Fig. 1-1 Distanze di funzionamento di una camera termica 1 Il sistema di videosorveglianza 1.2 Schema di funzionamento I sistemi di videosorveglianza possono essere realizzati utilizzando due architetture, quella analogica e quella digitale, differenziate ovviamente dai tipi di segnali utilizzati, ma anche nella filosofia di funzionamento. Infatti, nel primo caso il segnale analogico impone un sistema concentrato, definito CCTV (Closed Circuit TV), mentre il segnale digitale consente la realizzazione di un sistema distribuito, definito OCTV (Open Circuit TV). Analizziamo le due situazioni nel dettaglio. 1.2.1 Architettura analogica Fig. 1-2 Schema di funzionamento di un sistema di videosorveglianza analogico 2 Il sistema di videosorveglianza In tutto il sistema corrono segnali analogici, i video convergono tutti in un unico punto di raccolta (la sala di controllo) con la stessa qualità con cui sono stati acquisiti, salvo introduzione di rumore, perché non subiscono compressione. I sensori utilizzati sono camere analogiche (dome, brandeggiabili, fisse), connesse con cavo coassiale, o con fibra ottica (in questo caso occorrono dei trasceiver), o con ponte radio(1), ad un distributore video che ha il compito di rendere disponibile le stesse sequenze di immagini, senza perdita di qualità, a più dispositivi, quali: • il motion detector che rileva gli oggetti in movimento, li evidenzia sul video (riquadratura, bordatura), e, attiva un contatto elettrico per la gestione dell’allarme. • il DVR (digital video recorder), è il cuore del sistema, ha il compito di convertire i video analogici in digitale, di comprimerli, di consentire la ricerca e visualizzazione in playback. Il DVR ha anche la possibilità di essere connesso in rete, quindi, da una postazione remota, tramite uno specifico applicativo, è possibile vedere e gestire i video. • la matrice video, che gestisce la visualizzazione dei video provenienti dalle camere, dal motion detector e dal DVR. Consente di selezionare quali e quanti video visualizzare e su quale monitor. Per gestire i movimenti delle camere, per comandare il DVR e la matrice si può utilizzare una tastiera, che è connessa, attraverso un distributore seriale a tali dispositivi. (1) L’uso di ponti radio non risulta economicamente conveniente, quindi anche in un sistema analogico è preferibile utilizzare una connessione WiFi, previa conversione e codifica del segnale. 3 Il sistema di videosorveglianza 1.2.2 Architettura digitale WORKSTATION COAX SERIAL CODEC UT P COAX TRANSCEIVER CODEC F.O . VIDEOWALL TCP/IP TCP/IP UTP CODEC CO AX IP CAMERA CO Wireless Bridge ss y le vit ire ti W nec n o C AX NVR COAX MONITOR SERIAL CODEC STORAGE UNIT ARRAY Fig. 1-3 Schema di funzionamento di un sistema di videosorveglianza digitale Si utilizzano camere IP con VMD integrato(2), quindi direttamente connesse alla rete, oppure camere analogiche seguite, in ordine, da VMD e codec. Il NVR (Network Video Recorder) prende il posto del DVR, mentre per la visualizzazione analogica su monitor è necessario prima decodificare il segnale catturato dalla rete. La differenza principale con il sistema analogico è che non ci sono vincoli di vicinanza tra le varie componenti del sistema, quindi, ad esempio, è possibile eseguire l’archiviazione di camere anche dislocate in città diverse. Di contro abbiamo una qualità delle immagini più bassa rispetto al caso analogico, la necessità di una banda della rete TCP/IP molto larga (ad esempio l’occupazione di banda dovuta ad una camera con codifica Mpeg4, 4CIF, 25 fps varia tra 1 a 4 Mbps, in relazione alla qualità delle immagini) e, in caso di congestione, la possibile perdita delle immagini. (2) Non è consigliabile far lavorare un VMD con un flusso video compresso, infatti, la perdita di qualità dovuta ad una codifica Mpeg 4, ne potrebbe comprometterne le prestazioni 4 Il sistema di videosorveglianza 1.3 Prestazioni di un sistema TVCC Per valutare le prestazioni di un sistema TVCC, come indicato nella norma di riferimento(3), si effettua il test di Rotakin. Questo metodo utilizza un bersaglio di prova normalizzato, noto come Rotakin, che è un pannello che simula la sagoma di una persona. Fig. 1-4 Il bersaglio Rotakin Il pannello è caratterizzato da barre di risoluzione fortemente contrastate e da un grafico triangolare, utilizzati per valutare la risoluzione del sistema. Il bersaglio è utilizzato per effettuare varie prove. (3) EN 50132-7, Impianti di videosorveglianza CCTV da utilizzare nelle applicazioni di sicurezza; parte 7: guide di applicazione. Recepita in Italia come CEI 79-10. 5 Il sistema di videosorveglianza • Prova di sorveglianza: si posiziona il Rotakin in luoghi strategici della zona di copertura e se ne conferma la rilevabilità per le diverse illuminazioni possibili. • Prova dell’altezza: si posiziona il bersaglio come sopra e si verifica che l’altezza dell’immagine del Rotakin, presentata sullo schermo, sia adeguata. In Fig. 1-5 sono descritte le soglie che l’altezza del Rotakin (espressa come percentuale dell’altezza del monitor) deve superare perché il bersaglio sia rispettivamente monitorabile (monitoraggio di folle), rilevabile (riconoscere qualcosa in movimento), classificabile (capire se è una persona, una macchina, un animale, ecc), identificabile (riconoscere il volto della persona). Fig. 1-5 Dimensioni minime dell’oggetto per garantire la rilevazione, la classificazione e l’identificazione • Prova di risoluzione: per ogni prova, si posiziona il bersaglio in modo che occupi ogni volta una tra le diverse percentuali dell’altezza del monitor: 100%, 50%, 20%, 10%, 5%. Si osserva per quale degli undici gruppi di barre (gruppo A – gruppo M) sia appena possibile distinguere una barra da quella adiacente. Dalla tabella in Fig. 1-6 si legge la risoluzione del sistema (espressa in numero di linee televisive). • Tale prova può essere effettuata anche facendo ruotare il Rotakin a 25 giri/min, per simulare un oggetto in movimento, ma considerando i gruppi di barre 1 – 6. 6 Il sistema di videosorveglianza Marcatura di riferimento A B C D E F G H J K L M Numero di linee televisive per altezza di immagine (sistemi a 625 linee) quando il bersaglio occupa una percentuale dell'altezza del monitor 100% 50% 20% 10% 5% 500 450 400 350 300 250 200 150 100 80 40 20 1000 900 800 700 600 500 400 300 200 160 80 40 2500 2250 2000 1750 1500 1250 1000 750 500 400 200 100 5000 4500 4000 3500 3000 2500 2000 1500 1000 800 400 200 10000 9000 8000 7000 7000 5000 4000 3000 2000 1600 800 400 Fig. 1-6 tavola per la prova di risoluzione 7 Il Video Motion Detector Capitolo 2 2. Il Video Motion Detector 2.1 Riconoscimento del movimento Data una sequenza di immagini, si vuole riconoscere gli oggetti in movimento presenti sulla scena. Il laborioso processo per arrivare a tale risultato può essere suddiviso in tre livelli di analisi dell’immagine: • elaborazione dei pixel • elaborazione dei frame • tracciamento Il livello di elaborazione dei pixel contiene gli algoritmi di base che definiscono l’appartenenza dei pixel allo sfondo o ad un oggetto (stima del background). L'informazione prodotta a questo livello è di tipo binario: sono ignorate la natura e il numero degli oggetti presenti e qualsiasi fenomeno che produca effetti non contemplati tra le possibili fonti di rumore eliminabili dall’algoritmo dà luogo a pixel oggetto. I parametri impostati a questo livello sono modificabili dai livelli superiori via via che il sistema perfeziona la propria conoscenza della scena. Il livello di “elaborazione dei frame” si occupa di una prima interpretazione dell’immagine binaria fornita dal livello sottostante. Si considerano le relazioni che intercorrono tra i gruppi di pixel individuati come oggetto e che possono aiutare a raffinare la classificazione fatta dagli algoritmi di base, si filtrano gruppi 8 Il Video Motion Detector di pixel di piccole dimensioni e si attua la classificazione dei pixel secondo l’appartenenza ad oggetti diversi (segmentazione dei blob). Il livello più alto “tracciamento”, si occupa della classificazione, del riconoscimento e dell’inseguimento degli oggetti individuati dal livello inferiore. Livello 3: tracciamento estrazione dei parametri dell’oggetto erosione pixel isolati Oggetti segmentati Livello 2: analisi dei frame erosione pixel isolati segmentazione blob Pixel non appartenenti allo sfondo Livello1: analisi dei pixel filtraggio rumore Fig. 2-1 classificazione pixel Livelli di analisi del movimento 2.2 Estrazione dello sfondo Come già accennato, il primo passo da effettuato da un VMD è quello di distinguere i pixel appartenenti allo sfondo da quelli appartenenti ad un oggetto. I diversi algoritmi per estrarre lo sfondo dalla scena possono essere classificati come in Fig. 2-2. 9 Il Video Motion Detector algoritmi derivativi algoritmi con sfondo modulo di detection single difference Fig. 2-2 double difference algoritmi con riferimento statistico algoritmi con immagine di riferimento modulo di aggiornamento dello sfondo Classificazione degli algoritmi per l’estrazione dello sfondo 2.2.1 Algoritmi derivativi Gli algoritmi presenti in questa categoria riconoscono come oggetti in movimento solo quei pixel che presentano delle differenze di intensità apprezzabili tra frame successivi. Le possibili implementazioni si differenziano l’una dall’altra in base al numero di immagini consecutive che si considerano nell’elaborazione (solitamente due o tre frames). E’ da notare che il risultato dell’elaborazione dipende dalla velocità di movimento degli oggetti ripresi nella scena: maggiore è la velocità di spostamento, tanto maggiori saranno le differenze tra immagini consecutive e quindi più evidente sarà l’output finale. Viceversa movimenti lenti introdurranno piccole variazioni, riducendo la qualità dell’elaborazione finale. Una seconda carenza di questa classe è il cosiddetto problema del “foreground aperture”: la corretta individuazione della sagoma di un oggetto può essere compromessa se questo presenta delle zone a tinta uniforme che non producono cambiamenti in immagini successive. Un pregio di questi algoritmi è rappresentato dalla loro sostanziale insensibilità a variazioni luminose dell’ambiente, almeno fin tanto che le variazioni delle riconoscimento. intensità Inoltre dei anche pixel restano cambiamenti al di sotto istantanei della delle soglia di condizioni di illuminazione (ad esempio una lampada che viene accesa all’interno di una stanza) mandano in crisi l’elaborazione solo per pochi frame, dopodichè la 10 Il Video Motion Detector situazione si stabilizza. (ad es. si pensi al transitorio nell’accensione di una luce al neon). Infine gli algoritmi derivativi presentano pregi legati al ridotto carico computazionale, garantito dalla semplicità delle operazioni eseguite. 2.2.1.1 Single difference Per l’algoritmo single difference vengono presi in considerazione gli ultimi due frame acquisiti. Ipotizziamo di lavorare su immagini monocromatiche, dove il valore di ogni pixel rappresenta la luminosità. Per prima cosa viene eseguita una differenza punto a punto tra i pixel delle due immagini, il valore assoluto così ottenuto viene poi binarizzato tramite una funzione a soglia: differenza ≥ soglia ⎧255 se movimento = ⎨ altrimenti ⎩0 frame n frame n+1 differenza tra i frame ghosting (falso positivo) foreground aperture (falso negativo) Fig. 2-3 Come già accennato questo corretto Single difference algoritmo presenta il problema della foreground aperture, chiariamo questo concetto analizzando la Fig. 2-3 si possono distinguere tre zone rilevanti: a sinistra si ha la porzione di immagine che la figura occupava in precedenza, e che indica ora un oggetto inesistente; 11 Il Video Motion Detector ciò crea un falso positivo e l’effetto prende il nome di ghosting. La parte centrale dell’immagine di movimento non rileva alcuno spostamento, perchè l’intensità dei pixel dell’immagine non è cambiata tra un frame e il successivo; si ha un falso negativo e la parte di immagine è chiamata foreground aperture. La parte a destra è infine l’output corretto. differenza tra i frame - velocità elevata ghosting (falso positivo) foreground aperture (falso negativo) Fig. 2-4 corretto differenza tra i frame – velocità ridotta ghosting (falso positivo) foreground aperture (falso negativo) corretto Effetto della velocità sulla single difference La velocità di spostamento dell’oggetto amplifica o attenua questi effetti indesiderati. Come visualizzato in Fig. 2-4, all’aumentare della velocità dell’oggetto, ghosting aumenta, mentre il foreground aperture diminuisce. Viceversa al diminuire della velocità, il foreground aperture aumenta (perché è maggiore la sovrapposizione delle sagome dell’oggetto nelle due immagini consecutive) e quindi il ghostin diminuisce. 12 Il Video Motion Detector 2.2.1.2 Double difference velocità movimento oggetto elevata oggetto nel frame n-1 oggetto nel frame n velocità movimento oggetto bassa oggetto nel frame n-1 oggetto nel frame n single difference tra i frame n-1 e n AND delle single diffrence single difference tra i frame n+1 e n oggetto nel frame n oggetto nel frame n+1 Fig. 2-5 oggetto nel frame n oggetto nel frame n+1 Double difference Questo algoritmo è una variante del single difference, studiato per eliminare l’effetto del ghosting. L’elaborazione prende in esame tre frame consecutivi, operando per due volte l’operazione di single difference; le due immagini di movimento ottenute vengono poi messe in AND tra loro per eliminare l’effetto del ghosting. Con questa operazione vengono presi in considerazione soltanto i punti che risultano in movimento in entrambe le coppie di immagini; il ghosting scompare per qualsiasi tipo di oggetto. La zona di foreground aperture invece è molto marcata se l’oggetto ha un colore uniforme. Con un oggetto di trama variabile invece scompaiono anche i falsi negativi, e la 13 Il Video Motion Detector rilevazione del movimento si può considerare ben eseguita. È da notare che l’output dell’algoritmo si riferisce al frame centrale della sequenza, non all’ultimo acquisito. In generale la qualità dell’output dipende dalla velocità di movimento degli oggetti: oggetti che si muovono molto rapidamente favoriscono la Double Difference rispetto alla Single Difference in quanto l’assenza di aree di sovrapposizione tra immagini consecutive e di ghosting permettono una individuazione corretta. Questa differenza tende a scendere però con il diminuire della velocità di movimento dell’oggetto che evidenzia la maggiore sensibilità al foreground aperture di questo algoritmo. 2.2.2 Algoritmi con background In questa categoria di algoritmi l’individuazione degli oggetti si basa sul confronto tra l’immagine corrente di una sequenza e un background di riferimento, generato in precedenza in modo statistico o più semplicemente fotografando la scena priva di oggetti. Rispetto agli algoritmi derivativi. Sono evidenti i pregi derivanti da questo metodo: la qualità dell’output non dipende più dalla velocità di movimento dell’oggetto e, in particolare, l’individuazione è garantita anche nel caso in cui questo diventi stazionario. Rispetto agli algoritmi basati su differenze tra frame, questa classe non presenta più il problema del foreground aperture: oggetti di colore uniforme vengono individuati correttamente. La presenza di un background di riferimento fa si che si venga a perdere una delle caratteristiche principali che caratterizzano gli algoritmi basati sulle differenze: l’indipendenza da variazioni globali della scena ripresa. Ad esempio si perde l’insensibilità nei confronti delle variazioni di illuminazione. Infatti il background “fotografa” la scena in un certo istante: se avvengono cambiamenti che modificano le condizioni iniziali, allora i dati di riferimento relativi alla scena non sono più validi, quindi nasce la necessità di mantenere corretti i dati contenuti nel background di riferimento nel corso dell’evoluzione dell’acquisizione, mediante opportune tecniche di aggiornamento. 2.2.3 Algoritmi statistici L’idea base è la seguente: l’intensità di un dato pixel può essere data dall’appartenenza al background oppure al foreground. Nel primo caso essa risulta approssimativamente costante, oscillando tra pochi valori vicini tra loro, mentre nel secondo il suo valore è impredicibile e varia in un ampio spettro. 14 Il Video Motion Detector Ipotizzando che, su una sequenza sufficientemente lunga, ogni pixel appartenga in misura prevalente allo sfondo, l’andamento della sua intensità presenterà pochi valori molto diversi tra loro e un gran numero di campioni concentrati in una fascia molto stretta. Questo picco di intensità indica il valore più attendibile di background. Il ricorso a metodi statistici per l’estrazione dello sfondo garantisce inoltre una maggior robustezza nei confronti del rumore e permette di raggiungere risultati migliori. 2.2.3.1 Modello gaussiano Questo primo algoritmo statistico basa il suo funzionamento sull’ipotesi che le fluttuazioni dei valori dei pixel a causa del rumore presente nelle immagini siano rappresentabili con una statistica gaussiana distribuita attorno ad un valore medio M. Durante la fase di training l’algoritmo studia l’andamento dei pixel per stimare i parametri della distribuzione gaussiana per ogni punto dell’immagine. i = 1...N , vengono calcolati il Dato un filmato composto da N frame Fi valore medio e la varianza per ogni pixel: M (x ) = σ 2 (x ) = 1 N2 1 N ∑ Fi (x ) N i =0 ∑ (F (x ) − M (x )) N 2 i =0 2 i 2σ 2 background intensità foreground intensità M Fig. 2-6 Distribuzione gaussiana della luminanza di un pixel Più intense saranno le variazioni di un punto, più la statistica risulterà distribuita e, di conseguenza, più grande sarà la deviazione standard. Una volta terminato il training, l’algoritmo classifica i pixel dell’immagine come 15 Il Video Motion Detector appartenenti allo sfondo se il loro valore rientra in un intervallo pari al 96% della statistica stimata inizialmente. Questo è ottenuto discriminando i pixel che distano in valore assoluto dalla media M ( x ) meno della quantità ⎧⎪255 se movimentot ( x ) = ⎨ altrimenti ⎪⎩0 σ 2. Ft ( x ) − M ( x ) > σ 2 ( x ) A questo punto si è ottenuta un’immagine binaria di movimento, ma che risulta comunque affetta da una certa quantità di pixel rumorosi. Per migliorare la qualità dell’output viene eseguita un’operazione di opening, ovvero un filtraggio del rumore che consiste in un passo di erosione (i pixel isolati vengono rimossi) seguito da uno di dilatazione (per chiudere i buchi interni a zone di colore). 2.2.3.2 Modello intra-frame Questo secondo algoritmo di tipo statistico si pone il fine di superare la possibile mancanza di sensibilità dell’algoritmo gaussiano dovuta a distribuzioni ampie dei valori di un pixel in fase di training. Il valore medio di intensità dei pixel rimane, mentre la varianza viene sostituita dalla massima differenza di luminosità riscontrata tra due frame consecutivi durante la fase di training. ⎧⎪255 se movimentot ( x ) = ⎨ altrimenti ⎪⎩0 Ft ( x ) − M ( x ) > d ( x ) L’algoritmo è più sensibile rispetto al modello gaussiano, anche per quanto riguarda il movimento generato da waving trees (instabilità dello sfondo). 2.2.3.3 W4 L’algoritmo che usa per la rilevazione dei movimenti lavora su tre valori per ogni pixel: il valore minimo, il valore massimo e la massima differenza di intensità riscontrata tra due frame successivi durante il periodo di training. ⎧ ⎪255 se ⎪ movimentot ( x ) = ⎨ ⎪0 altrimenti ⎪ ⎩ Ft ( x ) − min ( x ) > diff ( x ) Ft ( x ) − MAX ( x ) > diff ( x ) 16 Il Video Motion Detector 2.2.4 Algoritmi con immagine di riferimento Questa famiglia di algoritmi individua il movimento presente nella scena valutandone la somiglianza con un immagine di riferimento, ottenuta riprendendo la scena senza oggetti. 2.2.4.1 Absolute difference E’ l’algoritmo più semplice infatti l’appartenenza di un pixel allo sfondo è determinata comparando la differenza tra il suo valore di luminosità Ft ( x ) e quello dell’immagine di riferimento FR (x) ,con una soglia scelta opportunamente. ⎧⎪255 se movimentot ( x ) = ⎨ altrimenti ⎪⎩0 Ft ( x ) − FR( x) > soglia 2.2.4.2 Block Based NCCF (normalized cross correlation function) Questo algoritmo si prefigge di risolvere i problemi, relativi ai cambiamenti della luminosità globale della scena, di cui soffre l’algoritmo precedente. L’immagine viene divisa in B blocchi, di dimensione prefissata, e per ognuno di essi si valuta la somiglianza con l’immagine di riferimento attraverso la funzione di cross-correlazione normalizzata (NCCF). NCFFB = ∑ ∑ x∈B x∈B Fi ( x ) ⋅ ∑ x∈B FR( x ) Fi ( x ) ⋅ ∑ x∈B FR 2 ( x ) 2 Un effetto collaterale di questo approccio è l’inevitabile perdita di risoluzione dell’algoritmo, conseguenza del fatto che l’elemento minimo di confronto è rappresentato dal blocco. Anche in questo caso, come nel precedente, bisogna impostare una soglia per la binarizzazione: il suo valore va scelto in base alle caratteristiche della scena ripresa. ⎧255 se movimentot ( x ) = ⎨ altrimenti ⎩0 NCFF > soglia 2.2.4.3 Pixel Based NCCF Con questo algoritmo si è cercato di aumentare la risoluzione rispetto al Block Based NCCF, rispetto a quest’ultimo, le due immagini non sono più 17 Il Video Motion Detector suddivise in blocchi sui quali applicare la NCCF, ma vengono percorse punto per punto dalla finestra di correlazione. La classificazione dei pixel viene fatta valutando l’intorno compreso nel blocco di correlazione; questo porta a maggiorare la sagoma dell’oggetto in movimento di alcuni pixel. 2.3 Aggiornamento dello sfondo Durante l’acquisizione delle sequenze video pu`o capitare che la scena subisca globalmente delle variazioni, per esempio dovute a variazioni di illuminazione. Quindi si rende necessario aggiornare il background per far fronte a queste variazioni mantenendo così un riferimento corretto. Inoltre ci possono essere situazioni in cui non sarebbe possibile acquisire il background in maniera corretta. Soprattutto nel caso di algoritmi statistici, non è sempre possibile effettuare il training in assenza di oggetti nella scena (si pensi ad una strada trafficata). Anche in questo caso si rende necessario aggiornare il background per poterlo riportare a valori corretti. L’algoritmo di aggiornamento è considerato efficace se al variare delle condizioni della scena riesce ancora a distinguere le differenze tra background e oggetti in movimento, evitando falsi positivi. modulo di aggiornamento dello sfondo sfondo sequenza di ingresso Fig. 2-7 modulo di detection uscita Schema di aggiornamento dello sfondo 2.3.1 Aggiornamento dello sfondo ad 1 peso: Un primo modo per aggiornare lo sfondo di riferimento è introdurre un peso che attribuisca un coefficiente percentuale allo stato attuale della scena e il coefficiente complementare a quello precedentemente memorizzato. Dando maggiore importanza allo stato presente, si aggiorna più velocemente lo sfondo, viceversa, aumentando il peso relativo allo stato pregresso si ha un aggiornamento più lento. Un aggiornamento veloce garantisce 18 Il Video Motion Detector una corretta risposta dell’algoritmo in presenza di repentine variazioni della scena (ad esempio cambiamenti di luminosità), ma oggetti che si muovono molto lentamente potrebbero non essere rilevati e si potrebbe arrivare a perdere velocemente le tracce di oggetti che, una volta fatto il loro ingresso, si fermano nella scena venendo inevitabilmente inglobati nello sfondo. In caso di un aggiornamento lento si ha una situazione opposta, è quindi necessario trovare un peso di compromesso adatto al tempo caratteristico di permanenza nella scena degli oggetti che si muovono in essa ed alla rapidità delle variazioni dello sfondo. Si deve comunque discriminare il tipo di aggiornamento a seconda che si tratti di un background costituito da un’immagine o da dati statistici. Nel primo caso, il nuovo valore di un pixel dello sfondo viene calcolato effettuando una media pesata tra il suo valore precedente e quello del corrispondente nell’immagine corrente, dove il peso assume valori compresi tra 0 e 1. Per quanto riguarda gli sfondi generati in modo statistico l’insieme di statistiche di un punto del background deve essere aggiornato in base ai valori assunti in un periodo di osservazione comprendente gli ultimi frame: variando la lunghezza di questo periodo si può decidere la velocità di aggiornamento. 2.3.2 Aggiornamento dello sfondo a due pesi Il limite più evidente del modulo di aggiornamento a 1 peso appena descritto sta nella giusta regolazione dei parametri, in quanto spesso non è dato sapere a priori nè quanto veloci possano essere le variazioni dello sfondo né quanto velocemente un oggetto si muoverà nella scena. Per eliminare questo ostacolo si introduce un secondo peso che viene così utilizzato: in corrispondenza di oggetti di interesse si utilizza il primo peso in modo da tenere lento l’aggiornamento dello sfondo, per evitare di includere informazioni errate nel riferimento; viceversa, negli altri punti, si utilizza il secondo peso affinché l’aggiornamento venga effettuato velocemente per garantire il corretto funzionamento dell’algoritmo in presenza di variazioni nella scena. Purtroppo anche l’aggiornamento a due pesi presenta qualche inconveniente. Per come è concepito, questo algoritmo aggiorna in maniera molto lenta le informazioni nelle aree di background momentaneamente coperte da un oggetto. In questo modo, se è in atto una variazione dello sfondo mentre 19 Il Video Motion Detector un oggetto è presente nella scena, le zone mascherate da esso manterranno inevitabilmente i valori precedenti la loro copertura. Nel caso l’oggetto riprendesse a muoversi rivelerebbe di nuovo lo sfondo che, a causa del mancato aggiornamento, potrebbe presentare differenze tali da segnalare oggetti inesistenti (falsi positivi). 2.4 Segmentazione La segmentazione di un’immagine consiste nella divisione dell’immagine in regioni, in conformità a un certo criterio di appartenenza dei pixel ad una regione, di solito con l’obiettivo di riconoscere gli oggetti che compongono la scena. Più formalmente si può dire che data una immagine I ( x, y ) , la segmentazione consiste nel determinare il numero n ed un set di sottoimmagini (regioni) R1 , R 2 ,..., R n −1 tali che: n • UR i =I; i =1 • Ri è connessa, ∀i = 1,2,...n; • Ri I R j = Ο , ∀(i, j ), i ≠ j ; • P(Ri ) = TRUE , ∀i = 1,2,...n; • P Ri I R j = FALSE , ∀(i, j ), i ≠ j ; ( ) P (Ri ) è un predicato logico applicato sui punti di Ri (4) Dove Ogni regione è omogenea rispetto ad una o più proprietà fissate, come ad esempio luminosità, colore, texture, per questo motivo i metodi di segmentazione sono quindi molto specifici e diversi tra loro. È comunque (4) Si chiama predicato logico un enunciato o più argomenti P(Ri ) che dipende da uno Ri ( i = 1,2,...n ) variabili in opportuni insiemi. Il predicato diventa una proposizione logica (quindi è vera o falsa) ogni volta che si fissano i valori degli argomenti. 20 Il Video Motion Detector possibile definire delle tecniche generali, sulle quali tutti gli algoritmi di segmentazione si basano. Esse sono di seguito brevemente descritte. 1. Thresholding. Ogni pixel di un’immagine a toni di grigio è di solito caratterizzato da un valore di luminanza. L’algoritmo, di base, fissa una soglia di luminanza, allo scopo di distinguere tra due regioni, ad esempio lo sfondo e gli oggetti dell’immagine. La soglia può essere statica, adattativa o fissata in modo statistico. Siccome i risultati di un tale algoritmo sono grezzi, è possibile migliorare la tecnica considerando varie soglie. È inoltre facile estendere questa tecnica ad immagini a colori. Tuttavia il thresolding non può essere considerato un processo di segmentazione, perchè si ottiene come uscita ancora un’immagine binaria in cui I pixel non sono aggregati in rgioni, è quindi necessario operare una ricerca dei connected components nell'immagine binaria in modo da ottenere regioni connesse. 2. Clustering. Dalla rappresentazione dell’immagine nell’usuale spazio bidimensionale, si passa ad uno spazio delle caratteristiche, ad esempio lo spazio tridimensionale RGB, e si procede ad un partizionamento di tale spazio, allo scopo di definire le regioni. In questo modo si perdono le proprietà di vicinato tra i pixel, e quindi si possono generare regioni non connesse. Il partizionamento avviene secondo criteri diversi in dipendenza dello scopo della segmentazione. Il numero di partizioni può essere impostato a priori o automaticamente scelto. 3. Region growing. Si basa su informazioni di vicinanza tra i pixel. All’inizio viene scelto un insieme di pixel, detti semi. Ogni regione è inizialmente costituita da uno di tali semi, che quindi costituisce un cluster. In seguito, si cerca di ingrandirla unendo ad essa i pixel vicini, a condizione che soddisfino un certo criterio di somiglianza. Se il pixel non viene associato alla regione, sarà lasciato libero di aggregarsi ad un’altra regione o di diventare un nuovo seme. I vari algoritmi che prendono spunto da questa tecnica si differenziano per la scelta del seme, e per l’eventuale successiva applicazione di metodi di accorpamento tra regioni. Un possibile approccio è quello naive: • Scegli nell'immagine N semi uniformemente distanziati lungo gli assi X ed Y con distanze ΔX e ΔY , rispettivamente; 21 Il Video Motion Detector • Definisci un vettore di features (ad esempio il vettore RGB) per ogni pixel; • Definisci come vettore di features di ogni cluster quello del suo seme; • Accorpa ogni pixel dell'immagine al cluster più vicino in accordo alla distanza euclidea; • Alla fine, accorpa (merge) i clusters contigui che hanno identiche caratteristiche (distanza fra i 2 feature vectors minore di una soglia T ). La soglia T dipende fortemente dalle caratteristiche della particolare immagine e determinarla è molto difficile. Se le regioni simili non si accorpano correttamente si ha sovrasegmentazione o sottosegmentazione. 4. Split and merge: Consiste nel suddividere inizialmente l'immagine in un insieme di regioni arbitrarie e disgiunte, quindi fondere e/o dividere le regioni con il fine di ottenere un partizionamento dell'immagine in regioni disgiunte ed internamente omogenee e connesse. Esistono diversi algoritmi che usano questa idea di base, ma la maggior parte di essi sono sostanzialmente variazioni dell'algoritmo Quadtree Decomposition il cui algoritmo è: ( Ri ) per cui (R , R ) per cui Split in quattro quadranti di tutte le regioni P(Ri ) = FALSE ; Merge di ogni coppia di regioni adiacenti ( i j ) P Ri U R j = TRUE ; Stop quando ulteriori split e/o merge sono impossibili. Il predicato P(Ri ) può essere del tipo σ 2 (Ri ) ≥ T . 5. Segmentazione Watershed: tecnica di segmentazione mista, basata sulla pixel aggregation (flooding) ma con l'impiego del gradiente dell'immagine come “argine” per il flooding. L'operatore di gradiente assume un valore elevato in corrispondenza dei pixel in cui si verifica una variazione del livello di luminosità. La magnitudo del gradiente è tanto più elevata 22 Il Video Motion Detector quanto maggiore è la variazione nel punto. G ( x, y ) è l'immagine del gradiente ed è ottenuta assegnando a ciascun punto (x, y ) il valore di magnitudo del gradiente dell’immagine I ( x, y ) . L'immagine di gradiente può essere considerata come una superficie 3D caratterizzata da ridges (argini) e catchment basins (bacìni). I ridges rappresentano le curve di massimo del gradiente, i segmentazione Watershed può bacìni rappresentano i minimi. La essere come una simulazione in cui vengono progressivamente allagati i bacini. Quando due bacini si riempiono e si dovrebbero unire, viene alzato lungo le creste uno spartiacque per tenerli separati. Quando il processo di allagamento è finito, gli spartiacque identificano una segmentazione. Il problema principale di questa tecnica è che per ogni minimo viene generato un oggetto, causando una eccessiva segmentazione. Una definizione alternativadi watershed fa partire il processo di allagamento solo da alcuni punti specifici, (watershed controllata da marker); 6. Estrazione dei contorni: gli algoritmi appartenenti a questa categoria sono basati sulla ricerca di discontinuità delle proprietà dei pixel (come ad esempio il livello di grigio, il colore, la regolarità spaziale, la velocità), infatti se i pixel di una regione segmentata devono essere omogenei, allora i pixel caratterizzati da una brusca variazione rispetto ai vicini (edge pixels), rappresentano probabilmente il confine tra aree disgiunte. Gli operatori più indicati, per identificare questi pixel, sono quelli differenziali, a cui deve seguire una sogliatura. Il passo successivo per portare a termine il processo di segmentazione consiste nel trovare una catena chiusa di edge pixels tutti contigui, ovvero un contorno chiuso che costituisca la frontiera della regione segmentata. 7. Texture. In presenza di texture, ovvero aree di immagine caratterizzate da una successione di colori diversi che si ripete in maniera abbastanza regolare, è necessaria una pre-elaborazione al fine di trasformare le texture in regioni uniformi. Si può poi procedere con la segmentazione attraverso una delle precedenti tecniche. 23 Il Video Motion Detector 2.5 Rimozione delle ombre Un problema comune che si può incontrare nella stima del movimento, prevalentemente in scene outdoor, è quello del riconoscimento delle ombre, dovute all’occlusione della sorgente di luce, propria dell’ambiente osservato, da parte di un oggetto, che può essere sia presente che assente nella scena. Le ombre possono essere distinte dalle loro caratteristiche fotometriche, infatti sono caratterizzate dalla presenza di due regioni con luminosità diversa: una, solitamente di dimensione maggiore, detta umbra, è la zona più interna e più scura dell’ombra; l’altra, detta penumbra, è la zona più esterna, quella di transizione di luminanza tra l’ombra e lo sfondo. Le ombre possono essere distinte in tre categorie: • Ombre stazionarie che compaiono e scompaiono a seconda delle condizioni ambientali. Esse non provocano grandi problemi se lo sfondo è aggiornato correttamente. • Ombre che si muovono in maniera isolata in quanto disconnesse dagli oggetti che la generano o proiettate da entità esterne al campo visivo. • Ombre che si muovono attaccate agli oggetti in movimento. Queste possono alterare la forma dell’oggetto e in generale le sue proprietà, pertanto è tanto importante quanto difficile rimuoverle. umbra penumbra Fig. 2-8 Umbra e penumbra 24 Il Video Motion Detector Per rimuovere questo ultimo tipo di ombre si utilizzano due moduli software, uno che agisce sull’umbra, l’altro sulla penumbra, i cui algoritmi si basano sull’osservazione che il rapporto di luminosità tra i pixel illuminati e gli stessi coperti da un ombra è pressoché lineare. Questa osservazione porta a compiere come primo passo un’operazione di divisione tra i valori di luminanza dei pixel del quadro corrente (appartenenti ad oggetti in movimento) e i corrispondenti dello sfondo, quindi si scartano come possibili ombre tutti i pixel che hanno restituito un rapporto maggiore di uno (ovvero quelli la cui luminosità, anziché diminuire, è aumentata). Successivamente, analizzando gli istogrammi di un certo numero di frame precedenti, e ipotizzando una distribuzione gaussiana di valori, viene applicata una funzione di doppia soglia per filtrare quelle intensità che sono agli estremi della curva. Il sistema poi ricerca aree omogenee di intensità applicando tre filtri derivativi del primo ordine, ovvero applicate 3 operatori gradiente (orizzontale, verticale ed obliquo). Dopo ogni filtro è applicata una funzione di soglia, in modo da eliminare le zone ad alto contrasto. Si crea infine una mappa binaria che discrimina le zone di ombra dagli oggetti in movimento. Per eliminare il rumore e riconoscere al meglio le ombre, si eliminano dalla mappa binaria le aree di pixel più piccole; per essere considerata una regione valida l’ombra deve inoltre toccare il bordo dell’area in movimento. 25 Il Video Motion Detector sequenza di ingresso generazione sfondo frame corrente – \ divisione immagine sottrazione immagine segmentazione umbra segmentazione blob segmentazione penumbra OR blob con ombre tutte le ombre – blob senza ombre Fig. 2-9 Rimozione delle ombre dai blob 2.6 Tracking L’obiettivo di un sistema di tracciamento, o tracking, è quello di rilevare e conservare informazione in merito agli spostamenti che i vari oggetti compiono nella scena. L’input del sistema è costituito quindi dai blob degli oggetti privi di ombra, generati mediante segmentazione. Le funzionalità principali che caratterizzano il sistema in questione sono quattro: • l’associazione tra i blob inseguiti e gli oggetti del frame corrente, indicata con il termine di matching; 26 Il Video Motion Detector • il raffinamento del matching per trattare situazioni ambigue ed individuare eventuali occlusioni o frammentazioni; • • l’aggiornamento della struttura dati contenente gli oggetti da inseguire; la predizione di posizione e di feature dei blob tracciati. Inizializzazione struttura dati oggetti tracciati motion detection blob del frame corrente matching gestione occlusioni e frammentazioni cross correlation aggiornamento struttura dati stime filtro di Kalman Fig. 2-10 Schema di funzionamento del sistema di tracking In particolare, conviene sottolineare l’importanza fondamentale che assume, nel contesto del tracking, il modulo del matching. Esso consiste nel correlare gli oggetti tracciati fino ad un certo istante con i blob rilevati all’istante successivo dal sistema di motion detection. Quindi il primo passo per tracciare un oggetto nel corso di un filmato gioca sulla capacità di continuare a riconoscerlo in fotogrammi successivi e in contesti diversi. A parte la velocità, le caratteristiche sulla cui base il sistema di matching associa due oggetti temporalmente distinti sono state selezionate tra quelle rese disponibili dalla fase di segmentazione (sez. 1.5), scegliendo quelle che, mantenendo una certa 27 Il Video Motion Detector invarianza per uno stesso oggetto, sono state considerate significative per il suo riconoscimento. 28 Sistemi commerciali VMD ed analisi delle loro caratteristiche Capitolo 3 3. Sistemi commerciali VMD ed analisi delle loro caratteristiche 3.1 Tipologie VMD è un termine generico per identificare un dispositivo in grado di rilevare oggetti in movimento presenti in una scena, ma, già da subito, è bene distinguere tra activity detector, e motion detector in senso stretto. Il primo consente esclusivamente di dividere la scena in regioni (la cui forma e dimensione può essere personalizzabile o meno a seconda del prodotto) ed avere una segnalazione quando un oggetto ne attraversa una; non si ha alcuna informazione circa l’oggetto, al più viene resa nota quale regione ha causato l’allarme. Il secondo invece presuppone che almeno venga discriminato l’oggetto in movimento dal resto della scena; possono poi essere presenti altre caratteristiche basilari come il tracciamento, ma anche filtri accessori come: • “museum”: per rilevare se un oggetto scompare dalla scena • “oggetti abbandonati”: si ha un allarme quando un oggetto permane sulla scena per un periodo tempo superiore ad una certa soglia • “verso di percorrenza”: per selezionare come eventi di interesse solo i movimenti lungo una certa direzione. 29 Sistemi commerciali VMD ed analisi delle loro caratteristiche • “rilevamento congestione”: per generare un allarme nel caso in cui si abbia una concentrazione di persone superiore ad una certa soglia. • “rilevamento in base alla forma”. • “oscuramento”: si ha un allarme nel caso in cui si una camera venga oscurata per impedire di riprendere la scena. Solitamente un activity utilizza algoritmi più semplici, quindi più soggetti a falsi allarmi, ad esempio si può limitare a valutare il movimento in ogni cella indipendentemente dalle adiacenti, quindi senza compiere un’analisi globale della scena. I VMD sono disponibili come dispositivi stand alone (dotati di IO video, alimentazione, uscite a contatto per gli allarmi), oppure possono essere integrati in altri dispositivi come DVR, codec, camere, (queste ultime due soluzioni vengono scelte nel caso si intenda utilizzare un’architettura digitale di videosorveglianza), oppure possono essere esclusivamente software, quindi necessitano di un pc per realizzare l’analisi sui video, acquisiti tramite schede interne al pc o grabber esterni. Le caratteristiche principali da considerare per valutare un VMD sono: • risoluzione di digitalizzazione • livelli di digitalizzazione: con 256 livelli di grigio garantisce pari prestazioni sia con camere a colori che b/n, come ad esempio quelle termiche. • numero di celle di analisi: numero di celle in cui è suddivisa l’immagine • tempo di rinfresco Per l’analisi comparativa sono stati scelti due VMD stand alone monocanale, precisamente il GPS STANDARD VIVP-VMD01 ed il BOSCH VMD01, entrambi con le sole funzionalità di motion detection e tracking. 30 Sistemi commerciali VMD ed analisi delle loro caratteristiche 3.2 GPS STANDARD VIVP-VMD01 Fig. 3-1 GPS Standard VIVP-VMD01 3.2.1 Principi generali di funzionamento Il VIVP-VMD digitalizza le immagini con una risoluzione di 720 x 565 pixel. Le procedure di basso livello per l’elaborazione delle immagini scompongono il campo visivo in seimila celle. Ogni cella ha una dimensione di otto pixel di larghezza, per otto pixel di altezza. Per ogni fotogramma, il VIVP-VMD decide se all’interno di ogni cella si sono verificati cambiamenti statisticamente significativi oppure no. Le celle individuate vengono raggruppate insieme, in oggetti chiamati componenti. Per ognuno di essi, il VIVP-VMD stabilisce se il sistema ha già rilevato prima un componente analogo. Se il componente è già stato rilevato in passato, ne esisterà traccia nell’archivio, che verrà conseguentemente aggiornato. Se il componente non è mai stato rilevato prima, gli verrà assegnato un posto all’interno dell’archivio. Per ogni fotogramma, il VIVP-VMD verifica tutte le informazioni in archivio e decide se alcuni di questi soddisfano le condizioni che generano un allarme; in caso positivo, l’allarme viene attivato, quindi scatta il relé e sul video in uscita sono sovrimpressi un box che riquadra l’oggetto localizzato, la scritta “ALARM” e altre informazioni a scelta, tra cui la traccia del percorso, data e ora ecc. Quando in troppe celle è rilevato simultaneamente del movimento (variazioni di modo comune), il VIVPVMD non cerca di aggiornare le registrazioni o di generare degli allarmi. Questa caratteristica, chiamata Pan Mode, riduce il 31 Sistemi commerciali VMD ed analisi delle loro caratteristiche numero di falsi allarmi provenienti da telecamere esterne in condizioni ambientali critiche. Anche altre condizioni, come per esempio repentini cambiamenti di luminosità, possono far entrare il VIVP-VMD nel Pan Mode. Dopo che l’immagine si è stabilizzata il VIVP-VMD esce dal Pan Mode per entrare in Learn Mode. Il VIVP-VMD impiega circa 1 secondo per apprendere una nuova immagine, regolare i cambiamenti ed iniziare a monitorare il campo visivo. L’adattabilità delle routine di processing eseguita dal DSP (300 Mips) a bordo permette al VIVP-VMD di apprendere rapidamente tutto ciò che in una scena è “normale” e quindi rilevare ogni cambiamento significativo, come ad esempio un’intrusione. Tale adattabilità permette al VMD di funzionare senza che siano necessarie specifiche impostazioni o configurazioni delle telecamere. Pertanto il VIVP-VMD è particolarmente adatto per analizzare immagini provenienti sia da telecamere fisse sia da telecamere mobili, con posizioni di “preset” precedentemente impostate. 3.2.2 Parametri modificabili dall’operatore Insieme al VIVP-VMD è fornito un software per configurarlo. I parametri che influiscono sulla generazione di un allarme che possono essere modificati dall’utente sono: 32 Sistemi commerciali VMD ed analisi delle loro caratteristiche Fig. 3-2 • GPS VIVP-VMD, setup allarme Locale: Il parametro Locale viene applicato a tutte le celle come soglia dinamica. Aumentando questo valore si ottiene l’aumento della soglia dinamica, quindi la diminuzione della sensibilità e della Probabilità di Rilevamento (Pd).. • Durata Allarme: Il parametro Durata Allarme permette di impostare il numero di secondi durante i quali un allarme rimane attivo dopo che l’oggetto rilevato ha generato la condizione di allarme. • N° Frame per Generare Allarme: Questo parametro indica il numero di fotogrammi che il VIVP-VMD analizza prima di generare l’allarme. Questo valore può variare da 0 a 300. In generale questo valore indica il numero di volte che l’oggetto deve essere rilevato all’interno dell’immagine prima di generare un allarme. • Movimento Minimo: Questo parametro indica il numero di celle che l’oggetto deve attraversare prima che il sistema generi l’allarme. I valori possono variare da 0 a 8. Impostando questo parametro ad un valore superiore a zero è possibile evitare la generazione di falsi allarmi in presenza di oggetti stazionari che subiscono dei cambiamenti, come per 33 Sistemi commerciali VMD ed analisi delle loro caratteristiche es. le insegne luminose lampeggianti. Impostando questo parametro a zero è possibile migliorare la capacità del sistema di rilevare oggetti che compiono movimenti molto lenti o a scatti. Fig. 3-3 • GPS VIVP-VMD, setup oggetto Velocità Massima: definisce il limite superiore di velocità da considerarsi valida per un oggetto. Questo parametro viene utilizzato per ridurre i falsi allarmi generati dal passaggio in velocità davanti alla telecamera di insetti volanti o stormi di uccelli. Questo valore deve essere compreso tra 0 e 40. • Velocità Minima: Il parametro Velocità Minima definisce il limite inferiore di velocità da considerarsi valida per un oggetto. Questo parametro viene utilizzato per ridurre i falsi allarmi generati da oggetti caratterizzati da movimenti a bassa velocità, come le insegne lampeggianti al neon. Questo valore deve essere compreso tra 0 e 40. • Limite Luma: Il VIVP-VMD è in grado di distinguere gli oggetti in base ai valori di luminanza (Luma) compresi tra 0 e 255. Questo parametro può essere utilizzato in presenza di telecamere termiche o a infrarossi, allo 34 Sistemi commerciali VMD ed analisi delle loro caratteristiche scopo di isolare gli oggetti che sono caratterizzati da temperature superiori o inferiori a determinati limiti o che rientrano entro una gamma specifica di temperature. • Elimina Direzione: Ciccando su questi parametri si elimina dall’allarme la direzione selezionata. Fig. 3-4 • GPS VIVP-VMD, setup dimensioni oggetto Limite Larghezza-Altezza Oggetto Lontano/Vicino: Servono per effettuare la correzione prospettica, ovvero per descrivere la profondità di campo al VMD. Uno oggetto più è lontano dalla camera più risulta piccolo nell’immagine acquisita, quindi, senza alcun tipo di correzione, potrebbe accadere che un oggetto piccolo (non di interesse) davanti alla camera generi un allarme, mentre un altro, più grande, ma più lontano venga ignorato. Le dimensioni massime e minime orizzontali e verticali dell’oggetto sono interpolate in modo lineare per il rilevamento degli oggetti nelle posizioni intermedie del campo visivo. Questi valori presuppongono il fatto che la telecamera sia montata su un palo o sulla facciata di un edificio, ad una altezza e con angolo di inclinazione verso il 35 Sistemi commerciali VMD ed analisi delle loro caratteristiche basso tale da poter visualizzare gli oggetti relativi al “Limite LarghezzaAltezza Oggetto Vicino” nella parte inferiore del monitor, mentre gli oggetti relativi al “Limite Larghezza-Altezza Oggetto Lontano” nella parte superiore del monitor. La dimensione dell’oggetto si calcola in celle di dimensioni 8 X 8 (px). Fig. 3-5 • Maschera: è possibile GPS VIVP-VMD, maschera escludere delle celle dalla rivelazione del movimento trascinando il mouse nelle zone di interesse. • Altre funzioni: è possibile salvare e copiare da altri VMD le impostazioni e le maschere, configurare il colore, la posizione e i valori che la titolatrice deve visualizzare, impostare otto preset ognuno dei quali può avere una propria impostazione del motion detector, una sequenza di preset, otto fasce orarie. 3.2.3 Altre caratteristiche tecniche Ingressi video: 1 ingresso CVBS 1.0Vp-p 75Ohm/BNC Uscite video: 1 uscita CVBS 1.0Vp-p 75Ohm/BNC 36 Sistemi commerciali VMD ed analisi delle loro caratteristiche Uscita allarme: Relè (NO-C-NC) Alimentazione: 12 Vdc Assorbimento: 350 mA Temperatura di Funzionamento: -15°C ~ +60°C Umidità relativa: Max 85% non condensante Dimensioni: 73 (L) x 45 (H) x 147 (P) mm escluso connettori Peso: 0,42 Kg 3.3 BOSCH VMD01-M50 Fig. 3-6 Bosch VMD01-M50 Questo VMD rispetto al precedente consente la memorizzazione del frame in cui è scattato l’allarme, ma anche precedenti e successivi (dieci). Queste immagini possono essere ricercate dall’operatore ruotando la rotella presente sul pannello frontale dell’apparato, possono anche essere memorizzate su pc tramite collegamento via cavo, utilizzato anche per archiviare o caricare la configurazione del VMD. L’allarme consiste nell’attivazione dell’uscita relé e nella sovrimpressione sull’immagine dal vivo della sagoma (colore rosso) dell’oggetto in movimento, della sagoma dell’oggetto nella posizione in cui è stato rilevato per la prima volta 37 Sistemi commerciali VMD ed analisi delle loro caratteristiche (in giallo), della traccia del cammino percorso (in verde), che unisce la sagoma gialla con quella rossa. 3.3.1 Parametri modificabili dall’operatore Il setup del VMD01 avviene attraverso un interfaccia grafica visualizzata sul monitor, collegato sull’uscita video out. Si naviga nei diversi menù attraverso un mouse, collegato alla porta seriale del VMD. I parametri definibili dall’utente sono in numero molto minore rispetto al VIVP-VMD, sono previste le seguenti voci per la configurazione: Fig. 3-7 • maschera: Bosch VMD01-M50, creazione di una maschera la creazione della maschera avviene attraverso il trascinamento del mouse sulla form di configurazione in cui si continua a visualizzare il flusso video Fig. 3-8 Bosch VMD01-M50, oggetto lontano-vicino 38 Sistemi commerciali VMD ed analisi delle loro caratteristiche • oggetto lontano e vicino: si impostano le dimensioni riquadrando rispettivamente l’oggetto in posizione più lontana e più vicina rispetto alla camera. Il box più grande tra i due disegnati viene automaticamente associato all’oggetto più vicino, quello più piccolo all’oggetto più lontano. La prospettiva può essere orizzontale o verticale. Fig. 3-9 • Bosch VMD01-M50, impostazione direzione di interesse Direzione: si può decidere lungo la quale direzione siamo interessati a rilevare il movimento (freccia verde in Fig. 3-9) e con quale tolleranza (segmenti blu in Fig. 3-9). • Altre impostazioni: memorizzazione di due configurazione diverse (viene attivata l’una o l’altra a seconda del segnale di input fornito al connettore IO), scelta della tipo di conferma dell’allarme, tra automatica (viene archiviata l’immagine relativa all’allarme più recente), conferma manuale (viene archiviata l’immagine relativa all’allarme più lontano non confermato; per confermare l’allarme bisogna premere la rotella presente sul pannello frontale). 3.3.2 Altre specifiche tecniche Ingressi video: 1 ingresso 75Ohm/BNC Uscite video: 1 uscita 75Ohm/BNC Uscita allarme: Relè (NO-C-NC) max 30V, max 1° Alimentazione: 5 Vdc connettore RJ12 Assorbimento: 6 W Temperatura di Funzionamento: -45°C ~ +45°C 39 Sistemi commerciali VMD ed analisi delle loro caratteristiche Umidità relativa: Max 80% Dimensioni: 48 (L) x 110 (H) x 207 (P) Peso: 0,5 Kg 40 Procedura sperimentale per la comparazione delle prestazioni Al termine dell’operazione di ricerca si è giunti all’individuazione di 20 frammenti video. Essi sono stati raggruppati in 3 gruppi, secondo un criterio di similitudine tra gli scenari. 4.3.1 Descrizione dei video 4.3.1.1 Primo gruppo: Prato con alberi, elevata profondità di campo Nomefile Lunghezza sec (frame) Caratteristiche • Piccioni che volano 3_01.avi 01:32:00 (2300) • Persone che corrono in lontananza • Persone primo piano con ombre Nomefile Lunghezza sec Caratteristiche (frame) • Persona che si confonde con la 5_01.avi 07:00:00 (10500) vegetazione • Foglia che oscilla 43 Procedura sperimentale per la comparazione delle prestazioni Al termine dell’operazione di ricerca si è giunti all’individuazione di 20 frammenti video. Essi sono stati raggruppati in 3 gruppi, secondo un criterio di similitudine tra gli scenari. 4.3.1 Descrizione dei video 4.3.1.1 Primo gruppo: Prato con alberi, elevata profondità di campo Nomefile Lunghezza sec (frame) Caratteristiche • Piccioni che volano 3_01.avi 01:32:00 (2300) • Persone che corrono in lontananza • Persone primo piano con ombre Nomefile Lunghezza sec Caratteristiche (frame) • Persona che si confonde con la 5_01.avi 07:00:00 (10500) vegetazione • Foglia che oscilla 43 Procedura sperimentale per la comparazione delle prestazioni Nomefile Lunghezza sec (frame) 5_02.avi 00:20:00 (500) Caratteristiche • Fari di una macchina esterna alla scena 44 Procedura sperimentale per la comparazione delle prestazioni Nomefile Lunghezza sec (frame) 5_03.avi 00:00:48 (1200) Caratteristiche • Tremolio della camera dovuto al vento • Foglia che oscilla 45 Procedura sperimentale per la comparazione delle prestazioni 4.3.1.2 Secondo gruppo: Neve Nomefile Lunghezza sec Caratteristiche (frame) • Riflessi di luce lampeggiante sulla neve 4_01.avi 00:57:16 (1429) • Persone che corrono in lontananza vicino ai riflessi Nomefile Lunghezza sec (frame) 4_02.avi 00:48:07 (1201) Caratteristiche • Cambiamenti di luminosità globali e locali • Persone che camminano in lontananza 46 Procedura sperimentale per la comparazione delle prestazioni Nomefile Lunghezza sec (frame) 4_03.avi 02:06:10 (1652) Caratteristiche • Persone che si avvicinano alla camera • Trairttorie che si intersecano Nomefile Lunghezza sec (frame) 7_01.avi 03:02:00 (1550) Caratteristiche • Persona che si avvicinano alla camera 47 Procedura sperimentale per la comparazione delle prestazioni Nomefile Lunghezza sec (frame) 7_02.avi 00:42:00 (1050) Caratteristiche • Persona che si avvicinano alla camera 4.3.1.3 Terzo gruppo: Cancellata fronte strada Nomefile Lunghezza sec (frame) Caratteristiche 6_01.avi 05:56:15 (8903) • Persona si allontana dalla camera 6_02.avi 00:40:00 (1000) • Passaggio di veicoli 48 Procedura sperimentale per la comparazione delle prestazioni Nomefile Lunghezza sec (frame) Caratteristiche 6_03.avi 00:41:01 (1025) Nomefile Lunghezza sec (frame) 6_04.avi 00:45:05 (1126) • Luminosità attenuata 6_05.avi 00:51:05 (1276) • Passaggio di veicoli 6_06.avi 00:14:00 (350) • Cambiamento di luminosità globale Caratteristiche • Persona si allontana dalla camera 49 Procedura sperimentale per la comparazione delle prestazioni Nomefile Lunghezza sec (frame) 6_07.avi 02:36:00 (3900) Caratteristiche • Oggetto che si muove lentamente 6_08.avi 00:58:20 (1455) 6_09.avi 00:57:15 (1428) Nomefile Lunghezza sec (frame) 6_11.avi 04:10:20 (6252) • Passaggio di nuvole Caratteristiche • Elementi oscillanti per il vento 50 Procedura sperimentale per la comparazione delle prestazioni 4.3.1.4 Effrazione recinzione perimetrale Nomefile 6_10.avi Lunghezza sec Caratteristiche (frame) 00:48:20 (1205) • Persona si cerca di superare recinzione perimetrale 51 Generazione della ground truth con C# Capitolo 5 5. Generazione della ground truth con C# 5.1 Introduzione Generare la ground truth significa registrare, per ogni fotogramma, la dimensione e la posizione degli oggetti in movimento nella scena, attraverso l’ispezione visiva del filmato Per la realizzazione si è scelto di creare una tavola della verità, ovvero una matrice ,in cui nella n-esima riga sono memorizzate la dimensione e la posizione degli oggetti in movimento del frame n-esimo. La dimensione è calcolata come la lunghezza (in px) della base e dell’altezza di un rettangolo circoscritto all’oggetto in movimento, per la posizione si è scelto come punto di riferimento l’angolo in alto a sinistra del rettangolo, l’origine del riferimento è l’angolo in alto a sinistra del frame. La riga è composta da blocchi (ogni blocco descrive un oggeto in movimento) di quattro elementi, nell’ordine (da sinistra a destra) ascissa della posizione, ordinata della posizione, larghezza,altezza. Poiché il numero di oggetti in movimento può essere differire tra i vari frames, per far si che le righe abbiano tutte lo stesso numero di blocchi, quindi di elementi, si compensano gli elementi mancanti con degli zeri. 52 Generazione della ground truth con C# L’assenza di movimento è segnalata attraverso un blocco iniziale in cui tutti gli elementi sono pari a zero, quindi quando tra il frame n-esimo e quello (n+1)esimo non sussistono differenze, i primi quattro elementi della riga (n+1)-esima della tavola sono quattro zeri. La tavola è realizzata come documento di testo , in cui gli elementi di una riga sono separati da una tabulazione; è stato preferito questo formato perché si presta all’importazione dei dati in Matlab. 5.2 Motivazione Generare la ground thruth, senza disporre di un’applicazione apposita, può risultare un procedimento molto lungo e laborioso. Utilizzando strumenti di uso comune un ipotetico metodo di lavoro potrebbe consistere nei seguenti passi: • salvare ogni frame del filmato come immagine. • aprire ogni immagine con un programma (tipo Adobe Photoshop) che consenta di ottenere la posizione del cursore al passaggio del mouse sull’immagine. • per ogni oggetto in movimento identificarne gli estremi, calcolare la posizione e la dimensione, annotare tali valori. In seguito a tali considerazioni è nata l’esigenza di creare un programma che automatizzasse tale procedimento, rendendo il lavoro più agevole. La soluzione scelta per questo fine è stata un’applicazione Windows scritta con il linguaggio di programmazione della famiglia .NET, il C#, facendo uso dell’ambiente di lavoro Microsoft Visual Studio 2005. 5.3 Caratteristiche generali La finestra dell’applicazione è visivamente divisa in cinque parti come disegnato in Fig. 5-1; segue una breve descrizione delle funzionalità associate ad ognuna di esse: • regione tratteggio rosso: controlli per la gestione dei file; • regione tratteggio fucsia: controlli relativi alla scrittura dei dati sul file di testo 53 Generazione della ground truth con C# • regione tratteggio verde: informazioni e controlli circa i rettangoli disegnati • regione tratteggio blu: pannello per la visualizzazione e tracciatura dei rettangoli e riproduzione del filmato, che chiameremo lavagna • regione tratteggio gialla: controlli relativi al video Fig. 5-1 L’applicazione operazioni: Finestra all’avvio dell’applicazione “GroundTruth” “Ground visualizzare Truth” filmati, consente disegnare principalmente rettangoli e tre tipi di memorizzarne le coordinate in un file di testo, disegnare rettangoli memorizzati in un file di testo. 5.4 Visualizzazare filmati 5.4.1 Descrizione qualitativa All’apertura dell’applicazione, fare click sul pulsante accanto all’etichetta ”File video” ,si apre una finestra di dialogo in cui selezionare un file video. Nel pannello viene visualizzato il primo frame del video (il numero d’ordine del frame è visualizzato nell’etichetta posta centralmente sotto la barra di spostamento), 54 Generazione della ground truth con C# vengono visualizzate le caratteristiche del video accanto alle relative etichette (lunghezza, frame rate, larghezza, altezza), viene abilitata la barra di spostamento per posizionarsi nel video e i pulsanti “Play”, “Stop”, “Next Frame”, “PrevFrame”, la cui funzione è facilmente intuibile. Sono abilitati anche i pulsanti “>>”, “<<” che consentono di spostarsi n frame prima o dopo la posizione corrente. Il valore n viene scelto scrivendo il numero desiderato nella casella di testo sotto l’etichetta “Salto frame” e confermando la scelta premendo “OK”. Il valore di default è pari ad uno, cambiandolo si vedrà apparire sui pulsanti “>>” e “<<” il valore scelto. Fig. 5-2 “GroundTruth”, riproduzione video 5.4.2 Implementazione Ogni attivazione di uno dei pulsanti ora descritti implica l’aggiornamento della posizione della barra di spostamento, la quale, ad ogni cambiamento di valore (provocato da uno spostamento manuale della barra o indotto da un pulsante), va ad aggiornare il valore dell’etichetta con il valore del frame, e la posizione attuale del video. 55 Generazione della ground truth con C# Comporta un’eccezione a quanto appena detto la fase di riproduzione, in cui avviene l’operazione opposta, infatti è la barra di spostamento, che grazie all’oggetto Timer è aggiornata, ad intervalli regolari (ogni 1/fps sec) alla posizione corrente del video. Per controllare il filmato si è ricorso a Microsoft DirectX, in particolare è stato necessario aggiungere al progetto Visual Studio il riferimento Microsoft.DirectX.AudioVideoPlayback (contenuto in Microsoft DirectX SDK) che mette a disposizione la classe video, di cui sono stati utilizzati i metodi Video(string) Play(), Stop(), SeekCurrentPosition(double, Microsoft.DirectX.AudioVideoPlayback.SeekPositionFlags) e le proprietà Owner (per assegnare il controllo su cui riprodurre il video), Playing e Paused (per interrogare il sistema circa lo stato del video). 5.5 Disegnare rettangoli e memorizzarne le coordinate in un file di testo. 5.5.1 Descrizione qualitativa Per disegnare un rettangolo è sufficiente cliccare in un punto della lavagna e trascinare il mouse, esclusivamente in basso e a destra rispetto al punto d’inizio, fino al raggiungimento della dimensione desiderata. I rettangoli possono essere disegnati sia sulla lavagna “bianca”, sia su un fotogramma; in quest’ultimo caso sarà necessario aprire prima un file video, come illustrato nel § 5.4.1. Se si vogliono memorizzare i rettangoli disegnati in un file di testo è necessario fare click sul pulsante accanto all’etichetta “File video”, per aprire una finestra di dialogo in cui selezionare un file di testo esistente o crearne uno nuovo. Viene chiesto se confermare la posizione di default per la cartella temporanea o se si vuole selezionare una posizione diversa. I pulsanti utilizzabili sono: • “Next Frame”, “PrevFrame” e “>>”, “<<” con le stesse funzioni viste precedentemente 56 Generazione della ground truth con C# • “Memorizza”: serve per memorizzare sul file i rettangoli disegnati sulla lavagna; se non è presente nessun rettangolo, perché ad esempio non abbiamo rilevato oggetti in movimento, memorizza questa informazione sul file di testo. Se per il frame attuale sono già presenti dati in memoria la pressione del bottone “Memorizza” causa una finestra di allarme che chiede se continuare o meno con la memorizzazione. Questa accortezza è stata presa perché l’operazione non è reversiva e comporta la sovrascrittura di eventuali dati relativi al frame in analisi. • “Aggiungi”: aggiunge il rettangolo disegnato al file di testo, è abilitato solo se si è disegnato almeno un rettangolo sulla lavagna. • “Pulisci”: Elimina ogni informazione nel file dati relativa al frame corrente in modo che venga riconosciuto come “non elaborato”. I pulsanti “Memorizza” “Aggiungi” “Pulisci” oltre alle azioni descritte spostano il file dati ed il filmato (se aperto) al frame successivo. • “Annulla”: è abilitato quando è presente almeno un rettangolo sulla lavagna. Ad ogni pressione del pulsante viene cancellato dalla lavagna l’ultimo rettangolo disegnato • “Ripeti”: consente di ridisegnare l’ultimo rettangolo cancellato dalla lavagna. E’ abilitato se è stato premuto almeno una volta il pulsante “Annulla” e rimane in questo stato finché non sono stati ridisegnati tutti i rettangoli cancellati. La cronologia dei disegni a cui fanno riferimento i pulsanti “Annulla” e “Ripeti” viene pulita appena si cambia frame. Le etichette “X” “Y” “L” “A” riportano rispettivamente l’ascissa e l’ordinata del vertice in alto a sinistra, la larghezza e l’altezza del rettangolo che si sta disegnando, durante la tracciatura, o, negli altri casi, dell’ultimo rettangolo disegnato,. 57 Generazione della ground truth con C# Fig. 5-3 “GroundTruth”, rettangoli disegnati sulla lavagna senza video 5.5.2 Implementazione della sovrimpressione rettangoli Riproduzione con ActiveX (pictureBox1 invisibile) Avanzamento frame per frame (pictureBox1 invisibile) Video (pictureBox1) Box (pictureBox3) Video (pictureBox1) Frame (pictureBox2) Fig. 5-4 Box sopra Frame (pictureBox3 sopra Picturebox2) Organizzazione delle PictureBox La soluzione migliore per realizzare la sovrimpressione dei rettangoli sul filmato consiste nell’utilizzare due picturebox identiche, sovrapposte, trasparenti l’una rispetto all’altra; sulla più profonda viene visualizzato il filmato, mentre 58 Generazione della ground truth con C# sulla più superficiale vengono disegnati i rettangoli.Purtroppo i controlli ActiveX, usati per la riproduzione non consentono la trasparenza. Per ovviare a questo problema si è utilizzato una soluzione con tre picturebox sovrapposte: nella più profonda (PictureBox2) è visualiizato un file bitmap, ottenuto acquisendo il fotogramma dal filmato, sopra ad essa, una seconda picturebox (boxDisegno), posta in trasparenza, è utilizzata per disegnare i rettangoli; infine sulla superficie in una terza pictureBox (picturebox1) viene visualizzato il filmato. Quando si vuole riprodurre il filmato (si attiva il bottone Play) si rende visibile la PictureBox1, invece, quando si vuole disegnare o rivedere un rettangolo (quando il bottone Stop è attivato), la si rende invisibile. L’acquisizione avviene utilizzando la classe Mediaclass, disponibile con la libreria di Windows qedit.dll, che, attraverso i suoi metodi, consente di salvare un frame di un filmato specificando la posizione in cui si trova (in secondi), le dimensioni desiderate dell’immagine e il nome con cui la si vuole salvare. Le immagini sono create ogni volta che si visualizza un frame per la prima volta e, per default, sono salvate in una cartella Temp, creata, se non già esistente, nella directory in cui è presente il file del filmato; è comunque possibile selezionare una cartella diversa attraverso il pulsante posto accanto all’etichetta “Cartella file temporanei”. Per la realizzazione dell’applicazione è stato necessario scrivere una classe, Rettangolo, che, come indica il nome, serve per descrivere un rettangolo. Essa contiene nello stato interno variabili per memorizzare le coordinate del vertice in alto a sinistra del rettangolo, la sua larghezza e altezza, l’oggetto in cui disegnarlo. La classe mette anche a disposizione un metodo disegna() per disegnare il rettangolo (tramite il metodo DrawRectangle(System.Drawing.Pen pen, int x, int y, int width, int height) della classe System.Drawing.Graphics) nell’oggetto definito nello stato interno. Si fa uso anche di un oggetto pubblico, l’ArrayList disegno in cui, per ogni fotogramma, verranno memorizzati i rettangoli disegnati. Il disegno dei rettangoli è basato sull’intercettazione della pressione del mouse sulla lavagna. Questo evento è gestito da pictureBox1_MouseDown, che crea un oggetto di tipo Point, inizializzato con le coordinate del mouse, e scrive tali valori sulle etichette X Y. 59 Generazione della ground truth con C# Per mostrare il rettangolo durante il trascinamento del mouse si è ricorso all’evento boxDisegno_MouseMove che, ad ogni movimento del mouse sulla boxDisegno, che avviene con il mouse premuto, crea un nuovo oggetto Rettangolo, lo inizializza con il punto dato dalla posizione attuale del mouse e quello generato dall’evento precedente boxDisegno_MouseDown, disegna il nuovo rettangolo e tutti quelli memorizzati nell’ArrayList disegno (richiamando il metodo AggiornaDisegno()) e aggiorna le etichette L e A con i nuovi valori. Quando viene rilasciato il mouse, l’evento boxDisegno_MouseUp oltre a svolgere le stesse azioni dell’evento sopra descritto, aggiunge il rettangolo creato a disegno. 5.5.3 Implementazione della memorizzazione Per memorizzare i rettangoli disegnati è innanzitutto necessario aprire un file di testo attraverso l’apposito pulsante. Al termine di questa operazione l’evento btnNomFileTxt_Click crea un nuovo oggetto, salvaRett, della classe Memorizza. Questa classe è stata scritta per gestire tutte le operazioni di lettura e scrittura nel file di testo; tra le variabili dello stato interno la più significativa è l’ArrayList vettRighe, un vettore di lunghezza dinamica, in cui ogni elemento è associato ad una riga del file di testo, ovvero ad un frame del filmato (primo elementoÆ prima riga Æ primo frame, n-esimo elemento Æ n-esima riga Æ nesimo frame) e contiene informazioni relative alla lunghezza della riga associata e alla presenza di un rettangolo per il frame corrispondente. Per contenere questa coppia di informazioni si è scelto di utilizzare come elementi, degli oggetti di una classe, PropRiga, scritta ad hoc. Essa contiene nello stato interno le due variabili che usiamo per memorizzare la lunghezza della riga e la presenza del rettangolo, che sono rispettivamente lung (di tipo int) e noBox (di tipo bool, che assume il valore true se non sono presenti rettangoli, altrimenti false). Queste informazioni rendono la scansione del file di testo più agevole, infatti, quando si vuole memorizzare un rettangolo per il fotogramma n-esimo, bisogna scriverne le coordinate nella riga n-esima del file di testo. Poiché la posizione di un carattere in un file di testo è identificata dal numero di byte che 60 Generazione della ground truth con C# lo separano dall’inizio del file (o dalla fine o dal un'altra posizione), per scrivere l’n-esima riga sarà necessario fornire come posizione la somma delle lunghezze (in byte) delle n-1 righe. Tale valore viene calcolato come n −2 ∑ vettRighe[i].lung , mentre, se non avessimo definito vettRighe, ad i 00 ogni scrittura o lettura, sarebbe stato necessario scorrere il file per contarne le righe. Riprendiamo la descrizione dell’evento btnNomFileTxt_Click; dopo la creazione dell’oggetto salvaRett, viene richiamato il metodo della classe Memorizza CreaVettInd() che serve per inizializzare vettRighe. Per fare questo il file di testo viene letto byte a byte fino alla fine. Ogni volta che si incontra il carattere line feed (che corrisponde al byte 10), ovvero ogni volta che intercettiamo la fine di una riga, viene aggiunto un nuovo oggetto dalla classe Propriga a vettRighe. Vengono settate le due variabili di stato di tale oggetto, rispettivamente con il numero di byte letti e con il valore true, se i primi quattro valori letti sono pari a zero, false altrimenti. Quando si preme il pulsante Memorizza viene attivato l’evento btnMemorizza_Click. Nel diagramma di flusso in Fig. 5-5 è possibile seguire la sequenza di operazioni ed i vari controlli che seguono la pressione del pulsante. Viene richiamato il metodo Memo(disegno) che esegue un controllo sull’Arraylist disegno: se non è stato disegnato neanche un rettangolo (disegno = null) allora una finestra di Warning chiede conferma dell’operazione, quindi, in caso affermativo, nella variabile dello stato interno rigaByte, contenente la stringa in byte da scrivere sul file, vengono scritti quattro zeri e noBox è settata con il valore true, altrimenti il metodo termina. Se invece sulla lavagna è presente almeno un rettangolo (disegno ≠ null) è richiamato il metodo Vuoisovrascrivere(disegno). Viene effettuato un controllo su vettRighe per sapere se per tale riga è stato già memorizzato qualche rettangolo; in questo caso una finestra di warning ricorda che procedendo i dati verranno sovrascritti. Se l’operazione non è confermata l’esecuzione del metodo termina, altrimenti si passa alla scrittura della stringa rigaByte. 61 Generazione della ground truth con C# click memorizza click aggiungi click pulisci Pulisci Vuoisovrascrivere Memo È stato disegnato almeno un box? si Esitono già box memorizzati? È stato disegnato almeno un box? no si si no continuare? no Confermi nessun movimento? si rigaByte=“0 0 0 0” no no Non vuoi memorizzarlo ? si esci si rigaByte=“\n\r” esci CreaRigaByte Creo stringa con caratteristiche rettangoli “10 12 25 66 32 45 20 31” SostituisciNuovaRiga Converto in byte Mi posiziono sul byte corrispondente alla riga da sovrascrivere Aggiungo “/n/r” InserisciNuovaRiga Il frame è stato già memorizzato? si no Inserisco righe vuote (“/n/r”) fino a che numero righe = numeroframe La riga nuova è lunga quanto quella preesistente? si sovrascrivo no Mi posiziono alla fine della riga vecchia Copio in un array i yte da tale posizione fino alla fine del file Mi posiziono alla fine del file Mi riposiziono all’inizio della riga vecchia Scrivo i byte Scrivo la riga nuova Aggiorno vettRighe Scrivo l’array AggiornaVettNuoveRighe Creo nFrame-vettRighe.Count oggetti PropRiga con lung=2 e noBox=false e li aggiungo a vettRighe La riga nuova è più corta della preesistente no si Creo un oggetto PropRiga con lung=rigaByte.Length e l’aggiungo a vettRighe Taglio la parte eccedente del file AggiornaVettSostRighe Sostituisco l’oggetto della classe in vettRighe[nFrame-1] con un novo oggetto PropRighe con lung=rigaByte.Lenght Fig. 5-5 Algoritmo relativo agli eventi Memorizza, Aggiungi, Pulisci 62 Generazione della ground truth con C# CreaRigaByte(disegno): per ogni rettangolo memorizzato in disegno si accede alle proprietà X, Y, L, A e, convertiti i valori da interi a stringhe, vengono copiati nell’ordine nella stringa rigaByte, ricordando di interporre tra due valori adiacenti una tabulazione (\t). La stringa viene chiusa aggiungendo due caratteri, LF e CR e convertita in byte. InserisciNuovaRiga(): il primo compito che svolge questo metodo consiste nel verificare o meno se il frame corrente è già stato posto in corrispondenza con una riga del file di testo, confrontando la lunghezza di vettRighe con il numero d’ordine del fotogramma. Se ciò non è ancora avvenuto, in testa alla stringa rigaByte sono inseriti tante coppie di caratteri LF CR quante righe sono necessarie per raggiungere l’uguaglianza. Il file di testo viene aperto, si raggiunge la posizione per la scrittura effettuando la somma dei campi Lung di tutti gli oggetti contenuti in vettRighe, si effettua la scrittura e si chiude il file. Viene richiamato il metodo AggiornaVettNuoveRighe() per sincronizzare vettRighe con il file di testo: in coda a vettRighe sono aggiunti tanti oggetti PropRighe, con proprietà Lung settata a 2 e NoBox a false, quante righe sono state aggiunte al file di testo, ed un altro con Lung pari alla lunghezza della riga aggiunta e NoBox settato a true. Se il frame è già stato memorizzato viene richiamato il metodo SostituisciNuovaRiga(): se rigaByte è lunga quanto la riga del file di testo da sostituire, l’inizio di questa è settata come posizione corrente (la posizione è determinata come descritto precedentemente) e si sovrascrive con rigaByte, altrimenti, per non sovrascrivere le righe successive (se rigaByte è più lunga della riga preesistente) o non lasciare byte da residui (se rigaByte è più corta), è necessario prima posizionarsi alla fine della riga per copiare le succesive in una stringa temporanea, poi posizionarsi all’inizio della riga per scrivere rigaByte ed infine posizionarsi alla fine della nuova riga per scrivere il contenuto della stringa temporanea. Nel caso in cui rigaByte sia di lunghezza inferiore rispetto alla riga da sostituire, alla fine del file si trovano dei caratteri in eccesso che è necessario eliminare impostando una nuova lunghezza del file. Anche in questo caso bisogna aggiornare vettRighe con AggiornaVettSostRighe(). 63 Generazione della ground truth con C# Come illustrato in Errore. L'origine riferimento non è stata trovata. anche gi eventi relativi all’attivazione dei pulsanti Aggiungi e Pulisci, grazie alla modularità del codice, utilizzano alcuni tra i metodi già descritti per Memorizza. In particolare nel caso di Aggiungi, poiché esso è abilitato solo quando si è disegnato almeno un rettangolo e non avendo un carattere distruttivo, non vengono effettuati tutti i controlli presenti nei metodi Memo(disegno) e VuoiSovrrascrivere(disegno), mentre nel caso di Pulisci si riutilizza solo il metodo SostituisciNuovaRiga(). E’ stato necessario tuttavia scrivere un nuovo metodo Pulisci() per visualizzare una finestra di warning prima di cancellare i dati e per assegnare il valore LF CR a rigaByte. 5.6 Disegnare i rettangoli a partire da un file di testo Fig. 5-6 Visualizazione box: il box viola è disegnato al momento, quello rosso è ricostruito dal file di testo) 64 Generazione della ground truth con C# Nella finestra dell’applicazione GrounTruth è presente una checkbox che consente di visualizzare o meno i rettangolo memorizzati sul file di testo. Nel caso in cui sia spuntata, ogni volta che si cambia frame, viene chiamato il metodo CreaDisegnoMem() che serve per costruire un Arraylist disegnoMem di oggetti della classe Rettangolo, partendo da dati contenuti in un file di testo opportunamente formattato (come descritto in 0). Prima di leggere il file di testo viene consultato vettRighe per evitare accessi impropri o inutili al file. Infatti se il numero del frame è superiore alla lunghezza di vettRighe significa che non esiste alcuna riga relativa al frame, se invece la riga esiste, ma la lunghezza è pari a due, allora tale frame non è stato ancora analizzato. In questi due casi disegnoMem è settato con il valore null. Invece se NoBox ha valore true allora già so che non è presente movimento, viene creato l’oggetto disegnoMem, ma lo si lascia vuoto. Si riduce l’accesso al file solo nel caso in cui si abbia Lung>2 e NoBox=false; in questa circostanza la posizione nel file è impostata all’inizio della riga da leggere, si copiano i byte in un vettore finché non si incontra il carattere LF (che mi indica la fine della riga). Si converte il vettore da byte a carattere e, dividendolo ogni volta che si incontra il carattere ‘\n’ , si ottiene un array di stringhe, che, con un ulteriore conversione, diviene un array di interi. Tenendo ancora una volta presente i vincoli imposti sulla formattazione del testo, si considerano gli elementi dell’array a gruppi di quattro, ognuno quali descrive un rettangolo. Per ognuno di essi si crea un nuovo oggetto della classe Rettangolo inizializzata con questi valori e lo si aggiunge a disegnoMem. Il nuovo ArrayList creato viene utilizzato dal metodo AggiornaDisegno(), richiamato ogni volta che la lavagna deve essere aggiornata, che si occupa di disegnare i rettangoli contenuti in disegno (Fig. 5-6 box colore viola) e disegnoMem (Fig. 5-6 box colore rosso) ed inoltre, in base al valore assunto da quest’ultimo, null, vuoto o con oggetti, aggiorna anche l’etichetta sottostante la checkbox, con una stringa di valore rispettivamente “frame non elaborato”, “nessun rettangolo memorizzato per questo frame”, “x box presenti”. 65 Rilevare con Matlab le sovrimpressioni generate dai VMD. Capitolo 6 6. Rilevare con Matlab le sovrimpressioni generate dai VMD. 6.1 Introduzione L’obbiettivo del software Matlab è di intercettare la posizione e la dimensione delle sovrimpressioni che i VMD realizzano per evidenziare gli oggetti in movimento sulla scena, con lo scopo di confrontare tali valori con la ground truth precedentemente generata e indicare quale VMD ha un comportamento migliore. Fig. 6-1 Due tipi di sovrimpressione 66 Rilevare con Matlab le sovrimpressioni generate dai VMD. I due modelli di VMD considerati, come accennato nel §3, fanno uso di due diversi tipi di sovrimpressioni (vedi Fig. 6-1): il Gps Standard disegna in bianco gli angoli di un rettangolo che contiene l’oggetto in movimento, il Bosch traccia un contorno rosso intorno all’oggetto. A causa dei due diversi modi di operare è stato necessario realizzare due algoritmi diversi, che si concretizzano nelle funzioni Esegui_GPS ed Esegui_Bosch. 6.2 Elementi in comune Le due funzioni, nonostante siano basate su due diversi algoritmi di ricerca, presentano degli elementi in comune. XY XY(1,1) … XY(1,nR) … XY(r,c) … … … … XY(nF,1) … XY(nF,nR) XY(r,c).Ang XY(r,c).Ang(1,1) … XY(r,c).Ang(1,v) XY(r,c).Ang(1,4) XY(r,c).Ang(1,v) width height Fig. 6-2 Struttura della matrice XY Primo tra essi è l’obiettivo finale, ovvero la creazione di un elenco dei rettangoli rilevati (identificati dalle coordinate dei vertici) in ogni frame, realizzato memorizzando queste informazioni in una matrice XY, restituita dalla funzione al termine dell’esecuzione. Essa ha un numero di righe pari al numero di frame del filmato (all’elemento n-esimo corrisponde il frame n-esimo) e numero di colonne pari al massimo numero di rettangoli identificati in un frame. Ogni elemento è una struttura chiamata Ang, composta da un vettore riga di 67 Rilevare con Matlab le sovrimpressioni generate dai VMD. quattro elementi strutturati, ognuno dei quali rappresenta un vertice del rettangolo, in particolare il primo è associato al vertice in alto a sinistra (indicato con nord ovest, NW), il secondo quello NE e così via fino al quarto, scorrendo i vertici in senso orario. Ogni elemento è composto da due campi, width e height, in cui vengono memorizzate rispettivamente l’ascissa e l’ordinata di un vertice. Img.cdata Img.cdata(:,:,1) Img.cdata(:,:,2) Img.cdata(:,:,3) Fig. 6-3 Canali rgb di un immagine in scala di grigi Come evidente dalle considerazioni sinora fatte, gli algoritmi si basano sull’analisi di filmati. In Matlab vengono trattati come una sequenza di immagini rgb, a cui si può accedere attraverso il comando aviread(filename,index), che restituisce un variabile strutturata in due campi: colormap e cdata. Quest’ultima è l’immagine vera e propria, rappresentata da una matrice tridimensionale (L x A x 3), in cui L e A sono rispettivamente la larghezza e l’altezza del video (in px), e alla prima dimensione corrisponde il canale rosso, alla seconda quello verde ed alla terza quello blu. Nell’esempio di Fig. 6-3 è considerata un’immagine estratta da un filmato in scala di grigi, che però è interpretata da Matlab come a colori, quindi è ancora descritta dalle tre componenti rgb. Data la presenza di sole 68 Rilevare con Matlab le sovrimpressioni generate dai VMD. componenti grigie, assumono gli stessi valori. In questo caso è più conveniente trasformare il formato dell’immagine in grayscale: la matrice che descrive l’immagine da tridimensionale diventa bidimensionale (LxA). Entrambe le funzioni richiedono come parametri tin e tfin, che sono rispettivamente l’indice del frame del filmato in cui deve iniziare l’elaborazione quello in cui deve terminare. La necessità di tali valori deriva dalla non corrispondenza della lunghezza del filmato posto in ingresso al VMD e quello registrato in uscita, che fine. I due eccede per alcuni frame neri presenti all’inizio e alla valori vengono calcolati dalla funzione [tin,tfin]=taglia_film(nomefile,npti,ns). Essa legge il primo frame della sequenza, lo converte in scala di grigi, considera il valore della luminanza di npti pixel, scelti casualmente e, se più del cinque per cento di essi supera il valore di soglia ns, il frame è considerato non nero (quindi termina la funzione), altrimenti tali operazioni vengono ripetute sui frame successivi. Per individuare l’ultimo frame non nero si utilizza lo stesso procedimento, iniziando però dall’ultimo frame e considerando ad ogni passo il precedente anziché il successivo. 6.3 Algoritmo per GPS Standard (a) originale Fig. 6-4 (b) senza bianco Trasformazione della scala di grigi L’algoritmo sviluppato individua gli angoli, disegnati dal VMD, ricercando nell’immagine gruppi di pixel che soddisfino condizioni sia sulla forma, sia sul colore. E’ evidente che è impossibile individuare un angolo bianco disegnato in una regione dello stesso identico colore, quindi, per evitare situazioni ambigue, è 69 Rilevare con Matlab le sovrimpressioni generate dai VMD. necessario che in ogni (rgb=[255,255,255]) quadro appartengano gli ai unici pixel rettangoli. di Per colore bianco soddisfare questa condizione è stato necessario agire sui filmati in ingresso al VMD, effettuando una trasformazione della scala di grigi, abbassando i valori di luminanza quando essa supera il valore 240. Come si vede in Fig. 6-5 la trasformazione provoca una minore sfumatura di tonalità, conseguentemente il fascio di luce risulta più compatto. Bisogna però tener conto che l’esempio rappresenta una condizione limite e tuttavia non si sono riscontrate anomalie nella rilevazione. annerisco la scritta “ALARM” resize_matching: si ridimensiona l’immagine di un fattore r<1 e si cercano i pixel bianchi si ridimensiona l’immagine di un fattore r<R<1 matching: si cercano gli angoli negli intorni dei pixel individuati precedentemente verifica_rect_new: si ricostruiscono i rettangoli a partire dagli angoli individuati Fig. 6-5 Schema di funzionamento della funzione Esegui_GPS L’algoritmo è implementato attraverso la funzione Esegui_GPS, così dichiarata: function [XY] = Esegui_GPS(nomefile_in,tin, tfin, passo, Rsfoca, Rmatch, soglia_resize_matching, soglia_matching, rgb) Come si vede essa richiede in ingresso diversi parametri il cui significato verrà spiegato quando ne verrà fatto uso. In Fig. 6-5 sono elencate le principali operazioni che la funzione svolge su ogni frame, appartenente all’intervallo [tin, tfin] (vedi § 6.2). 70 Rilevare con Matlab le sovrimpressioni generate dai VMD. Il primo passo da eseguire, dopo aver estratto il frame dal filmato, consiste nell’oscuramento della zona dell’immagine in cui, in caso di allarme, compare la scritta “ALLARM”, per evitare che qualche lettera possa essere scambiata per un angolo. Ciò è effettuato ponendo a zero il valore rgb dei pixel interessati. Viene poi richiamata la prima funzione: [coord]=resize_matching(img,rgb,Rsfoca,s), il cui obiettivo è effettuare una rapida indagine preliminare sull’immagine rimpicciolita per identificare le regioni in cui probabilmente sono presenti degli angoli. Ciò serve per ridurre il numero di pixel da esaminare, quindi i tempi di elaborazione, infatti solo in corrispondenza dei punti individuati si effettuerà una ricerca più approfondita, utilizzando un’immagine di dimensione maggiore. Questa funzione ridimensiona l’immagine img di un fattore Rsfoca minore di uno, ne scorre tutti i pixel e, se il valore della luminanza differisce dallo scalare rgb per un valore in modulo inferiore alla soglia s, ne memorizza le coordinate aggiungendo un elemento al vettore coord (strutturato nei due campi width e height). La difficoltà incontrata è stata nel dimensionare la soglia s e nel trovare il giusto compromesso tra il costo computazionale e l’accuratezza nell’identificazione, dipendenti dalla dimensione dell’immagine, ovvero dal parametro Rsfoca. (a) Rsfoca=0.2 s=20 (b) Rsfoca=0.3 s=20 71 Rilevare con Matlab le sovrimpressioni generate dai VMD. (c) Rsfoca=0.2 (c) Rsfoca=0.3 s=30 s=30 Fig. 6-6 Effetto funzione resize_matching sul video In Fig. 6-6 è visibile l’effetto della funzione su un fotogramma, in cui i pixel identificati sono segnati in rosso: in (a), situazione computazionalmente meno costosa, non vengono individuati tutte e due i rettangoli; in (c) invece aumentando la soglia, i rettangoli vengono rilevati, ma sono segnalati anche pixel che non interessano; la soluzione migliore è quella proposta in (b). Una volta creato il vettore coord è possibile richiamare la funzione matching, così definita: [minimo]=matching(rgb,img,coord,minimo,s). minimo minimo(1,1) minimo(1,c) … minimo(1,4) SE SW C=1…4 NW NE minimo(1,c).dati minimo(1,c). dati(1,1) … … … ... minimo(1,c). dati(1,a) a=1… minimo(1,c).dati(1,a)) value width height Fig. 6-7 Struttura del vettore minimo 72 Rilevare con Matlab le sovrimpressioni generate dai VMD. Lo scopo è creare un vettore riga, minimo, di quattro elementi (vedi Fig. 6-7), ognuno in corrispondenza con una classe di angoli: il primo elemento con l’angolo a NW del rettangolo, il secondo con quello a NE, il terzo con SE e il quarto con SW Ciascun pixel del vettore coord e quelli appartenenti ad un suo intorno devono essere collocati in una o più classi. Poiché ogni classe deve poter contenere più pixel, è stato necessario definire i quattro elementi di minimo come strutture, chiamate dati, ognuna delle quali è ancora un vettore riga i cui elementi sono strutture a tre campi, width e height (in cui memorizzare rispettivamente l’ascissa e l’ordinata del pixel), value (il cui significato verrà spiegato successivamente). Per classificare un pixel come possibile candidato ad una classe si valuta la somiglianza tra l’angolo ideale, (di dimensioni fissate e colore bianco, uniforme su tutta la superficie), rappresentativo della classe in esame, ed uno ottenuto applicando all’immagine una maschera di forma e dimensione identiche all’angolo ideale. Il posizionamento della maschera a seconda della classe avviene come in Fig. 6-8, il pixel in esame è disegnato in arancio. Fig. 6-8 NW NE SW SE Maschere per la valutazione della somiglianza Per ogni pixel esaminato vengono provate tutte e quattro le maschere. 73 Rilevare con Matlab le sovrimpressioni generate dai VMD. La somiglianza è valutata attraverso la differenza tra la somma dei valori delle luminanze dei pixel dell’immagine mascherata e la somma dei valori delle luminanze dell’angolo ideale, un valore costante ed uguale per tutte e quattro le classi. L’appartenenza ad una classe è determinata confrontando il valore assoluto della differenza con la soglia s, quindi un pixel può appartenere anche a più di una classe. Dopo diverse prove si è visto che, scelto per s il valore 50, si ottiene il riconoscimento di tutti gli angoli e contemporaneamente un basso numero di pixel erroneamente riconosciuti come tali. Tale valore implica un discostamento massimo tra l’immagine mascherata e l’angolo ideale di 2.5%= 50 , dove 8 255 * 8 tiene conto del numero dei pixel che compongono l’angolo ideale, 255 è il valore della luminanza del colore bianco. zoom minimo pixel in esame intorno da esaminare pixel in coord Fig. 6-9 Creazione della struttura minimo 74 Rilevare con Matlab le sovrimpressioni generate dai VMD. Il passo successivo da compiere consiste nel determinare quali tra gli angoli identificati appartengono allo stesso rettangolo. Questa operazione è svolta dalla funzione così definita: [xy]=verifica_rect(minimo,marg). Essa, elabora i dati memorizzati nella struttura minimo e restituisce un vettore xy, in cui ogni elemento descrive un rettangolo tramite le coordinate dei quattro vertici. xy è una riga del vettore XY, descritto in § 6.2 (vedi Fig. 6-2). L’algoritmo sviluppato identifica un rettangolo sulla base di soli tre angoli, perché in alcuni fotogrammi, a causa del ridimensionamento dell’immagine e del rumore introdotto dal processo di acquisizione, il quarto angolo non è visibile o rilevabile. Si è ricostruito un rettangolo se troviamo tre angoli, appartenenti a classi diverse, le cui coordinate (X,Y), come chiarito di seguito, sono in corrispondenza, Indichiamo con nw il generico elemento di minimo(1,1), contenente le coordinate degli angoli della classe NW, con ne se sw gli elementi delle classi NE SE SW;. inoltre con il simbolo Æ l’operatore corrispondenza, applicabile tra due elementi di classi diverse e definito come segue: nwÆne Ynw = Yne ± 2 neÆse X ne = X se ± 2 seÆsw Yse = Ysw ± 2 swÆnw X sw = X nw ± 2 Come si vede sono considerati in corrispondenza anche angoli le cui coordinate non coincidono perfettamente. Si è lasciato un margine d’errore di 2 pixel per tener conto di possibili imprecisioni dovute al ridimensionamento. La ricerca è esaustiva, infatti vengono provate tutte le possibili corrispondenze, seguendo quest’ordine: nwÆneÆse; neÆseÆsw; swÆnwÆne. Fissato il primo elemento di NW, nw1, si procede come illustrato in Fig. 6-10: 75 Rilevare con Matlab le sovrimpressioni generate dai VMD. ∃ ne' ∈ NE | nw → ne' no si ∃ ne' ∈ NE | nw → ne' no si Scrivo le coordinate degli angoli in xy Passo ell’elemento successivo di NW Fig. 6-10 Ricerca delle corrispondenze tra angoli Durante il passo di scrittura si memorizzano anche le coordinate dell’angolo non analizzato, ricavate da quelle dei tre angoli noti.; al primo passo si ha: X sw = X nw1 e Ysw = Yse' . Completata la memorizzazione si aggiorna minimo eliminando tutti gli elementi memorizzati e quelli che cadono in un intorno 2 x 2 (px). Se una delle classi in esame è vuota (nw, ne o se) oppure sono arrivato alla fine di NW, allora passo alla corrispondenza successiva (neÆseÆsw). L’algoritmo si interrompe quando almeno due classi sono vuote, perché non si possono più costruire rettangoli, oppure quando sono state esaminate tutte le corrispondenze. 6.4 Algoritmo per Bosch Questo algoritmo, differentemente dal precedente che si basa sulla discriminazione di forme, sfrutta solamente la differenza cromatica tra il fotogramma e il bordo, disegnato dal VMD, dell’oggetto in movimento rilevato. L’algoritmo è implementato attraverso la funzione Esegui_Bosch che è così dichiarata: 76 Rilevare con Matlab le sovrimpressioni generate dai VMD. [XY]=esegui_bosch(tin,tfin,nomefile,Rmatch,soglia_rosso,passo,soglia _lung,Rout) In Fig. 6-11 sono elencate le principali operazioni che la funzione svolge su ogni frame, appartenente all’intervallo [tin, tfin] (vedi § 6.2). Ridimensioni l’immagine di un fattore r<1 Annerisco tutto ciò che non è rosso Seguo i vari contorni rossi, memorizzo le coordinate, annerisco i pixel analizzati Annerisco anche i pixel che formano lo spessore del contorno Elimino eventuali contorni di lunghezza non significativa Memorizzo le coordinate dei rettangoli di dimensione minima che contengono i contorni individuati Elimino eventuali rettangoli contenuti in altri Fig. 6-11 Schema di funzionamento della funzione Esegui_Bosch Il primo passo da compiere consiste nel ridimensionare l’immagine per velocizzare l’elaborazione. Dopo diverse prove effettuate con i vari filmati si è concluso che la minima dimensione, che consente il corretto rilevamento dei contorni, si ha in corrispondenza di un fattore Rmatch pari a 0.2. Effettuando una scansione per righe si cerca il primo pixel color rosso. Ovviamente i pixel che formano il contorno non hanno tutti lo stesso punto di rosso (rgb=[255 0 0]), bensì assumono diverse sfumature, come visibile in Fig. 6-12. Poiché i filmati elaborati dalla funzione presentano solo tonalità di grigio, le tre componenti rgb assumono più o meno lo stesso colore, tranne sui contorni 77 Rilevare con Matlab le sovrimpressioni generate dai VMD. disegnati dal VMD. Questa considerazione ha portato a classificare come pixel appartenenti al bordo solo quelli il cui livello di rosso supera quello di verde di 30 (soglia_rosso). Fig. 6-12 Diverse tonalità di rosso del contorno sovrimpresso dal VMD A partire dal primo pixel individuato si vuole percorrere il bordo in senso orario, mantenendosi sempre al suo esterno. La funzione poss_succ determina, sulla base delle coordinate del pixel attuale e quello precedente, l’ordine con cui verificare quale tra i pixel appartenenti al vicinato 3x3 è il pixel successivo del contorno. P S7 S1 S6 A S2 S5 S4 S3 S6 P S7 S5 A S1 S4 S3 S2 S4 S5 S6 S3 A P S2 S1 S7 S7 S1 S2 P A S3 S6 S5 S4 S1 S2 S3 S7 A S4 P S6 S5 S5 S6 P S4 A S7 S3 S2 S1 S2 S3 S4 S1 A S5 S7 P S6 S3 S4 S5 S2 A S6 S1 S7 P Fig. 6-13 Connettività pixel 78 Rilevare con Matlab le sovrimpressioni generate dai VMD. In Fig. 6-13 sono visualizzate tutte le possibili situazioni: P indica il pixel precedente, A quello attuale, S1…S7 sono i pixel successivi. La funzione restituisce una matrice S 7x2; in ogni riga sono memorizzate, rispettivamente, l’ascissa e l’ordinata del possibile pixel successivo, ad S1 corrisponde la prima riga a S2 la seconda e così via. La funzione succ verifica se i pixel dell’immagine, aventi coordinate specificate nelle righe della matrice S sopra definita, appartengono al bordo o meno. I pixel vengono controllati seguendo l’ordine della matrice ed è scelto come pixel successivo il primo che possiede le giuste caratteristiche cromatiche; questo, impedisce che si formino dei cicli e garantisce l’ispezione sempre sui pixel più esterni del contorno, come mostrato in Fig. 6-14. S1 S2 S3 S7 A S4 P S6 S5 S7 S1 S2 P A S3 S6 S5 S4 S6 P S7 S5 A S1 S4 S3 S2 S4 S5 S6 S3 A P S2 S1 S7 S3 S4 S5 S2 A S6 S1 S7 P S5 S6 P S4 A S7 S3 S2 S1 S2 S3 S4 S1 A S5 S7 P S6 P S7 S1 S6 A S2 S5 S4 S3 Fig. 6-14 Esempio di rilevamento di un bordo 79 Rilevare con Matlab le sovrimpressioni generate dai VMD. Man mano che si compone il bordo nel vettore B vengono memorizzate le coordinate dei pixel scelti, inoltre questi vengono sbiancati per non essere nuovamente elaborati durante la ricerca di altri contorni nell’immagine. Si ottiene il risultato in Fig. 6-15(b). (a) Immagine di (b) Identificazione e partenza sbiancamento del bordo esterno (c) Sbiancamento dello (d) Creazione del box spessore del bordo Fig. 6-15 Processo di identificazione di bordi 80 Rilevare con Matlab le sovrimpressioni generate dai VMD. Per questo stesso motivo, una volta completata la ricerca, si sbiancano anche i pixel appartenenti allo spessore del bordo, ottenendo il risultato in Fig. 6-15(c). Si prosegue esaminando il vettore B per trovare tra le coordinate memorizzate la massima e minima ascissa e la massima e minima ordinata, che descrivono il più piccolo rettangolo contenente il contorno rilevato. Le coordinate dei quattro angoli del box vengono memorizzate nel vettore XY (vedi § 6.2). Il procedimento illustrato sinora si ripete fino al raggiungimento della fine dell’immagine. Nel caso in cui si incontra una discontinuità nel bordo (ovvero nessun pixel del vicinato soddisfa i vincoli cromatici), quindi non si riesce a chiuderlo, i pixel individuati fino a quel momento sono comunque memorizzati e viene ad essi associato un rettangolo, come avviene nella situazione normale. Procedendo nella scansione dell’immagine si incontrerà un pixel appartenente alla parte di bordo tralasciata durante la precedente scansione, anche a questa verrà associato un rettangolo. In conclusione si corre il rischio che ad un bordo vengano associati più rettangoli, ovvero più oggetti. Per evitare questo problema, una volta terminata la scansione dell’immagine, si esegue un controllo sul vettore XY e, ogni volta che si incontrano due rettangoli sovrapposti, vengono uniti. 6.5 Algoritmo per il calcolo e il confronto delle prestazioni L’elaborazione dei filmati con gli algoritmi sopra descritti ha portato alla creazione di matrici XY. Rimane ancora da comparare i valori ottenuti con quelli presenti nella tavola delle verità. Esegue questo compito la funzione prest così definita: [FA, ES ,ND, EA, EB, EArea, D, verita_tot, n_mov_obj] = prest (XY, verita_tot, passo) verita_tot rappresenta la tavola della verità; è una matrice ottenuta importando il file di testo, descritto in § 5.1. Da ora in poi, per brevità, chiamiamo RV (rettangolo vero) il generico rettangolo memorizzato in verità_tot e RR (rettangolo rilevato), quello in XY. 81 Rilevare con Matlab le sovrimpressioni generate dai VMD. La funzione restituisce i seguenti vettori, con lunghezza pari a quella di verita_tot: • FA: numero di falsi allarmi. • ES: numero di errori di segmentazione. Questo fenomeno si verifica quando il VMD non separa due oggetti in movimento vicini, bensì li identifica come uno solo. • ND: numero di oggetti veramente in movimento non rilevati • EA: errore di aggregazione. E’ l’vento opposto a ES, ovvero si verifica quando un oggetto in movimento viene riconosciuto come due o più oggetti. • D: numero di oggetti effettivamente in movimento rilevati come tali dal VMD. • EB: errore baricentro. Questo valore è pari alla somma delle distanza tra i baricentri dei RV e RR, normalizzata rispetto a D. • EArea: errore area. E’ pari alla somma delle differenze tra le aree dei RR e dei RV, normalizzata rispetto a D. • n_mov_obj: numero di oggetti veramente in movimento. Ci soffermiamo sulle operazioni da compiere per determinare la generica t- esima componente di questi vettori. Esse necessitano solo della t-esima riga di XY e di verita_tot, che indichiamo rispettivamente con XYt e Vt Per il calcolo si utilizza una matrice tridimensionale di appoggio tav con un numero di colonne pari alla lunghezza di Vt , riempita nel seguente modo: Scorro il vettore riga XYt ; per la generica componente k-esima XYt(k) cerco nel vettore Vt i rettangoli che toccano (o si sovrappongono) a quello descritto da XYt(k). Ogni volta che ne localizzo uno, diciamo essere nella vesima posizione di Vt , scrivo il valore k nella prima cella libera della colonna vesima della prima dimensione; nella stessa posizione, ma nella seconda e terza dimensione, scrivo rispettivamente il valore della distanza tra i baricentri, e dell’area del rettangolo descritto da XYt(k). 82 Rilevare con Matlab le sovrimpressioni generate dai VMD. XY1 XY2 XYk XYK X1 Y1 L1 A1 X2 Y2 L2 A2 Xv Yv Lv Av XV YV LV AV k EBkv tav(:,:,1) k Areak tav(:,:,2) EB tav(:,:,3) Area Fig. 6-16 Struttura della matrice tav Al termine della scansione di XYt , il numero di colonne vuote di tav è pari ai RV non rilevati dal VMD; se invece una colonna presenta più di un elemento, allora, significa per un RV il VMD ha rilevato più oggetti, mentre, se uno stesso RR è presente in più colonne, allora il VMD non ha discriminato degli oggetti. E’ evidente come svolgendo questo tipo di analisi sulla matrice tav sia possibile ricavare i vettori di cui sopra. Infine i risultati ottenuti sono stati graficati con la funzione graficaprest. 83 Rilevare con Matlab le sovrimpressioni generate dai VMD. Con i dati sino qui ottenuti è ancora difficile dare una valutazione delle prestazioni, perché ancora troppo voluminosi, quindi si è ricorso a delle misure statistiche ovvero il valori medi e le varianze. 84 Analisi dei risultati Capitolo 7 7. Analisi dei risultati 7.1 Introduzione Nei paragrafi che seguono sono presentati i grafici delle prestazioni. Per ogni gruppo di filmati (vedi § 4.3.1) sono disponibili due tipi di grafici a barre: il primo, più articolato, presenta l’andamento di parametri prestazionali per tutti i fotogrammi analizzati, mentre il secondo solo i valori medi e le varianze. Tra i grafici del primo tipo si trovano quelli relativi all’errore dei baricentri e delle aree, in cui i valori sono rappresentati da barre blu su uno sfondo verde, visibile solo in corrispondenza dei frame in cui il VMD ha rilevato movimento. Questo è stato necessario per distinguere i casi in cui l’errore è nullo perché si è avuta un’elevata precisione da quelli in cui è nullo perché non è stato rilevato alcun oggetto. Per quanto riguarda gli altri parametri troviamo in grigio, sullo sfondo, i valori della tavola delle verità, su cui si sovrappongono le barre celesti rappresentanti il numero di oggetti rilevati. Ciò significa che il grigio corrisponde agli oggetti non rilevati. E’ visibile inoltre in rosso, sul semipiano negativo solo per una maggiore economia spaziale, il numero dei falsi allarmi. 85 Analisi dei risultati 7.2 Primo gruppo 7.2.1 Analisi dei frame Fig. 7-1 grafici delle prestazioni GPS-Standard, video del primo gruppo 86 Analisi dei risultati Fig. 7-2 grafici delle prestazioni Bosch, video del secondo gruppo Nella prima parte della sequenza (frame 1–44) il Bosch, differentemente dal GPS, identifica a tratti le persone lontane che corrono, anche se talvolta (frame 17 e 48), a causa della velocità del movimento, genera dei FA. Infatti continua ad essere segnalato come in movimento una persona che in realtà ha già cambiato radicalmente posizione. Il GPS, oltre ai problemi di riconoscimento, genera dei FA (frame 8) causati piccioni nella parte inferiore del frame. 87 Analisi dei risultati Quando le persone si mimetizzano con gli alberi (frame 95–114) entrambi i VMD non riescono nella rilevazione. Man mano che le persone fuoriescono dal bosco (frame 115–141) per i VMD è più facile rilevarli. (frame 143–180) Si invertono i ruoli: ora è il Bosch a soffrire, non identificando nulla, mentre il GPS risulta abbastanza preciso, nonostante il movimento delle persone in direzione della camera che non generano sostanzialmente un cambiamento nella forma dei blob ma non nella posizione. (frame 143–180) Si invertono i ruoli: ora è il Bosch a soffrire, non identificando nulla, mentre il GPS risulta abbastanza preciso, nonostante il movimento delle persone in direzione della camera che non generano sostanzialmente un cambiamento nella forma dei blob ma non nella posizione. 88 Analisi dei risultati Quando le persone sono sono vicine alla camera (frame 208–230) entrambi i dispositivi non incontrano problemi di rilevazione. Tuttavia, come evidenziato dall’aumentare dell’errore trai i baricentri, i VMD non riescono a distinguere le persone dalle loro ombre. Il Gps, negli ultimi frame incontra nuovamente problemi con i piccioni che causano FA. In questa prima parte è da notare come entrambi i VMD non siano stati in grado di discriminare le due persone, come evidente dai numerosi errori di segmentazione. (frame 238–309) Si cambia leggermente scenario, ma il ripresentarsi di alcuni eventi aiuta a capire le proprietà dei due VMD: il Bosch genera dei falsi allarmi, ancora una volta dovuti al persistere dell’allarme su posizioni remote delle persone, riesce però a garantire una rilevazione costante, al contrario del concorrente. Gli errori relativi all’area e al baricentro sono sensibilmente più bassi rispetto ai frame precedenti. 89 Analisi dei risultati (frame 329–340) Il bagliore provocato dai fari di un veicolo fuori campo genera FA in entrambi i dispositivi. (frame 380–465) Le oscillazioni della camera, dovute al vento, generano più FA nel GPS che nel Bosch, che quindi risulta essere più robusto a questo tipo di fenomeni. 90 Analisi dei risultati 7.2.2 Conclusioni: Istogramma parametri prestazionali VMD GPS-Standard, filmati gruppo1 Errore Baricentro 10 5 0 0 20 40 60 80 100 120 140 Errore Area 40 20 0 -20 0 20 40 60 80 100 120 140 2 2.5 3 3.5 2 2.5 3 3.5 2 2.5 3 3.5 Rilevati 200 100 0 -0.5 0 0.5 1 1.5 Non segmentati e non Aggrregati 100 50 0 -0.5 0 0.5 1 1.5 Falsi Allarmi 400 200 0 -0.5 Fig. 7-3 0 0.5 1 1.5 Istogramma parametri prestazionali VMD GPS-Standard Istogramma parametri prestazionali VMD Bosch, filmati gruppo1 Errore Baricentro 10 5 0 -20 0 20 40 60 80 100 120 Errore Area 40 20 0 -2 0 2 4 6 8 10 12 14 16 Rilevati 200 100 0 -0.5 0 0.5 1 1.5 2 2.5 1.5 2 2.5 1.5 2 2.5 Non segmentati e non Aggrregati 100 50 0 -0.5 0 0.5 1 Falsi Allarmi 600 400 200 0 -0.5 Fig. 7-4 0 0.5 1 Istogramma parametri prestazionali VMD Bosch 91 Analisi dei risultati Comparazione statistiche delle prestazioni, filmati gruppo1 Valore Atteso Rilevati Varianza Rilevati 1 1 0.5 0.5 0 0 1 1 Valore Atteso FA Varianza FA 0.4 0.4 0.2 0.2 0 0 1 1 Valore Attero Errore Baricentro Varianza Errore Baricentro 30 1000 20 500 10 0 0 1 1 Valore Atteso Errore Aree Varianza Errore Aree 10 400 5 200 0 0 1 1 Valore Atteso Errore Segmentazione e Aggregazione Varianza Segmentazione e Aggregazione 0.4 0.1 0.2 0.05 0 0 1 1 BOSCH GPS-Standard Fig. 7-5 Comparazione statistiche delle prestazioni, video gruppo 1 Come detto fino adesso, la capacità di rilevazione, come anche gli errori di segmentazione dei dispositivi risultano essere pressoché uguali, mentre, per quanto riguarda i FA, il Bosch è più prestante. Anche l’errore tra i baricentri e tra le aree vede vincere il Bosch, che ha non tanto un valor medio inferiore, quanto la varianza, sinonimo di un comportamento più omogeneo nel filmato. 92 Analisi dei risultati 7.3 Secondo gruppo 7.3.1 Analisi dei frame Fig. 7-6 grafici delle prestazioni GPS-Standard, video del secondo gruppo 93 Analisi dei risultati Fig. 7-7 grafici delle prestazioni Bosch, video del secondo gruppo (Frame 1–145) Per questa prima sequenza ai VMD è stata attivata una maschera tale che la zona di osservazione escludesse il gatto delle nevi, quindi il corretto funzionamento prevede la rilevazione della sola persona in movimento. Il GPS non è riuscito a compiere questa operazione ed inoltre ha generato molti falsi allarmi a causa dei bagliori causati dal gatto delle nevi; il Bosch, se pur con un po’ di ritardo, ha rilevato la persona, ma è rimasto vittima dei cambiamenti di luminosità, anche se in misura inferiore rispetto al concorrente. 94 Analisi dei risultati Anche in uno scenario con luminosità più regolare (frame 146–266), ma con oggetti molto distanti dalla camera, il Bosch, al contrario del GPS riconosce la persona quasi durante l’intero percorso. Al contrario della precedente sequenza, i due dispositivi generano un numero di FA quasi uguale. (frame 267–583) Entrambi i VMD reagiscono abbastanza bene alla sequenza proposta, anche se il Gps fatica a distinguere i diversi blob, come evidente dall’elevato numero di frame in cui è presente errore di segmentazione. 95 Analisi dei risultati (frame 433–453) Sono da evidenziare le difficoltà incontrate dal Bosch nel distingue gli oggetti dalle ombre generate da un’illuminazione artificiale. (frame 339–347) Il Bosch, come già accaduto, evidenzia come allarme una posizione remota. 96 Analisi dei risultati (frame 584–1038) In questo caso il GPS è leggermente migliore nella rilevazione, mentre per i FA si invertono le parti. (frame 1039–1144 ) Entrambi i VMD risultano insensibili allo spostamento della camera ed alla neve alzata dal vento. Tuttavia si riscontra una migliore capacità di rilevazione da parte del Bosch. 97 Analisi dei risultati 7.3.2 Conclusioni Fig. 7-8 Istogramma parametri prestazionali VMD GPS-Standard Istogramma parametri prestazionali VMD Bosch, filmati gruppo2 Errore Baricentro 150 100 50 0 -20 0 20 40 60 80 100 120 140 Errore Area 200 100 0 -50 0 50 100 150 200 250 Rilevati 400 200 0 -1 0 1 2 3 4 5 6 7 8 9 5 6 7 8 9 5 6 7 8 9 Non segmentati e non Aggrregati 600 400 200 0 -1 0 1 2 3 4 Falsi Allarmi 1500 1000 500 0 -1 Fig. 7-9 0 1 2 3 4 Istogramma parametri prestazionali VMD Bosch 98 Analisi dei risultati Comparazione statistiche delle prestazioni, filmati gruppo2 Valore Atteso Rilevati Varianza Rilevati 1 1 0.5 0.5 0 0 1 Valore Atteso FA 0.2 0.1 0.1 0 0 1 Valore Attero Errore Baricentro 1500 20 1000 10 500 0 1 Valore Atteso Errore Aree 1 Varianza Errore Aree 30 3000 20 2000 10 1000 0 1 Varianza Errore Baricentro 30 0 1 Varianza FA 0.2 0 1 Valore Atteso Errore Segmentazione e Aggregazione 1 Varianza Segmentazione e Aggregazione 0.1 0.06 0.04 0.05 0.02 0 0 1 1 BOSCH GPS-Standard Fig. 7-10 Comparazione statistiche delle prestazioni, video gruppo 2 Considerando l’insieme delle sequenze del secondo gruppo, emerge che il GPS ha rilevato meno oggetti in movimento (~ -10%), ma ha anche generato meno FA (~10%). Ciò è da imputare a una sensibilità minore del GPS, dovuta alla scelta delle impostazioni. E’ da notare come siano sensibilmente più bassi gli errori commessi dal Bosch circa l’area, il baricentro e la segmentazione. 99 Analisi dei risultati 7.4 Terzo gruppo 7.4.1 Analisi dei frame Fig. 7-11 grafici delle prestazioni GPS-Standard, video del terzo gruppo 100 Analisi dei risultati Fig. 7-12 grafici delle prestazioni Bosch, video del terzo gruppo Nelle sequenze iniziali (frame 1–1336), rappresentanti persone che attraversano la strada per avvicinarsi ad una recinzione, i due VMD hanno le stesse prestazioni: un buon livello di rilevamento, errori bassissimi. Il GPS presenta dei FA nei frame appena successivi a quelli in gli oggetti in movimento si arrestano, dovuti alla permanenza della sovrimpressione dei rettangoli. Nel filmato successivo, girato sempre nello stesso luogo, i VMD devono rilevare una scatola che si muove lentamente. Quando la scatola è in primo piano (frame 1372–1761) tutti e due i dispositivi non riescono a rilevare continuamente il movimento, perché troppo scattoso, anche se tutto sommato il Bosch risulta il meno peggio. Inoltre, intorno al frame 1580, il Bosch genera diversi falsi allarmi, causati dal rapido passaggio di una nuvola, in cui perde la posizione dell’oggetto inseguito per identificare come zona allarmata quasi l’intera scena. Al contrario il GPS, nella stessa situazione, genera meno FA, ma soprattutto continua ad inseguire l’oggetto. 101 Analisi dei risultati Quando la scatola viene allontanata dalla camera (frame 1790–1900), grazie alla maggior continuità nel movimento, il GPS, al contrario del Bosch, riesce a rilevare il movimento durante l’intero spostamento. Allontanando ancora la scatola (1908 – 2052) neanche il GPS riesce a rilevarla, ma ad un nuovo passaggio di una nuvola (1980) non genera FA, al contrario del Bosch. 102 Analisi dei risultati Procedendo ancora con i filmati (2140 – 2651) incontriamo la recinzione con delle buste attaccate che svolazzano. Il GPS genera un numero elevatissimo di FA, il Bosch solo una. 103 Analisi dei risultati 7.4.2 Conclusioni Istogramma parametri prestazionali VMD GPS-Standard, filmati gruppo3 Errore Baricentro 150 100 50 0 -10 0 10 20 30 40 50 60 70 80 Errore Area 300 200 100 0 -50 0 50 100 150 200 250 Rilevati 1000 800 600 400 200 0 -0.5 0 0.5 1 1.5 2 2.5 3 3.5 2 2.5 3 3.5 2 2.5 3 3.5 Non segmentati e non Aggrregati 1000 800 600 400 200 0 -0.5 0 0.5 1 1.5 Falsi Allarmi 3000 2000 1000 0 -0.5 0 0.5 1 1.5 Fig. 7-13 Istogramma parametri prestazionali VMD GPS-Standard Fig. 7-14 Istogramma parametri prestazionali VMD Bosch 104 Analisi dei risultati Comparazione statistiche delle prestazioni, filmati gruppo3 Valore Atteso Rilevati Varianza Rilevati 1 0.4 0.5 0.2 0 0 1 Valore Atteso FA 0.1 0.05 0.05 0 0 1 Valore Attero Errore Baricentro 400 5 200 0 1 Valore Atteso Errore Aree 2000 5 1000 0 1 Valore Atteso Errore Segmentazione e Aggregazione 1 Varianza Segmentazione e Aggregazione 0.015 0.015 0.01 0.01 0.005 0.005 0 1 Varianza Errore Aree 10 0 1 Varianza Errore Baricentro 10 0 1 Varianza FA 0.1 0 1 1 BOSCH GPS-Standard Fig. 7-15 Comparazione statistiche delle prestazioni, video gruppo 3 Anche in questo terzo gruppo il GPS-Standard ha rilevato un numero minore di oggetti, ma soprattutto, a causa dell’ultimo filmato, ha fatto registrare un elevato numero di FA. Differentemente dagli altri gruppi gli errori commessi nella rilevazione risultano più bassi per il GPS-Standard. 105 Conclusioni Capitolo 8 8. Conclusioni Comparazione finale delle prestazioni Rilevati FA 0.5 0.14 0.12 0.4 0.1 0.3 0.08 0.2 0.06 0.04 0.1 0.02 0 0 1 Errore Baricentro 25 1 Errore Area 12 10 20 8 15 6 10 4 5 2 0 0 1 1 Errore Segmentazione e Aggregazione 0.1 0.08 BOSCH 0.06 GPS-Standard 0.04 0.02 0 1 Fig. 8-1 Comparazione conclusiva delle prestazioni 106 Conclusioni I risultati del lavoro sin qui svolto possono essere sintetizzati con il grafico di Fig. 8-1, che evidenzia come tutti i parametri prestazionali, anche se per poco, pendano a favore del Bosch. Salta subito all’occhio, in questo e nei grafici precedenti, il basso valore degli oggetti rilevati. Infatti il Bosch, anche se vincente, ha rilevato in media la metà degli oggetti in movimento; non è molto affidabile come sistema di sicurezza! In realtà questa affermazione non è corretta, perché le sequenze analizzate non sono rappresentative di un normale funzionamento, ma sono tutte situazioni estreme. La possibilità che questi eventi si verifichino, suggerisce che la sicurezza non può essere gestita esclusivamente tramite videosorveglianza, ma necessita un’integrazione di diverse tecnologie. Per quanto riguarda i VMD un possibile miglioramento può essere introdotto dalla visione stereoscopica che rende disponibile anche le informazioni circa la profondità degli oggetti sulla scena. Questa funzionalità può essere utilizzata per distinguere persone che si sovrappongono (in fila), sopprimere i FA generati da piccoli oggetti che si muovono in posizioni molto vicine alla camera, considerare solo gli oggetti sopra una certa altezza per eliminare le ombre. Il costo da pagare è una spesa superiore dovuta all’acquisto di due camere, che diventa sempre più pesante all’aumentare della qualità desiderata. 107 Conclusioni BIBLIOGRAPHY [1] 108