Function:TrackFeatures

From CUVI Wiki

CUVI Feature tracker tracks input features from frame 1 onto frame 2. The function is ideal for tracking selected number of features through an image sequence or a video stream. This is a custom algorithm and does not use optical flows to estimate motion. Check out Motion Estimate section for more details on Optical Flow based motion tracking.

Function

CuviStatus trackFeatures(CuviImage* previousImage,
                         CuviImage* nextImage,
                         CuviPointValue2D* inputFeatures,
                         CuviPointValue2D** trackedFeatures,
                         Cuvi32s featureCount,
                         CuviTrackingCriteria criteria,
                         CuviStream* stream = NULL);

Parameters

Name Type Description
previousImage CuviImage* The first image whose features are to be tracked
nextImage CuviImage* Second image, in which to look for features of first image
inputFeatures CuviPointValue2D* Feature of first image
trackedFeatures CuviPointValue2D** Output feature list containing the location of tracked features from first image onto second image
featureCount Cuvi32s Number of features to track
criteria CuviFeaturesCriteria A structure containing various parameters that affect feature tracking behavior
stream CuviStream* GPU stream ID for execution


Image Type Support

Input Output
8uC1 CuviPointValue2D


Samples

Error creating thumbnail: Unable to save thumbnail to destination
Error creating thumbnail: Unable to save thumbnail to destination


Example

//Image size
CuviSize size = cuviSize(img1->width,img1->height);

//Create two 8-bit Grays-scale CuviImage objects
CuviImage* gimg1 = new CuviImage(size,img1->depth,img1->nChannels);
CuviImage* gimg2 = new CuviImage(size,img1->depth,img1->nChannels);

//Populate the GPU Images
gimg1->upload(img1->imageData,img1->widthStep);
gimg2->upload(img2->imageData,img2->widthStep);

CuviPointValue2D* features1, *features2;

//selection and tracking criteria
CuviFeaturesCriteria fc = cuviFeaturesCriteria(CUVI_FEATURES_HARRIS,0.006f,22);
CuviTrackingCriteria tc = cuviTrackingCriteria(2,cuviSize(12,12),15,10.0f);

//ROI for selection
CuviROI roi = cuviROI(0,0,img1->width,img1->height);

int featureCount = 50;

//Select Features
cuvi::computerVision::goodFeaturesToTrack(gimg1,roi,&features1,&featureCount,fc);

//Track the selected features from first frame onto second frame
cuvi::computerVision::trackFeatures(gimg1,gimg2,features1,&features2,featureCount,tc);