Difference between revisions of "Function:TrackFeatures"

From CUVI Wiki
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
__NOTOC__
__NOTOC__
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.
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===
====Function====
{|
{|
|style="font-size:150%;"|
|style="font-size:100%;"|
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
CuviStatus trackFeatures(const CuviImage& previous,
CuviStatus trackFeatures(const CuviImage& previous,
Line 15: Line 15:
|}
|}


===Parameters===
====Parameters====
{|
|style="font-size:75%;"|
{|class="wikitable"
{|class="wikitable"
|-
|-
Line 49: Line 51:
| const CuviStream&
| const CuviStream&
| GPU stream ID for execution
| GPU stream ID for execution
 
|}
|}
|}


 
====Image Type Support====
===Image Type Support===
{|
 
|style="font-size:75%;"|
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 63: Line 65:
| CuviPointValue2D
| CuviPointValue2D
|}
|}
===Samples===
{|
|-
|[[File:Frame0.jpg|frame]]
|[[File:Frame1.jpg|frame|]]
|}
|}


====Samples====
[[File:Frame0.jpg|none|frame]]
<br/>
[[File:Frame1.jpg|none|frame|]]
<br/>


 
====Code Example====
===Example===
{|
{|
|style="font-size:150%;"|
|style="font-size:100%;"|
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">



Latest revision as of 22:19, 18 October 2022

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(const CuviImage& previous,
                         const CuviImage& next,
                         CuviPointValue2D<Cuvi32f,Cuvi32f>* inputFeatures,
                         CuviPointValue2D<Cuvi32f,Cuvi32f>*& trackedFeatures,
                         const Cuvi32s featureCount,
                         CuviTrackingCriteria criteria,
                         const CuviStream& stream = CuviStream());

Parameters

Name Type Description
previous const CuviImage& The first image whose features are to be tracked
next const CuviImage& Second image, in which to look for features of first image
inputFeatures CuviPointValue2D<Cuvi32f,Cuvi32f>* Feature of first image
trackedFeatures CuviPointValue2D<Cuvi32f,Cuvi32f>*& Output feature list containing the location of tracked features from first image onto second image
featureCount const Cuvi32s Number of features to track
criteria CuviFeaturesCriteria A structure containing various parameters that affect feature tracking behavior
stream const 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


Code Example

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

//Create two 8-bit Grays-scale CuviImage objects
CuviImage gimg1 = cuvi::io::loadImage(path, CUVI_LOAD_IMAGE_GRAYSCALE);
CuviImage gimg2 = cuvi::io::loadImage(path, CUVI_LOAD_IMAGE_GRAYSCALE);

CuviPointValue2D* features1, *features2;

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

//ROI for selection
CuviRect roi(0,0,gimg1.width(),gimg1.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);