2013-06-13 2 views
0

Я пытаюсь отслеживать множество точек функции в последовательности изображений в оттенках серого с использованием OpenCV 2.4.0.Отслеживание Feature point

Я уже знаю, как реализовать SIFT или SURF для обнаружения точек функции и изначальной обработки дескрипторов. Тем не менее, мне нужна помощь в вычислении дескриптора SIFT точки объекта, чье местоположение (u, v) известно только мне. Ниже приведен пример рабочего кода для SIFT.

Например, если я использую Харис угловой детектор для обнаружения особенностей в dv_scenePoints_t как:

cvGoodFeaturesToTrack (source2, eig_img, temp_img, dv_scenePoints_t, &corner_count, 0.3, 3.0, mask, 7, 1); 

Тогда в таком случае, как бы я вычислить SIFT дескриптор точек dv_scenePoints_t.

Кроме того, если мне нужно отслеживать точки функции фильтром частиц. Затем, как бы я использовал дескриптор SIFT для вычисления веса каждой частицы (гипотеза точки объекта). Спасибо.

#include "stdafx.h" 
#include <stdio.h> 
#include "opencv2/core/core.hpp" 
#include "opencv2/features2d/features2d.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/nonfree/nonfree.hpp" 
#include <opencv2/nonfree/features2d.hpp> 
#include "opencv2/objdetect/objdetect.hpp" 
#include "opencv2/legacy/legacy.hpp" 
#include "opencv2/legacy/compat.hpp" 
#include <opencv/cv.h> 
#include <opencv/highgui.h> 
#include <string.h> 
#include <iostream> 

using namespace cv; 
using namespace std; 

int main(int argc, char *argv[]) 
{   
    Mat source1 = imread("KITTI_train.png",CV_LOAD_IMAGE_GRAYSCALE); 
    Mat source2 = imread("KITTI_trainRotate90.png",CV_LOAD_IMAGE_GRAYSCALE); 

    vector<KeyPoint> dv_sceneKeypoints_t, dv_objectKeypoints_t; 
    vector<DMatch> matches; 

    SiftFeatureDetector detector(400,5,0.03); 

    detector.detect(source1, dv_objectKeypoints_t); 
    detector.detect(source2, dv_sceneKeypoints_t); 
    SiftDescriptorExtractor extractor; 

    Mat descriptors1,descriptors2; 
    extractor.compute(source1,dv_objectKeypoints_t,descriptors1); 
    extractor.compute(source2,dv_sceneKeypoints_t,descriptors2); 

    FlannBasedMatcher matcher; 
    matcher.match(descriptors1,descriptors2, matches); 
    Mat target; 
    drawMatches(source1,dv_objectKeypoints_t,source2,dv_sceneKeypoints_t,matches,target); 
    imshow("Matches", target); 
    waitKey(0); 
    return 0; 

} 

ответ