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