OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
跟踪API实现细节

详细描述

长期光学跟踪 API

长期光学跟踪是许多计算机视觉应用在现实世界场景中的一个重要问题。该领域的发展非常分散,此 API 提供了一个独特的接口,可用于集成多种算法并进行比较。这项工作部分基于 [235][166]

这些算法从目标的边界框开始,并通过其内部表示避免跟踪过程中的漂移。这些长期跟踪器能够在线评估新帧中目标位置的质量,而无需真实值。

主要有三个组件:TrackerContribSamplerTrackerContribFeatureSetTrackerModel。第一个组件是根据最后的目标位置计算帧上的图像块的对象。TrackerContribFeatureSet 是管理特征的类,可以集成多种类型(HAAR、HOG、LBP、Feature2D 等)。最后一个组件是目标的内部表示,它是外观模型。它存储所有状态候选并计算轨迹(最可能的目标状态)。类 TrackerTargetState 表示目标的一种可能状态。TrackerContribSamplerTrackerContribFeatureSet 是目标的视觉表示,而 TrackerModel 则是统计模型。

这些算法的近期基准测试可见于 [304]

创建自己的跟踪器

如果您想创建一个新的跟踪器,请按以下步骤操作。首先,确定跟踪器类的名称(为了符合现有风格,我们建议使用“tracker”前缀,例如 trackerMIL、trackerBoosting)——后续我们将此选择称为“classname”。

每个跟踪器都有三个组件:TrackerContribSamplerTrackerContribFeatureSetTrackerModel。前两个是从 Tracker 基类实例化的,而最后一个组件是抽象的,因此您必须实现自己的 TrackerModel

TrackerContribSampler

TrackerContribSampler 已经实例化,但您应该定义采样算法并将类(或单个类)添加到 TrackerContribSampler。您可以选择一个现成的实现,例如 TrackerContribSamplerCSC,或者您可以实现自己的采样方法,在这种情况下,该类必须继承 TrackerContribSamplerAlgorithm。填写 samplingImpl 方法,将结果写入“sample”输出参数。

创建专门的 TrackerContribSamplerAlgorithm TrackerContribSamplerCSC 示例:

class CV_EXPORTS_W TrackerContribSamplerCSC : public TrackerContribSamplerAlgorithm
{
public:
TrackerContribSamplerCSC( const TrackerContribSamplerCSC::Params &parameters = TrackerContribSamplerCSC::Params() );
~TrackerContribSamplerCSC();
...
保护:
bool samplingImpl( const Mat& image, Rect boundingBox, std::vector<Mat>& sample );
...
};

TrackerContribSamplerAlgorithm 添加到 TrackerContribSampler 的示例:

// sampler 是 TrackerContribSampler
Ptr<TrackerContribSamplerAlgorithm> CSCSampler = new TrackerContribSamplerCSC( CSCparameters );
if( !sampler->addTrackerSamplerAlgorithm( CSCSampler ) )
return false;
//或添加带默认参数的 CSC 采样器
//sampler->addTrackerSamplerAlgorithm( "CSC" );
另请参见
TrackerContribSamplerCSC, TrackerContribSamplerAlgorithm

TrackerContribFeatureSet

TrackerContribFeatureSet 已经实例化(作为第一个),但您应该定义在跟踪器中将使用哪些类型的特征。您可以使用多种特征类型,因此您可以在 TrackerContribFeatureSet 中添加一个现成的实现,例如 TrackerContribFeatureHAAR,或者开发自己的实现。在这种情况下,在 computeImpl 方法中放置提取特征的代码,并在 selection 方法中可选地放置用于特征细化和选择的代码。

创建专门的 TrackerFeature TrackerContribFeatureHAAR 示例:

class CV_EXPORTS_W TrackerContribFeatureHAAR : public TrackerFeature
{
public:
TrackerContribFeatureHAAR( const TrackerContribFeatureHAAR::Params &parameters = TrackerContribFeatureHAAR::Params() );
~TrackerContribFeatureHAAR();
void selection( Mat& response, int npoints );
...
保护:
bool computeImpl( const std::vector<Mat>& images, Mat& response );
...
};

TrackerFeature 添加到 TrackerContribFeatureSet 的示例:

// featureSet 是 TrackerContribFeatureSet
Ptr<TrackerFeature> trackerFeature = new TrackerContribFeatureHAAR( HAARparameters );
featureSet->addTrackerFeature( trackerFeature );
另请参见
TrackerContribFeatureHAAR, TrackerContribFeatureSet

TrackerModel

TrackerModel 是抽象的,因此在您的实现中,您必须开发继承自 TrackerModelTrackerModel。填写状态估计方法“modelEstimationImpl”,它估计最可能的目标位置,更多信息请参阅 [235] 表 I (ME)。填写“modelUpdateImpl”以更新模型,请参阅 [235] 表 I (MU)。在此类中,您可以使用 :cConfidenceMap 和 :cTrajectory 来存储模型。前者表示所有可能的候选状态的模型,后者表示所有估计状态的列表。

创建专门的 TrackerModel TrackerMILModel 示例:

class TrackerMILModel : public TrackerModel
{
public:
TrackerMILModel( const Rect& boundingBox );
~TrackerMILModel();
...
保护:
void modelEstimationImpl( const std::vector<Mat>& responses );
void modelUpdateImpl();
...
};

并将其添加到您的 Tracker 中:

bool TrackerMIL::initImpl( const Mat& image, const Rect2d& boundingBox )
{
...
// model 是通用 Tracker 的通用 TrackerModel 字段
model = new TrackerMILModel( boundingBox );
...
}
typedef Rect_< float > 
Rect_< double > Rect2d
定义 types.hpp:495

在最后一步,您应该根据您的实现定义 TrackerStateEstimator,或者您可以使用现成的类,例如 TrackerStateEstimatorMILBoosting。它代表模型的统计部分,用于估计最可能的目标状态。

创建专门的 TrackerStateEstimator TrackerStateEstimatorMILBoosting 示例:

class CV_EXPORTS_W TrackerStateEstimatorMILBoosting : public TrackerStateEstimator
{
class TrackerMILTargetState : public TrackerTargetState
{
...
};
public:
TrackerStateEstimatorMILBoosting( int nFeatures = 250 );
~TrackerStateEstimatorMILBoosting();
...
保护:
Ptr<TrackerTargetState> estimateImpl( const std::vector<ConfidenceMap>& confidenceMaps );
void updateImpl( std::vector<ConfidenceMap>& confidenceMaps );
...
};

并将其添加到您的 TrackerModel 中:

// model 是您的 Tracker 的 TrackerModel
Ptr<TrackerStateEstimatorMILBoosting> stateEstimator = new TrackerStateEstimatorMILBoosting( params.featureSetNumFeatures );
model->setTrackerStateEstimator( stateEstimator );
另请参见
TrackerModel, TrackerStateEstimatorMILBoosting, TrackerTargetState

在此步骤中,您应该根据您的实现定义 TrackerTargetStateTrackerTargetState 基类只包含边界框(左上角位置、宽度和高度),您可以添加缩放因子、目标旋转等来丰富它。

创建专门的 TrackerTargetState TrackerMILTargetState 示例:

class TrackerMILTargetState : public TrackerTargetState
{
public:
TrackerMILTargetState( const Point2f& position, int targetWidth, int targetHeight, bool foreground, const Mat& features );
~TrackerMILTargetState();
...
private:
bool isTarget;
Mat targetFeatures;
...
};

命名空间

命名空间  cv::detail::tracking::contrib_feature
 
命名空间  cv::detail::tracking::kalman_filters
 
命名空间  cv::detail::tracking::online_boosting
 
命名空间  cv::detail::tracking::tbm
 
命名空间  cv::detail::tracking::tld
 

类  cv::detail::tracking::TrackerContribFeature
 代表特征的 TrackerContribFeature 的抽象基类。更多...
 
类  cv::detail::tracking::TrackerContribFeatureHAAR
 基于 HAAR 特征的 TrackerContribFeature,由 TrackerMIL 和许多其他算法使用。更多...
 
类  cv::detail::tracking::TrackerContribFeatureSet
 管理特征提取和选择的类。更多...
 
类  cv::detail::tracking::TrackerContribSampler
 管理采样器以选择区域以更新跟踪器模型的类 [AAM] 采样和标签。参见表 I 和 III B 节。更多...
 
类  cv::detail::tracking::TrackerContribSamplerAlgorithm
 代表特定采样器算法的 TrackerContribSamplerAlgorithm 的抽象基类。更多...
 
类  cv::detail::tracking::TrackerContribSamplerCSC
 基于 CSC(当前状态中心)的 TrackerSampler,由 MIL 算法 TrackerMIL 使用。更多...
 
类  cv::detail::tracking::TrackerFeature
 代表特征的 TrackerFeature 的抽象基类。更多...
 
类  cv::detail::tracking::TrackerFeatureFeature2d
 基于 Feature2DTrackerContribFeature更多...
 
类  cv::detail::tracking::TrackerFeatureHOG
 基于 HOG 的 TrackerContribFeature更多...
 
类  cv::detail::tracking::TrackerFeatureLBP
 基于 LBP 的 TrackerContribFeature更多...
 
类  cv::detail::tracking::TrackerFeatureSet
 管理特征提取和选择的类。更多...
 
类  cv::detail::tracking::TrackerModel
 代表目标模型的抽象类。更多...
 
类  cv::detail::tracking::TrackerSampler
 管理采样器以选择区域以更新跟踪器模型的类 [AAM] 采样和标签。参见表 I 和 III B 节。更多...
 
类  cv::detail::tracking::TrackerSamplerAlgorithm
 代表特定采样器算法的 TrackerSamplerAlgorithm 的抽象基类。更多...
 
类  cv::detail::tracking::TrackerSamplerCS
 基于 CS(当前状态)的 TrackerContribSampler,由 TrackerBoosting 算法使用。更多...
 
类  cv::detail::tracking::TrackerSamplerCSC
 基于 CSC(当前状态中心)的 TrackerSampler,由 MIL 算法 TrackerMIL 使用。更多...
 
类  cv::detail::tracking::TrackerSamplerPF
 此采样器基于粒子滤波。更多...
 
类  cv::detail::tracking::TrackerStateEstimator
 用于估计最可能目标状态的 TrackerStateEstimator 的抽象基类。更多...
 
类  cv::detail::tracking::TrackerStateEstimatorAdaBoosting
 基于 ADA-Boosting 的 TrackerStateEstimatorAdaBoosting更多...
 
类  cv::detail::tracking::TrackerStateEstimatorSVM
 基于 SVM 的 TrackerStateEstimator更多...
 
类  cv::detail::tracking::TrackerTargetState
 代表目标可能状态的 TrackerTargetState 的抽象基类。更多...
 

类型定义

typedef std::vector< std::pair< Ptr< TrackerTargetState >, float > > cv::detail::tracking::ConfidenceMap
 表示帧 \(k\) 处的目标模型(所有状态和分数)
 
typedef std::vector< Ptr< TrackerTargetState > > cv::detail::tracking::Trajectory
 表示所有帧的估计状态。
 

函数

void cv::detail::tracking::computeInteractionMatrix (const cv::Mat &uv, const cv::Mat &depths, const cv::Mat &K, cv::Mat &J)
 计算一组 2D 像素的交互矩阵 ( [134] [54] [55] )。这通常用于视觉伺服应用中,以命令机器人移动到期望的像素位置/速度。通过反转此矩阵,可以估计相机的空间速度,即扭转(twist)。
 
cv::Vec6d cv::detail::tracking::computeTwist (const cv::Mat &uv, const cv::Mat &duv, const cv::Mat &depths, const cv::Mat &K)
 根据一组 2D 像素位置、它们的速度、深度值和相机的内参来计算相机扭转(twist)。像素速度通常通过光流算法获得,密集流和稀疏流都可用于计算图像之间的光流,duv 通过将光流除以图像之间的时间间隔来计算。
 

类型定义文档

◆ ConfidenceMap

typedef std::vector<std::pair<Ptr<TrackerTargetState>, float> > cv::detail::tracking::ConfidenceMap

#include <opencv2/video/detail/tracking.detail.hpp>

表示帧 \(k\) 处的目标模型(所有状态和分数)

参见 [235] 对 \(\langle \hat{x}^{i}_{k}, C^{i}_{k} \rangle\) 的集合

另请参见
TrackerTargetState

◆ Trajectory

#include <opencv2/video/detail/tracking.detail.hpp>

表示所有帧的估计状态。

[235] \(x_{k}\) 是目标直到时间 \(k\) 的轨迹

另请参见
TrackerTargetState

函数文档

◆ computeInteractionMatrix()

void cv::detail::tracking::computeInteractionMatrix ( const cv::Mat & uv,
const cv::Mat & depths,
const cv::Mat & 输入的相机内参矩阵。,
cv::Mat & J )

#include <opencv2/tracking/twist.hpp>

计算一组 2D 像素的交互矩阵 ( [134] [54] [55] )。这通常用于视觉伺服应用中,以命令机器人移动到期望的像素位置/速度。通过反转此矩阵,可以估计相机的空间速度,即扭转(twist)。

参数
uv2xN 2D 像素位置矩阵
depths1xN 深度值矩阵
输入的相机内参矩阵。3x3 相机内参矩阵
J2Nx6 交互矩阵

◆ computeTwist()

cv::Vec6d cv::detail::tracking::computeTwist ( const cv::Mat & uv,
const cv::Mat & duv,
const cv::Mat & depths,
const cv::Mat & K )

#include <opencv2/tracking/twist.hpp>

根据一组 2D 像素位置、它们的速度、深度值和相机的内参来计算相机扭转(twist)。像素速度通常通过光流算法获得,密集流和稀疏流都可用于计算图像之间的光流,duv 通过将光流除以图像之间的时间间隔来计算。

参数
uv2xN 2D 像素位置矩阵
duv2Nx1 2D 像素速度矩阵
depths1xN 深度值矩阵
输入的相机内参矩阵。3x3 相机内参矩阵
返回
cv::Vec6d 6x1 相机扭转