Просеять реализацию в OpenCV 2.4.6 Ubuntu

Я пытаюсь вычислить соответствие между двумя изображениями, и на самом деле меня интересует количество точек соответствия, а не сама корреспонденция, чтобы я мог подать в суд на нее, чтобы получить изображение наилучшего соответствия. Это мой следующий код:

     #include<iostream>
#include<vector>
#include<string>
#include "cv.h"#include "highgui.h"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/legacy/legacy.hpp"#include "opencv2/objdetect/objdetect.hpp"#include "opencv2/nonfree/nonfree.hpp"#include "opencv2/nonfree/features2d.hpp"#include<stdio.h>

using namespace cv;
using namespace std;

int main(int argc, char **argv)
{
Mat A = imread("/home/itachi/iTaggproj/frame6.jpg",CV_LOAD_IMAGE_COLOR);
Mat src = imread("/home/itachi/iTaggproj/dataformatch/frame0.jpg",CV_LOAD_IMAGE_COLOR);

SiftFeatureDetector detector( 0.05, 5.0 );
SiftDescriptorExtractor extractor( 3.0 );

vector<KeyPoint>keypoints1,keypoints2;
detector.detect( A, keypoints1 );
detector.detect( src, keypoints2 );

int key1 = keypoints1.size();
int key2 = keypoints2.size();
printf("Keypoint1=%d \nKeypoint2=%d", key1, key2);

// Feature descriptor computation
Mat descriptor1,descriptor2;
extractor.compute( A, keypoints1, descriptor1 );
extractor.compute( src, keypoints2, descriptor2 );

//match points to get correspondence
//        BFMatcher matcher(NORM_L2);
FlannBasedMatcher matcher;
vector<DMatch>matches;
matcher.match( descriptor1, descriptor2, matches );
cout<<endl<<matches.size()<<endl;

return 0;
}

Я получил свой код от link1 а также link2. Все мои изображения 320х240. Я взял одно тестовое изображение и попытался запустить его по базе данных изображений одно за другим. Но каждый раз, когда я делаю, размер моих спичек всегда 163. Обратите внимание, что ключевые точки в тестовом изображении также 163. Я пытаюсь найти лучшее соответствие для тестового изображения, но я не понимаю, почему это происходит. Все соответствия соответствий с базой данных дают результат 163.

Это мои вопросы и сомнения, пожалуйста, помогите мне. : —

  1. Как я могу получить количество совпадений, если метод, который я использую выше, неверен?

Извиняюсь, если вопрос довольно зачаточный, но ваша помощь очень ценится.

0

Решение

FlannBasedMatcher.match() метод не делает то, что вы думаете, он делает; это вернет Лучший соответствовать каждый ключевой момент. Таким образом, у вас всегда будет 163 матча, потому что всегда будет Лучший матч, даже если он не очень хороший.

Что обычно происходит при сопоставлении объектов, так это то, что порог применяется к расстояниям дескриптора; так, например, если любое из совпадений имеет расстояние, превышающее пороговое значение tзатем они отклоняются. Номер хорошо совпадения после определения порога обычно используются для измерения сходства между изображениями. Я думаю, что это число, которое вы ожидали получить.

Ваш код в основном формирует первую часть учебника Вот. Если вы прочитаете учебник, вы увидите именно то, что я описал, где совпадения установлены в соответствии с их расстоянием.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector