Segmentazione Foreground - Background attraverso un "codebook model"

Pagina creata da Margherita Antonini
 
CONTINUA A LEGGERE
Segmentazione Foreground - Background attraverso un "codebook model"
Università degli Studi di Milano

    Dipartimento di Informatica e Comunicazione
      Corso di Laurea Magistrale in Informatica

Segmentazione Foreground – Background
    attraverso un “codebook model”

                    Alessandro Ferrari
           alessandro.ferrari3@studenti.unimi.it
           www.imageprocessing.altervista.org
Segmentazione Foreground - Background attraverso un "codebook model"
Introduzione
•   Articolo di riferimento: “Realtime foreground-background segmentation
    using codebook model” - K.Kim, T.H.Chalidabhongse, D.Harwood, L.Davis.

•   E’ un algoritmo per segmentare le immagini di un flusso video nelle
    componenti (quasi) statiche di background e dinamiche di foreground
    (situazione tipica: videocamera di sorveglianza in un parcheggio).

•   Discriminare il background dal foreground e ricavare informazione
    sfruttando la coerenza spaziale dei blob in movimento. Non è visual
    tracking!
Segmentazione Foreground - Background attraverso un "codebook model"
Panoramica sull’algoritmo
• E’ suddiviso in due macro-fasi ben distinte:
    – Learning (background model building)
    – Foreground detection (ricerca del movimento)

• Nel learning viene creato il modello che rappresenta l’informazione
  statica della scena in esame. All’inizio della sequenza video deve
  essere prevista una fase statica dove è presente solo il background
  (o quasi).

• Nella fase di detection si verifica la presenza di moto e si aggiorna il
  modello di descrizione della scena.
Segmentazione Foreground - Background attraverso un "codebook model"
Caratteristiche algoritmo
• Background Model compatto, multi layer e variabile nel tempo

• Sensibile sia piccoli movimenti che a cambiamenti a lungo termine
  (funzione di adattamento alle variazioni di illuminazione)

• Fase di training robusta a rumore e movimento indesiderato

• Utilizza un approccio totalmente pixel based, basato su misure di
  luminanza, crominanza e di distanza temporale. Nessuna inferenza
  statistica.
Segmentazione Foreground - Background attraverso un "codebook model"
Fase di Learning
• Nella fase di learning viene creato il modello che rappresenta
  l’informazione statica della scena in esame

• Durante il periodo di training ogni frame viene campionato e
  analizzato secondo metriche euclidee nello spazio colore RGB e
  considerazioni di carattere temporale.

• I campioni usati vengono “clusterizzati” in “codeword”(cw) ; Il
  numero di cw associato a ciascun pixel è variabile
Segmentazione Foreground - Background attraverso un "codebook model"
Definizione del modello
• Ad ogni pixel di posizione (x,y) vengono associati uno o più
  codeword che rappresentano l'informazione cromatica, di luminanza
  e di carattere temporale.

• L'insieme dei codeword associati ad un pixel di posizione (x,y) è
  detto codebook.

• Attraverso i codebook si costituiscono i modelli di background e
  cache.

• I due modelli, seppur uguali a livello di “codifica”, rappresentano
  informazione decisamente diversa.
Segmentazione Foreground - Background attraverso un "codebook model"
Definizione del modello

Luminanza minima e massima dei pixel assegnati a questo cw

Frequenza di occorrenza del cw

Durata massima dell’intervallo di “non-scelta” del cw durante la fase di training

Primo e ultimo accesso al cw
Segmentazione Foreground - Background attraverso un "codebook model"
Analisi del modello

• La costruzione del modello proposta è per immagini a colori ma è
  facilmente estendibile a immagini in scale di grigio

• Ogni pixel ha un numero diverso di cw e quindi un codebook di
  dimensione diversa (richiede quindi allocazione dinamica in fase di
  elaborazione)
Costruzione del modello di bg
•    Fissiamo l’attenzione su un solo pixel e vediamo il loop di
     costruzione del relativo codebook per il background (pixel fissato,
     itera nel tempo)

    1.   Recupero terna  e calcolo luminanza per il pixel in esame al
         tempo t

    2.   Iterando sui cw cerco il primo che rispetta le condizioni su color_dist e
         brightness (è la metrica di similarità, approfondiremo il modello dello
         spazio colore usato)

         –   Se non trovo nessun cw che rispetta le condizioni elencate al punto 2 creo
             un nuovo cw secondo la definizione del modello precedentemente data.
         –   Se invece trovo un cw simile, procedo alla sua modifica secondo una logica
             di aggiornamento “temporale”
Costruzione del modello di bg
Maximum negative run-length
•   Il codebook creato fino allo step 2 è detto fat_codebook poichè vengono
    tenuti in memoria tutti i cw trovati; non è pensabile gestirne l’allocazione e
    l’analisi in tempo reale!

•   Il parametro MNRL       è fondamentale per discriminare i cw non scelti da
    più tempo e quindi presumibilmente relativi a rumore impulsivo o piccoli
    oggetti non conformi al background.

•   Sperimentalmente si fissa       pari alla metà del numero di frame di learning
Spazio colore utilizzato
Attraverso epsilon e le luminanze estese si definisce il cilindro di accettazione
della proiezione p del pixel di input.
Foreground detection
• Ogni pixel viene confrontato con le cw corrispondenti secondo le
  condizioni previste (ii.a e ii.b).

• Se non è riconducibile per colore e luminanza ad una delle cw
  presenti nel modello di bg viene etichettato come movimento.
Foreground detection
Cache Improvement
• Fino a questo punto abbiamo analizzato la versione base che discrimina
  solo il foreground dal background

• Vengono proposte alcune estensioni dell’algoritmo per ampliarne
  l’efficacia in condizioni di background mutevole nel tempo.

• Esempio: un’auto che si ferma in un parcheggio per un certo tempo è
  ragionevole pensare diventi background; l’algoritmo presentato fino qui
  continua a trovare pixel di foreground nonostante non ci sia effettivo
  movimento!
Modello di cache

• Introduciamo tre nuovi parametri per l’analisi temporale dei dati:

• Il modello di cache è strettamente collegato con le fasi di filtraggio.
Parametri di filtraggio
•        : soglia di filtraggio per il modello di background fat; dopo la fase di learning
    vengono eliminati quei codeword che non rappresentano realmente
    informazione statica ma sono elementi di disturbo della fase di apprendimento.

•       : soglia di eliminazione di cw che hanno un periodo di non-presenza relativa
    superiore alla soglia. Tenere una soglia relativamente bassa in modo da pulire la
    cache dai cw inutili frequentemente

•       : soglia che determina quali codeword vengono promossi a background
    model. Tali cw vengono etichettati con la label di short term background.

•         : soglia che determina quali cw short term vengono eliminati dal
    background model. Vengono presi in esame solo i cw non etichettati come
    permanent (cioè quelli aggiunti secondo la condizione relativa a Tadd).
Tipologia di codewords

•   Permanent background

•   Short-term background

•   Foreground found in cache

•   New foreground.
Esempio di oggetto “promosso”

Tempo t

Tempo t+1
Un esempio più complesso
Dove siamo arrivati?

               Filtraggio cw
Codebook updating – illumination changes

• Fino a questo punto abbiamo un algoritmo che
  discrimina background e movimento, analizza
  oggetti entranti nella scena che diventano statici e li
  tratta come background temporaneo.

• Ma se le condizioni di luminosità globale cambiano
  riusciamo a discriminare il movimento dalle naturali
  variazioni di luminosità?
Codebook updating – illumination changes

• Cambiamenti di illuminazione globale dovuti ad
  esempio al movimento delle nuvole rendono
  difficile la motion detection in scenari “outdoor”.

• Tale problema si traduce in over-detection, false
  detection, o bassa sensibilità alle vere detection.

• E’ una istanza di un problema più generale e
  complesso di aggiornamento e apprendimento
  secondo una funzione di adattamento.
Codebook updating – illumination changes
Move in – Move out Improvement
• Fino a questo punto abbiamo un algoritmo che
  discrimina background da movimento, analizza
  oggetti entranti nella scena che diventano statici e li
  tratta come background temporaneo e si adatta ai
  cambiamenti globali di luminosità.

• Ma siamo in grado di capire se un oggetto è entrato
  davvero in scena oppure è un oggetto che uscendo
  lascia “un vuoto” interpretato come movimento?
Move in – Move out
• Non è una feature prevista dall’articolo ma nella versione del LAIV,
  implementata in Matlab, è presente.

• L’idea è quella di studiare le componenti connesse di un oggetto in
  movimento in relazione alle componenti cromatiche che troviamo
  campionando il bordo con un numero arbitrario di normali ad esso.
Move in – Move out
• Se si trovano colori decisamente diversi dentro e fuori dalla regione
  connessa inferisco MOVE IN. Se si trovano colori simili dentro e fuori
  dalla regione connessa inferisco MOVE OUT

• Se l’oggetto individuato risulta frammentato si rischia di classificarlo
  come MOVE OUT (coerenza dei colori dentro e fuori la regione)

• E’ necessario gestire il fatto che un oggetto “si ferma” in un intervallo di
  tempo che interessa più frame. Il problema è quindi decisamente
  complesso.
Motion layering
• La caratteristica più interessante dell’algoritmo riguarda l’etichettatura
  “temporale” degli oggetti che stazionano nella scena in esame per un
  tempo rilevante.

• Attraverso la soglia Tadd spostiamo i cw degli oggetti divenuti statici dal
  modello di cache al modello di background classificandoli come short
  term codeword.

• In un'ottica di successive analisi della scena, vogliamo raggruppare tutti
  i punti appartenenti ad un oggetto senza post-processing (estrazione
  bordi, analisi distribuzione punti, compattezza oggetti, ecc…).

• La soluzione deve essere semplice, efficiente e utilizzare l'informazione
  implicitamente contenuta nei cw trasferiti.
Motion layering
• Apponendo una opportuna label ai cw spostati al frame t stiamo
  intrinsecamente assegnando dell'informazione sulla correlazione
  temporale e spaziale di un oggetto;

• Tuttavia la nostra visuale è ristretta al singolo pixel, è quindi necessario
  introdurre un meccanismo che permetta di etichettare in modo
  consistente i cw che spostiamo durante la fase di filtraggio evitando
  fenomeni di sovra-segmentazione o segmentazione errata.
Motion layering – soglia statica
• Analizzando il numero di cw spostati da cache a background model si
  nota che esiste una correlazione diretta tra presenza di oggetti in
  movimento che diventano statici e numero di cw trasferiti.

• Una possibile implementazione consiste nell'utilizzo di una soglia fissa
  che permetta di discriminare cw appartenenti a layer diversi.

• Abbiamo anche provato una sogliatura dinamica che calcolava una
  percentuale massimo del picco trovato ma con scarsi risultati.
Motion layering – soglia statica
               Effettuando il cambio di layer in prossimità di
               valori vicini allo zero è ragionevole che i tre
               oggetti apparterranno a tre layer differenti
Motion layering – esempio 1
Motion layering – soglia statica
               Ma in situazioni più complesse diventa un
               problema di non facile soluzione.
               Sovra-segmentazione dei layer.

          ?     ?
Motion layering – esempio 2
Criticità della scelta della soglia
•   La scelta della soglia è un problema critico che offre soluzioni soddisfacenti solo
    in caso di facili detection dove gli oggetti entrano in tempi ben distinti e con
    velocità apprezzabili (né troppo lentamente, né troppo velocemente)

•   la scelta della soglia ottimale può essere effettuata solo con una fase di analisi
    del grafico dei cw spostati. In un ottica di analisi on line,non è pensabile
    effettuare analisi accurate “a posteriori” e quindi è necessario fare delle
    assunzioni a priori sulla soglia.

•   Ad esempio soglia statica molto piccola per video non rumorosi e con moto
    ordinato. La soglia si alza per video rumorosi o caotici.

•   Va ricordato che si sta lavorando ad un livello basso rispetto alla semantica
    dell'immagine; in un progetto più ampio, si può pensare di introdurre tecniche di
    miglioramento dell'immagine o tenere conto anche di aspetti legati alla
    correlazione spazio-temporale del movimento (stima moto, compattezza ecc…).
Aspetti implementativi
•   L’algoritmo, seppur nato per essere eseguito in tempo reale, è comunque
    computazionalmente pesante e necessità di molta cura durante lo sviluppo specie in
    relazione alle scelte implementative delle strutture dati.

•   In linea di principio allocare staticamente la memoria per i codeword offre migliori
    prestazioni a regime ma scarsissima flessibilità in termini di complessità dei dati raccolti.

•   Si è optato per una strategia dinamica pagando un piccolo prezzo in termini di prestazione
    ma che ha permesso di semplificare decisamente lo sviluppo e la gestione della memoria.
Fase di sviluppo del progetto
•   Di questo algoritmo esistono due implementazioni disponibili, una in MATLAB (40 secondi
    per frame) e una in C++ che lavora in tempo reale.

•   Le funzioni base per la elaborazione delle immagini sono facilmente utilizzabili attraverso
    le libreria Intel OpenCv (http://www.intel.com/technology/computing/opencv/) e Intel IPP
    (opzionale per ottimizzazione - http://www.intel.com/cd/software/products/asmo-
    na/eng/302910.htm)

•   Sul sito è disponibile anche la relazione di accompagnamento al progetto che può essere
    utile come traccia per lo sviluppo di altri progetti per il corso di “elaborazione delle
    immagini II“.
Università degli Studi di Milano

Dipartimento di Informatica e Comunicazione
  Corso di Laurea Magistrale in Informatica

             Per domande, approfondimenti:
          alessandro.ferrari3@studenti.unimi.it
          www.imageprocessing.altervista.org
Puoi anche leggere