OpenCV  4.10.0
开源计算机视觉
正在加载...
正在搜索...
无匹配项
命名空间 | | 类型定义 | 函数
跟踪 API 实现详细信息

详细说明

长期光学跟踪 API

长期光学跟踪对于真实世界场景中的许多计算机视觉应用程序来说都是一个重要问题。此领域的发展非常分散,而此 API 是一个独特的接口,可用于插入多个算法并对它们进行比较。这项工作部分基于 [231][163])。

这些算法从目标的边框开始,并利用它们的内部表示法在跟踪过程中避免漂移。这些长期跟踪器能够在线评估新帧中目标位置的质量,而无需地面实况数据。

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

可在 [301] 中找到这些算法之间的近期基准。

创建你自己的 %Tracker

如果你想创建一个新的跟踪器,那么你需要做的就是以下内容。首先,确定跟踪器的类名(为满足现有的样式,我们建议使用带有“跟踪器”前缀的,例如 trackerMIL、trackerBoosting)——我们在后面的内容中将把此选择称作“类名”。

每个追踪器都有 TrackerContribSamplerTrackerContribFeatureSetTrackerModel 三个部分。前两个是从 Tracker 基类实例化的,而后一个组成部分是抽象的,所以你必须实现你的 TrackerModel

TrackerContribSampler

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

创建专门的 TrackerContribSamplerAlgorithm TrackerContribSamplerCSC 的示例:

class CV_EXPORTS_W TrackerContribSamplerCSC : public TrackerContribSamplerAlgorithm
{
public:
TrackerContribSamplerCSC( const TrackerContribSamplerCSC::Params &parameters = TrackerContribSamplerCSC::Params() );
~TrackerContribSamplerCSC();
...
protected:
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" );
另请参见
TrackerContribSamplerCSCTrackerContribSamplerAlgorithm

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 );
...
protected:
bool computeImpl( const std::vector<Mat>& images, Mat& response );
...
};

TrackerFeature 添加到 TrackerContribFeatureSet 的示例:

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

TrackerModel

TrackerModel 为抽象类,所以在您的实现中,您必须开发一个 TrackerModel,并从 TrackerModel 继承。填写用于估计状态的函数“modelEstimationImpl”,其估计最可能的目标位置,有关详细信息,请参见 [231] 表 I (ME)。填写“modelUpdateImpl”以更新模型,请参见 [231] 表 I (MU)。在此类中,您可以使用 :cConfidenceMap 和 :cTrajectory 来存储模型。第一个表示模型在所有可能的候选状态上,第二个表示所有估计状态的列表。

创建专门 TrackerModel TrackerMILModel 的示例:

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

并在 Tracker 中添加:

bool TrackerMIL::initImpl( const Mat& image, const Rect2d& boundingBox )
{
...
//model 是通用跟踪器的通用 TrackerModel 域
model = new TrackerMILModel( boundingBox );
...
}
Rect_< double > Rect2d
定义 types.hpp:488

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

创建专门 TrackerStateEstimator TrackerStateEstimatorMILBoosting 的示例:

class CV_EXPORTS_W TrackerStateEstimatorMILBoosting : public TrackerStateEstimator
{
class TrackerMILTargetState : public TrackerTargetState
{
...
};
public:
TrackerStateEstimatorMILBoosting( int nFeatures = 250 );
~TrackerStateEstimatorMILBoosting();
...
protected:
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;
...
};

命名空间

namespace  cv::detail::tracking::contrib_feature
 
namespace  cv::detail::tracking::kalman_filters
 
namespace  cv::detail::tracking::online_boosting
 
namespace  cv::detail::tracking::tbm
 
namespace  cv::detail::tracking::tld
 

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

类型定义

typedef std::vectorPtr< 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)
 计算一组二维像素的交互矩阵( [132] [52] [53] )。在视觉伺服应用中通常使用此矩阵来命令机器人移动到所需的像素位置或速度。通过对该矩阵求逆,可以估计相机空间速度,即扭曲。
 
cv::Vec6d cv::detail::tracking::computeTwist (const cv::Mat &uv, const cv::Mat &duv, const cv::Mat &depths, const cv::Mat &K)
 从一组二维像素位置、其速度、深度值和相机的内部参数计算相机扭曲。像素速度通常从光流算法获得,稠密流和稀疏流都可以用于计算图像之间的流动,并且 duv 通过将流动除以图像之间的时间间隔来计算。
 

类型定义文档

◆ ConfidenceMap

typedef std::vectorPtr< TrackerTargetState< ><, float >< >> > cv::detail::tracking::ConfidenceMap

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

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

参见 [231] 成对 \(\langle \hat{x}^{i}_{k}, C^{i}_{k} \rangle\)

另请参见
TrackerTargetState

◆ Trajectory

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

表示所有帧的估计状态。

[231] \(x_{k}\) 是目标在时间 \(k\) 之前的轨迹

另请参见
TrackerTargetState

函数文档

◆ computeInteractionMatrix()

void cv::detail::tracking::computeInteractionMatrix ( const cv::Mat uv,
const cv::Mat depths,
const cv::Mat K,
cv::Mat J 
)

#include <opencv2/tracking/twist.hpp>

计算一组二维像素的交互矩阵( [132] [52] [53] )。在视觉伺服应用中通常使用此矩阵来命令机器人移动到所需的像素位置或速度。通过对该矩阵求逆,可以估计相机空间速度,即扭曲。

参数
uv2xN 个 2D 像素位置的矩阵
depths1xN 个深度值的矩阵
K3x3 相机固有矩阵
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>

从一组二维像素位置、其速度、深度值和相机的内部参数计算相机扭曲。像素速度通常从光流算法获得,稠密流和稀疏流都可以用于计算图像之间的流动,并且 duv 通过将流动除以图像之间的时间间隔来计算。

参数
uv2xN 个 2D 像素位置的矩阵
duv2Nx1 个 2D 像素速度的矩阵
depths1xN 个深度值的矩阵
K3x3 相机固有矩阵
返回
cv::Vec6d 6x1 相机扭曲