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,