dla mojej pracy magisterskiej, przeprowadzam test na algorytmach SIFF SURF i FAST do wykrywania logo na smartfonach.Opis SURF szybciej dzięki funkcji FAST detection?
kiedy po prostu czas wykrywania, opis en pasujące do niektórych metod otrzymuję następujące wyniki.
dla czujnika KIPIEL i fale deskryptora:
180 keypoints znaleziono
1994 sekunda KeyPoint czas obliczeń (KIPIEL)
4.516 sekundy Czas opis (KIPIEL)
0,282 sekundy odpowiadający czas (SURF)
podczas korzystania szybki detektor zamiast detektora SURF
319 keypoints znaleziono
0,023 sekundy KEYPOINT czas obliczeń (FAST)
1,295 sekund Funkcja czasu (KIPIEL)
0.397 sekund odpowiadający czas (SURF)
Czujnik FAST jest znacznie szybszy niż detektor SURF, a nawet wykrywa prawie dwukrotnie więcej punktów kluczowych 100 razy szybciej. Te wyniki są przewidywalne.
Następny krok nie jest jednak wynikiem przewidywanym. Jak to możliwe, że deskryptor de SURF jest szybszy z 319 FASTami, a następnie z punktami 180 SURF?
Z tego, co wiem, opis nie ma związku z algorytmem detekcji ... jednak wyniki te nie są zgodne z przewidywaniami.
czy ktoś wie, jak to jest możliwe?
o kod:
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));
Czy możesz opublikować część swojego kodu? :) – Codeman
niektóre z mojego kodu są dodawane do pytania! – piepie