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

2.2. IMPLEMENTAZIONE DIFFERENTE DEL DOG, SIFT-DERIVED 47 gauss_row = fspecial(’gaussian’, [1 msk_size], radius); gauss_column = gauss_row’; %fspecial(’gaussian’, [msk_size 1], radius); I = imfilter(I, gauss_row); I = imfilter(I, gauss_column); 40 result2 = I; filename = sprintf(’output_o%01d_s%01d.bmp’, j, i); %fprintf(FID, ’\n>> Create image in folder . : %s\n’, filename); if(i > 0) diff = result2 - result; %DoG end 45 50 55 result = result2; imwrite(result2, filename, ’BMP’); end %downsampling I = imresize(I, 0.5); end toc Questo codice può essere eseguito utilizzando una rappresentazione FP32 ed FP64, precisione nativa in Matlab, pertanto potrà essere utilizzato come riferimento numerico per qualsiasi altro test numerico in studi futuri. Le immagini risultanti da questa implementazione di eriscono da quelle date in output dal codice scritto usando OpenCV a causa del di erente schema di riempimento utilizzato dalla funzione imfilter (zero padding invece di last pixel padding). Il Fixed Point Toolbox di Matlab fornisce un modo semplice ed e cace, di scalare vettori e matrici con rappresentazione limitata in precisione come mostrato di seguito: a_fi = fi(a, 1, 16, 4); Il frammento di codice successivo costruisce una rappresentazione in fixed point di una variabile “a”, usando 16 bit in totale, di cui 4 usati per la rappresentazione della parte intera. Questo valore risulterà essere molto importante per la nostra stima (v. Tabella 4.6 e 4.7):