2013-06-13 5 views
0

J'essaie de suivre un ensemble de points de caractéristiques dans une séquence d'images en niveaux de gris en utilisant OpenCV 2.4.0.Suivi du point de fonction

Je sais déjà comment implémenter SIFT ou SURF pour détecter des points caractéristiques et calculer initialement les descripteurs. Cependant, j'ai besoin d'aide pour calculer le descripteur SIFT d'un point caractéristique dont je ne connais que l'emplacement (u, v). Un code d'exemple de travail pour SIFT est illustré ci-dessous.

Par exemple, si j'utilise le détecteur d'angle Haris pour détecter les caractéristiques à dv_scenePoints_t comme:

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

Ensuite, dans ce cas, comment pourrais-je calculer le descripteur EIPD de points à dv_scenePoints_t.

De même, si je dois suivre les points caractéristiques à l'aide d'un filtre à particules. Ensuite, comment utiliser le descripteur SIFT pour calculer le poids de chaque particule (hypothèse du point caractéristique). Merci. Structure

#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; 

} 

Répondre

Questions connexes