Tesi Robotica Un coprocessore per Stereo-Matching: Profiling ... | Page 60
i
i
“MF_Tesi” — 2011/9/12 — 11:39 — page 60 — #60
i
4.3. IMPLEMENTAZIONE IN C
i
60
printf("Il valore della cella è %d, mentre la direzione per
risalire è %d\n", score[row][0].v, score[row][0].d);
#endif
ret[row][0] = score[row][0].d;
row--;
#ifdef DEBUG
printf("Quindi adesso mi sposto nella cella (%d, %d)\n\n", row
, 0);
#endif
68
}
while(col > 0)
{
#ifdef DEBUG
printf("Sono nella cella (%d, %d)\n", 0, col);
printf("Il valore della cella è %d, mentre la direzione per
risalire è %d\n", score[0][col].v, score[0][col].d);
#endif
ret[0][col] = score[0][col].d;
col--;
#ifdef DEBUG
printf("Quindi adesso mi sposto nella cella (%d, %d)\n\n", 0,
col);
#endif
}
return ret;
73
78
83
}
Questa funzione effettua la procedura di backtracking data una matrice dei punteggi. La prima operazione che viene effettuata consiste nell’individuare la cella
con punteggio massimo sull’ultima riga e sull’ultima colonna, che corrisponde al
valore del punteggio di uno degli allineamenti ottimali. Una volta individuato il
massimo la matrice viene ripercorsa all’indietro andando ad analizzare il valore
della direzione della cella, nel caso di nord la prossima cella ad essere analizzatà
sarà quella sopra la cella attuale, nel caso di ovest, sarà quella a sinistra, nel
caso di diag sarà quella a nord-ovest. Gli altri due cicli while servono per completare l’operazione di backtracking, in quanto dato che è possibile raggiungere
uno dei bordi della matrice senza essere arrivati alla cella d’arresto, è necessario
completare risalendo lungo il bordo superiore o quello sinistro della matrice,
fino a raggiungere la casella d’arresto. Tutte le informazioni sul percorso seguito vengono memorizzate in una nuova matrice, di direzioni; tale matrice viene
usata per il calcolo della mappa di disparità.
i
i
i
i