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
Scarica

Salvati 2005-06 - Dipartimento Infocom