OpenCV: функция knnMatch работает неправильно - PullRequest
3 голосов
/ 15 марта 2012

Я пишу программу для Android, чтобы найти объект. Я использую дескрипторы ORB. Но мне нужно использовать функцию knnMatch. На мой взгляд, это не работает правильно, и я не знаю, почему.

Вот пример моего кода:

 .
 .
 Mat frameDescriptors = new Mat();
    FeatureDetector detector = FeatureDetector.create(FeatureDetector.ORB);
    DescriptorExtractor extractor = DescriptorExtractor.create(DescriptorExtractor.ORB);
    DescriptorMatcher matcher = DescriptorMatcher.create(DescriptorMatcher.BRUTEFORCE_HAMMINGLUT);  
    List<List<DMatch>> knnMatches=new ArrayList<List<DMatch>>();
.
.
.
detector.detect(mRgba, frameKeypoints);
extractor.compute(mRgba, frameKeypoints, frameDescriptors);  
.
.
.
matcher.knnMatch(imageDescriptors,frameDescriptors, knnMatches, 5);
for(int q=0;q<knnMatches.size();q++){
                Log.d("PPP","Writing for q=" +q);
                for(int w=0;w<knnMatches.get(q).size();w++){
                    Log.d("PPP","Distance for: "+ q + "-" + w + " qIdx: " + knnMatches.get(q).get(w).queryIdx +" tIdx: " +knnMatches.get(q).get(w).trainIdx + " " + knnMatches.get(q).get(w).distance);
                }
}

А вот пример результата журнала:

Writing for q=0
Distance for: 0-0 qIdx: 206 tIdx: 30 7.0
Distance for: 0-1 qIdx: 206 tIdx: 45 8.0
Distance for: 0-2 qIdx: 206 tIdx: 55 9.0
Distance for: 0-3 qIdx: 206 tIdx: 5 10.0
Distance for: 0-4 qIdx: 206 tIdx: 15 10.0
Writing for q=1
Distance for: 1-0 qIdx: 206 tIdx: 30 7.0
Distance for: 1-1 qIdx: 206 tIdx: 45 8.0
Distance for: 1-2 qIdx: 206 tIdx: 55 9.0
Distance for: 1-3 qIdx: 206 tIdx: 5 10.0
Distance for: 1-4 qIdx: 206 tIdx: 15 10.0
Writing for q=2
Distance for: 2-0 qIdx: 206 tIdx: 30 7.0
Distance for: 2-1 qIdx: 206 tIdx: 45 8.0
Distance for: 2-2 qIdx: 206 tIdx: 55 9.0
Distance for: 2-3 qIdx: 206 tIdx: 5 10.0
Distance for: 2-4 qIdx: 206 tIdx: 15 10.0

Вы можете видеть, что все абсолютно одинаковые trainIdx, и каждый раз я получаю одинаковое расстояние. Я не знаю, где я ошибаюсь. Можете ли вы помочь мне, пожалуйста?

...