2012-10-15 10 views
10

Chcę wypróbować nową klasę FREAK w OpenCV 2.4.2.OpenCV 2.42 FeatureDetector FREAK

Próbowałem użyć wspólnego interfejsu detektora funkcji do skonstruowania FREAK, ale oczywiście to nie działa. W jaki sposób powinienem poprawić mój kod, aby uzyskać wynik?

#include <stdio.h> 
#include <iostream> 
#include <opencv\cxcore.h> 
#include <opencv2\nonfree\features2d.hpp> 
#include <opencv\highgui.h> 
#include <opencv2\features2d\features2d.hpp> 
#include <vector> 

using namespace std; 
using namespace cv; 

int main(){ 
    Mat mat1; 
    mat1 = imread("Testimg06.jpg",0); 
    vector<KeyPoint> P1; 
    Ptr<FeatureDetector> freakdes; 
    Ptr<DescriptorExtractor> descriptorExtractor; 
    freakdes = FeatureDetector::create("FREAK"); 

    freakdes->detect(mat1,P1); 

    Mat keypoint_img; 

    drawKeypoints(mat1, P1, keypoint_img, Scalar::all(-1), DrawMatchesFlags::DEFAULT); 
    imshow("Keypoints 1", keypoint_img); 
    cvWaitKey(0); 

} 

Odpowiedz

7

Istnieje OpenCV example, który pokazuje, jak używać FREAK w połączeniu z FAST.

Podstawowe instrukcje:

FREAK extractor; 
BruteForceMatcher<Hamming> matcher; 
std::vector<KeyPoint> keypointsA, keypointsB; 
Mat descriptorsA, descriptorsB; 
std::vector<DMatch> matches; 

FAST(imgA,keypointsA,10); 
FAST(imgB,keypointsB,10); 

extractor.compute(imgA, keypointsA, descriptorsA); 
extractor.compute(imgB, keypointsB, descriptorsB); 

matcher.match(descriptorsA, descriptorsB, matches); 
+1

Należy pamiętać, że aby uzyskać najlepszą wydajność, FREAK potrzebuje niezmiennych punktów obrotu i skalowania, dlatego opcja FAST nie jest najlepszą opcją, patrz * OCENA BINARNYCH OPISÓW KLUCZOWYCH * więcej informacji: http://2013.ieeeicip.org/proc /pdfs/0003652.pdf – aledalgrande

8

FREAK jest tylko deskryptorem. Nie ma odpowiedniego detektora cech.

Musisz więc połączyć go z jednym z dostępnych detektorów: SZYBKO, ORB, SIFT, SURF, MSER lub użyj funkcji goodFeaturesToTrack.

+0

Thanks a lot! Dawka oznaczająca, że ​​powinienem użyć 'DescriptorExtractor', aby ustawić FREAK jako deskryptor funkcji? –