Tesi Robotica Algoritmi ed architetture per la risoluzione di... | Page 43
2.2. IMPLEMENTAZIONE DIFFERENTE DEL DOG, SIFT-DERIVED
2.2
43
Implementazione di erente del DoG, SIFTderived
Secondo il disegno algoritmo originale di Lowe, molti passi sono stati seguite
per valutare nel dettaglio le di coltà computazionali dietro una implementazione DOG per il dispositivi embedded. Diversi aspetti dei codici sorgenti DoG
sono SIFT derivati, sono stati studiati e utilizzati come base per un’attuazione
compatibile OpenCV.
2.2.1
Parameter and future sets
Nelle seguenti valutazioni, è stato considerato un’implementazione separabile del
filtraggio gaussiano, in quanto consente di ridurre la complessità asintotica ad
O(n+m) anziché O(núm) rispetto ad una convoluzione pixel 2D non separabile.
1
6
11
16
21
// Foreach Octaves / Scales
for (j=0; j < maxoctaves; j++)
{ for(i=0; i < (s+3); i++)
{
act_k = pow(k,(double)i);
radius = act_k*sigma;
msk_size = floor(6.0f*radius)+1;
if ((msk_size % 2) == 0)
msk_size++;
qDebug() << "octave = " << j \ << "\tradius = " << radius \ <<
"\tmsksize = " << msk_size;
//G(x,y,ksigma)
gauss2 = cv::getGaussianKernel(msk_size,radius,CV_32F);
// L(x,y,ksigma)
cv::sepFilter2D(image,result2,0,gauss2,gauss2);
image.create(result2.size(),result2.type());
//application for the next filter when filtered image
result2.copyTo(image);
sprintf(filename, "output_o%01d_s%01d.bmp", j, i);
if (i > 0){
// DoG - difference of filtered images
diff = result2-result;
} else
result.create(result2.size(), result2.type());
result2.copyTo(result);