Difference between revisions of "Function:TrackFeatures"
From CUVI Wiki
(5 intermediate revisions by 2 users 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: | |style="font-size:100%;"| | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
CuviStatus trackFeatures(CuviImage | CuviStatus trackFeatures(const CuviImage& previous, | ||
CuviImage | const CuviImage& next, | ||
CuviPointValue2D* inputFeatures, | CuviPointValue2D<Cuvi32f,Cuvi32f>* inputFeatures, | ||
CuviPointValue2D* | CuviPointValue2D<Cuvi32f,Cuvi32f>*& trackedFeatures, | ||
Cuvi32s featureCount, | const Cuvi32s featureCount, | ||
CuviTrackingCriteria criteria, | CuviTrackingCriteria criteria, | ||
CuviStream | const CuviStream& stream = CuviStream()); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} | ||
===Parameters=== | ====Parameters==== | ||
{| | |||
|style="font-size:75%;"| | |||
{|class="wikitable" | {|class="wikitable" | ||
|- | |- | ||
Line 22: | Line 24: | ||
! Description | ! Description | ||
|- | |- | ||
| | | previous | ||
| CuviImage | | const CuviImage& | ||
| The first image whose features are to be tracked | | The first image whose features are to be tracked | ||
|- | |- | ||
| | | next | ||
| CuviImage | | const CuviImage& | ||
| Second image, in which to look for features of first image | | Second image, in which to look for features of first image | ||
|- | |- | ||
| inputFeatures | | inputFeatures | ||
| CuviPointValue2D* | | CuviPointValue2D<Cuvi32f,Cuvi32f>* | ||
| Feature of first image | | Feature of first image | ||
|- | |- | ||
| trackedFeatures | | trackedFeatures | ||
| CuviPointValue2D* | | CuviPointValue2D<Cuvi32f,Cuvi32f>*& | ||
| Output feature list containing the location of tracked features from first image onto second image | | Output feature list containing the location of tracked features from first image onto second image | ||
|- | |- | ||
| featureCount | | featureCount | ||
| Cuvi32s | | const Cuvi32s | ||
| Number of features to track | | Number of features to track | ||
|- | |- | ||
Line 47: | Line 49: | ||
|- | |- | ||
| stream | | stream | ||
| 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|none|frame]] | |||
<br/> | |||
[[File:Frame1.jpg|none|frame|]] | |||
<br/> | |||
====Code Example==== | |||
===Example=== | |||
{| | {| | ||
|style="font-size: | |style="font-size:100%;"| | ||
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
Line 85: | Line 83: | ||
//Create two 8-bit Grays-scale CuviImage objects | //Create two 8-bit Grays-scale CuviImage objects | ||
CuviImage | CuviImage gimg1 = cuvi::io::loadImage(path, CUVI_LOAD_IMAGE_GRAYSCALE); | ||
CuviImage | CuviImage gimg2 = cuvi::io::loadImage(path, CUVI_LOAD_IMAGE_GRAYSCALE); | ||
CuviPointValue2D* features1, *features2; | CuviPointValue2D* features1, *features2; | ||
//selection and tracking criteria | //selection and tracking criteria | ||
CuviFeaturesCriteria fc | CuviFeaturesCriteria fc(CUVI_FEATURES_HARRIS,0.006f,22); | ||
CuviTrackingCriteria tc | CuviTrackingCriteria tc(2,CuviSize(12,12),15,10.0f); | ||
//ROI for selection | //ROI for selection | ||
CuviRect roi(0,0,gimg1.width(),gimg1.height()); | |||
int featureCount = 50; | int featureCount = 50; | ||
//Select Features | //Select Features | ||
cuvi::computerVision::goodFeaturesToTrack(gimg1,roi, | cuvi::computerVision::goodFeaturesToTrack(gimg1,roi,features1,featureCount,fc); | ||
//Track the selected features from first frame onto second frame | //Track the selected features from first frame onto second frame | ||
cuvi::computerVision::trackFeatures(gimg1,gimg2,features1, | cuvi::computerVision::trackFeatures(gimg1,gimg2,features1,features2,featureCount,tc); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
|} | |} |
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
|
Parameters
|
Image Type Support
|
Samples
Error creating thumbnail: Unable to save thumbnail to destination
Error creating thumbnail: Unable to save thumbnail to destination
Code Example
|