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):