Tesi Robotica Algoritmi ed architetture per la risoluzione di... | Page 45

2.2. IMPLEMENTAZIONE DIFFERENTE DEL DOG, SIFT-DERIVED 45 questo introduce il ben noto parametro k utilizzato per suddividere la dimensione della finestra per un intervallo dato k = 21/s , dove viene calcolato il numero totale di immagini in un’ottava come s + 3. Questa configurazione attuale produce finestre di filtraggio più ampie (fino a 45x45 pixel). 5 10 15 20 sig[0] = sigma; k = pow( 2.0, 1.0 / intvls ); for( i = 1; i < intvls + 3; i++ ) { sig_prev = pow( k, i - 1 ) * sigma; sig_total = sig_prev * k; sig[i] = sqrt( sig_total * sig_total - sig_prev * sig_prev ); } for( o = 0; o < octvs; o++ ) for( i = 0; i < intvls + 3; i++ ) { if(o==0&& i==0) /* base of new octave is halved image from end of previous octave */ gauss_pyr[o][i] = cvCloneImage(base); else if( i == 0 ) gauss_pyr[o][i] = downsample( gauss_pyr[o-1][intvls] ); /* blur the current octaves last image to create the next one */ else { gauss_pyr[o][i] = cvCreateImage( cvGetSize(gauss_pyr[o][i-1]), IPL_DEPTH_32F, 1 ); cvSmooth( gauss_pyr[o][i-1], gauss_pyr[o][i], CV_GAUSSIAN, 0, 0, sig[ i], sig[i] ); } } 2.2.2 Osservazioni Numerici Nella tecnica nota, così come in implementazioni software comunemente usati di DoG, l’intera conduttura di calcolo è vincolato ad aritmetica a virgola mobile a singola precisione. Moderni processori, anche nel mercato embedded, supportano nativamente i primitivi in virgola mobile in alcuni casi anche con pipeline di elaborazione vettoriale. La famiglia ARM Cortex A9 è un esempio notevole di come fornisce un accesso trasparente all’unità VFPU. Tra l’altro, queste unità FP32 spesso richiedono una logica addizionale da usare per sincronizzare il datapath da/a CPU, come comunemente attuate con coprocessori strettamente/debolmente accopiati in SoCs: quindi la prestazione ottenuta è di gran lunga meno interessante di quello ottenibile con aritmetica con soli interi,