per la mia tesi di laurea, sto eseguendo alcuni test sugli algoritmi SIFT SURF en FAST per il rilevamento del logo su smartphone.Descrizione SURF più veloce con rilevamento FAST?
quando ho semplicemente il tempo del rilevamento, la descrizione e la corrispondenza per alcuni metodi ottengono i seguenti risultati.
Per un rilevatore SURF e SURF Descrittore:
180 keypoints trovato
1994 secondo keypoint tempo di calcolo (SURF) descrizione
4.516 secondi Tempo (SURF)
0,282 secondi di tempo corrispondente (SURF)
quando uso un sensore veloce al posto del rivelatore SURF
319 keypoints trovato
0.023 secondi di tempo di calcolo keypoint (FAST)
1,295 secondi descrizione orario (SURF)
0,397 secondi di tempo corrispondente (SURF)
Il rilevatore FAST è molto più veloce del rilevatore SURF e rileva anche quasi il doppio dei keypoints 100 volte più velocemente. Questi risultati sono prevedibili.
Il passaggio successivo non è un risultato previsto. Com'è possibile che il descrittore de SURF sia più veloce con i 319 punti chiave FAST e poi con i 180 punti chiave SURF?
Da quello che so, la descrizione non ha alcuna relazione con l'algoritmo di rilevamento ... eppure questi risultati non sono come previsto.
qualcuno sa come è possibile?
ecco il codice:
FeatureDetector detector = FeatureDetector.create(FeatureDetector.SURF);
//FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST);
Imgproc.cvtColor(image1, image1, Imgproc.COLOR_RGBA2RGB);
Imgproc.cvtColor(image2, image2, Imgproc.COLOR_RGBA2RGB);
DescriptorExtractor SurfExtractor = DescriptorExtractor
.create(DescriptorExtractor.SURF);
//extract keypoints
long time= System.currentTimeMillis();
detector.detect(image1, keypoints);
Log.d("LOG!", "number of query Keypoints= " + keypoints.size());
detector.detect(image2, logoKeypoints);
Log.d("LOG!", "number of logo Keypoints= " + logoKeypoints.size());
Log.d("LOG!", "keypoint calculation time elapsed" + (System.currentTimeMillis() -time));
//Descript keypoints
long time2 = System.currentTimeMillis();
Mat descriptors = new Mat();
Mat logoDescriptors = new Mat();
Log.d("LOG!", "logo type" + image2.type() + " intype" + image1.type());
SurfExtractor.compute(image1, keypoints, descriptors);
SurfExtractor.compute(image2, logoKeypoints, logoDescriptors);
Log.d("LOG!", "Description time elapsed" + (System.currentTimeMillis()- time2));
potresti inserire un po 'del tuo codice? :) – Codeman
parte del mio codice è stata aggiunta alla domanda! – piepie