next up previous contents
Next: Stima del livello di Up: L'algoritmo di stereo-visione Previous: La soluzione mediante programmazione

Minimizzazione della funzione costo

La particolare forma della funzione gif, con i vincoli di ordinamento e unicità, ne permette la soluzione efficiente mediante programmazione dinamica. Questo si ottiene ``mappando'' la funzione gif su un problema di cercare il percorso a costo minimo in un grafo orientato e pesato. I vertici del grafo rappresentano i possibili valori di disparità assegnabili a ogni pixel (figura gif). I costi vengono assegnati ai nodi mediante una funzione che dipende dalla differenza di intensità luminosa dei pixel. I costi degli archi valgono 0 per percorsi diagonali, mentre i percorsi ortogonali (che rappresentano una occlusione) hanno un costo dipendente dalla probabilità di occlusione. Gli archi sono orientati in modo da permettere solo percorsi che rispettano i vincoli di unicità e ordinamento (figura gif). Il costo totale della funzione obiettivo per un percorso si ottiene sommando insieme tutti i costi degli archi con tutti i costi dei nodi. La soluzione più probabile al problema di accoppiamento di pixel è rappresentata dal percorso di costo minimo.

   figure1423
Figure: Il grafo corrispondente al problema di stereo. I punti rappresentano i nodi del grafo e corrispondono ai possibili accoppiamenti tra pixel dell'immagine sinistra e dell'immagine destra, un possibile percoso è rappresentato da un insieme di archi che parte dal primo punto dell'immagine sinistra e arriva all'ultimo punto.

   figure1429
Figure: Dettaglio degli archi del grafo corrispondente al problema di stereo. Gli archi sono orientati in modo da rispettare i vincoli di unicità e di ordinamento.

Per un grafo con questa struttura il percorso minimo può essere trovato mediante programmazione dinamica [20]. La struttura dati necessaria consiste di due campi per ogni vertice, il primo per contenere il costo totale del percorso ottimo fino a questo nodo, il secondo per contenere il puntatore che indica il vertice immediatamente precedente lungo questo percorso. Più precisamente, il puntatore di un vertice nella colonna i punta a un vertice nella colonna i-1. L'algoritmo si compone di due passi, un passo in avanti che computa i costi dei vertici e imposta i puntatori, un passo all'indietro che ricostruisce il percorso a costo minimo seguendo i puntatori. Lo pseudocodice dell'algoritmo viene riportato in figura gif. Nello pseudocodice la matrice dei costi viene denotata con costo tex2html_wrap_inline2861 . La matrice prec tex2html_wrap_inline2863 ] memorizza i puntatori alla riga colonna precedente, con la convenzione: prec tex2html_wrap_inline2865 significa che il punto precedente di i,j è il punto i-1,j-1; prec tex2html_wrap_inline2871 significa che il punto precedente di i,j è il punto i-1,j; prec tex2html_wrap_inline2877 significa che il punto precedente di i,j è il punto i,j-1.

   figure1453
Figure: Pseudocodice dell'algoritmo di programmazione dinamica

La correttezza dell'algoritmo si dimostra mediante induzione sulla lunghezza del percorso.

Esaminando il codice, è facile rendersi conto che il costo computazionale dell'algoritmo è pari a tex2html_wrap_inline2937 . Infatti, l'inizializzazione ha complessità tex2html_wrap_inline2939 , il passo all'indietro ha complessità tex2html_wrap_inline2941 , il passo in avanti ha complessità tex2html_wrap_inline2943 , costituendo quindi il costo dominante.

È possibile diminuire ulteriormente il costo computazionale dell'algoritmo restringendo la disparità massima tra due pixel. Se un pixel tex2html_wrap_inline2945 è vincolato ad essere accoppiato solo con pixel tex2html_wrap_inline2947 per i quali tex2html_wrap_inline2949 allora il costo dell'algoritmo si riduce a tex2html_wrap_inline2951 .

Altri algoritmi di stereo basati su programmazione dinamica hanno una complessità computazionale tex2html_wrap_inline2953 . Nel nostro caso, l'introduzione dei vincoli di unicità e di ordinamento monotonico pemettono di risparmiare un fattore uno all'esponente, rendendo particolarmente veloce il calcolo.

Secondo quanto riportato dagli autori, l'algoritmo, testato su stereogrammi a punti casuali, ricostruisce correttamente la disparità del 95,4% dei punti.

Gli autori propongono ulteriori elaborazioni dell'algoritmo-base. Per esempio, aggiungendo tre matrici, tex2html_wrap_inline2955 , tex2html_wrap_inline2957 , tex2html_wrap_inline2959 , per memorizzare in che modo l'algoritmo è giunto al vertice tex2html_wrap_inline2961 , è possibile scegliere tra i possibili percorsi ottimi quello che minimizza il numero di discontinuità orizzontali, (nella sua forma base, l'algoritmo di programmazione dinamica è garantito trovare un percorso con costo minimo, ma, nel caso ve ne siano più d'uno, non il medesimo per ogni riga). Lo pseudocodice per l'algoritmo modificato è riportato nelle figure gif e gif. In questa versione la matrice dei puntatori all'indietro prec non è più necessaria: il percorso ottimo può venire ricostruito direttamente dalle tre matrici tex2html_wrap_inline2963 , tex2html_wrap_inline2965 , tex2html_wrap_inline2967 . Il costo computazionale di questa seconda versione dell'algoritmo ha un costo computazionale lievemente superiore, ma la percentuale di punti per i quali viene determinata la disparità corretta, negli stereogrammi a punti casuali, sale al 98,7%.

   figure1488
Figure: Pseudocodice dell'algoritmo di programmazione dinamica, con minimizzazione delle discontinuità orizzontali, passo in avanti. La costante GRANDE indica un costo molto alto, utilizzato per penalizzare i percosi subottimali. La funzione argmin ritorna 1,2 o 3 a seconda che il minimo sia il primo, il secondo o il terzo argomento.

   figure1502
Figure: Pseudocodice dell'algoritmo di programmazione dinamica, con minimizzazione delle discontinuità orizzontali, passo all'indietro.

Gli autori introducono poi un ulteriore passo di minimizzazione sulle discontinuità verticali. Questa modifica raddoppia i tempi di calcolo, a fronte di un miglioramento sino al 99,1% di accoppiamenti corretti su sterogrammi a punti casuali. Sul robot sono state sperimentate tutte e tre le versioni dell'algoritmo. A fronte dei dati sperimentali si è deciso di utilizzare la versione descritta nelle figure gif e gif, non ritenendo conveniente l'ulteriore incremento dei tempi di calcolo richiesto dalla minimizzazione delle discontinuità verticali, a fronte del modesto miglioramento dei risultati su immagini reali.



next up previous contents
Next: Stima del livello di Up: L'algoritmo di stereo-visione Previous: La soluzione mediante programmazione



Alex Cozzi
Fri Dec 8 19:08:26 MET 1995