Tesi Robotica Un co-processore per Stereo-Matching: Architettura | Page 50

i i “LP_Tesi” — 2011/9/9 — 21:20 — page 50 — #50 i 3.3. IMPLEMENTAZIONE MATLAB i 50 Mentre la disparità della mappa di sinistra la si ottiene sulle righe, quella di destra la si ottiene sulle colonne, ed è per questo che un ciclo scorre sull’altezza [riga 7] e l’altro sulla larghezza [riga 19]. Il calcolo della disparità avviene misurando la distanza in colonne (per quella di sinistra) o in righe (per quella di destra) dalla diagonale [riga 8,20]. Algoritmo 3.8 Function DisparityMap 1 2 3 4 function [resultL,resultR] = DisparityMap(path) path_real_size = path(2:end, 2:end); resultL = zeros( 1, size(path_real_size,1) , 3); resultR = zeros( 1, size(path_real_size,2) , 3); 5 6 7 8 9 10 11 12 13 14 15 16 for i = 1:size(path_real_size,1) column_idx = find( path_real_size(i,:)==1 , 1, ’first’); local_disparity = column_idx - i; if( local_disparity >= 0 ); resultL(1,i,1) = local_disparity; elseif( local_disparity < 0 ) resultL(1,i,3) = local_disparity; else resultL(1,i,2) = 1; end end 17 18 19 20 21 22 23 24 25 26 27 28 for i = 1:size(path_real_size,2) line_idx = find( path_real_size(:,i)==1 , 1, ’first’); local_disparity = i - line_idx; if( local_disparity >= 0 ) resultR( 1,i,1 ) = local_disparity; elseif( local_disparity < 0 ) resultR( 1,i,3 ) = local_disparity; else resultR( 1,i,2 ) = 1; end end Ammettiamo che il backtracking ci ha portati nella posizione (5,12), e stiamo calcolando la disparità di sinistra, questo significa che siamo a distanza 7 dalla cella (12,12), quindi la disparità locale in quel punto è 7. Ma come siamo arrivati a questo risultato? i i i i