OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
トラッキングAPIの実装詳細

詳細説明

長期オプティカルトラッキングAPI

長期オプティカルトラッキングは、実世界のシナリオにおける多くのコンピュータビジョンアプリケーションにとって重要な課題である。この分野の開発は非常に断片化しており、このAPIは複数のアルゴリズムを組み込んで比較するのに役立つ統一的なインターフェースである。この成果は部分的に [241][168] に基づいている。

これらのアルゴリズムは対象のバウンディングボックスから開始し、内部表現によってトラッキング中のドリフトを回避する。これらの長期トラッカーは、グラウンドトゥルースなしで新しいフレーム内の対象位置の品質をオンラインで評価できる。

主要なコンポーネントは3つある:TrackerContribSamplerTrackerContribFeatureSet、そして TrackerModel である。最初のコンポーネントは、直前の対象位置に基づいてフレーム上のパッチを計算するオブジェクトである。TrackerContribFeatureSet は特徴を管理するクラスであり、多くの種類(HAAR、HOG、LBP、Feature2D など)を組み込むことができる。最後のコンポーネントは対象の内部表現であり、外観モデルである。これはすべての状態候補を格納し、軌跡(最も可能性の高い対象状態)を計算する。クラス TrackerTargetState は対象の取りうる状態を表す。TrackerContribSamplerTrackerContribFeatureSet は対象の視覚的表現であり、一方 TrackerModel は統計的モデルである。

これらのアルゴリズム間の最近のベンチマークは [311] で見ることができる

独自のトラッカーを作成する

新しいトラッカーを作成したい場合、何をすべきかを示す。まず、トラッカーのクラス名を決める(既存のスタイルに合わせるため、接頭辞「tracker」を付けたもの、例えば trackerMIL、trackerBoosting を推奨する)。以降ではこの選択を「classname」と呼ぶ。

すべてのトラッカーは3つのコンポーネント TrackerContribSamplerTrackerContribFeatureSetTrackerModel を持つ。最初の2つは Tracker 基底クラスからインスタンス化されるが、最後のコンポーネントは抽象であるため、独自の TrackerModel を実装しなければならない。

TrackerContribSampler

TrackerContribSampler はすでにインスタンス化されているが、サンプリングアルゴリズムを定義し、クラス(または単一のクラス)を TrackerContribSampler に追加すべきである。TrackerContribSamplerCSC のような既成の実装の1つを選ぶこともできるし、独自のサンプリング手法を実装することもできる。後者の場合、クラスは 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 );
...
};

TrackerContribSamplerAlgorithmTrackerContribSampler に追加する例::

//sampler is the TrackerContribSampler
Ptr<TrackerContribSamplerAlgorithm> CSCSampler = new TrackerContribSamplerCSC( CSCparameters );
if( !sampler->addTrackerSamplerAlgorithm( CSCSampler ) )
return false;
//or add CSC sampler with default parameters
//sampler->addTrackerSamplerAlgorithm( "CSC" );
参照
TrackerContribSamplerCSC, TrackerContribSamplerAlgorithm

TrackerContribFeatureSet

TrackerContribFeatureSet はすでに(最初に)インスタンス化されているが、トラッカーで使用する特徴の種類を定義すべきである。複数の特徴の種類を使用できるため、TrackerContribFeatureHAAR のような既成の実装を TrackerContribFeatureSet に追加するか、独自の実装を開発できる。この場合、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 );
...
};

TrackerFeatureTrackerContribFeatureSet に追加する例::

//featureSet is the TrackerContribFeatureSet
Ptr<TrackerFeature> trackerFeature = new TrackerContribFeatureHAAR( HAARparameters );
featureSet->addTrackerFeature( trackerFeature );
参照
TrackerContribFeatureHAAR, TrackerContribFeatureSet

TrackerModel

TrackerModel は抽象クラスであるため、実装においては TrackerModel を継承する独自の TrackerModel を開発しなければならない。状態を推定するメソッド "modelEstimationImpl" を実装すること。これは最も可能性の高いターゲット位置を推定する。詳細は [241] の表I (ME) を参照。モデルを更新するために "modelUpdateImpl" を実装すること。詳細は [241] の表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 is the general TrackerModel field of the general Tracker
model = new TrackerMILModel( boundingBox );
...
}
Rect_< double > Rect2d
Definition types.hpp:498

最後のステップでは、実装に基づいて TrackerStateEstimator を定義するか、TrackerStateEstimatorMILBoosting のような既成のクラスの1つを使用できる。これは最も可能性の高い対象状態を推定するモデルの統計的部分を表す。

特化した 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 is the TrackerModel of your Tracker
Ptr<TrackerStateEstimatorMILBoosting> stateEstimator = new TrackerStateEstimatorMILBoosting( params.featureSetNumFeatures );
model->setTrackerStateEstimator( stateEstimator );
参照
TrackerModel、TrackerStateEstimatorMILBoosting、TrackerTargetState

このステップでは、実装に基づいて独自の TrackerTargetState を定義すべきである。TrackerTargetState 基底クラスはバウンディングボックス(左上の位置、幅、高さ)のみを持つが、スケール係数や対象の回転などを追加して拡張できる。

特化した 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 特徴に基づく TrackerContribFeatureTrackerMIL やその他多くのアルゴリズムで使用される。 続きを読む...
 
class  cv::detail::tracking::TrackerContribFeatureSet
 特徴の抽出と選択を管理するクラス。 続きを読む...
 
class  cv::detail::tracking::TrackerContribSampler
 トラッカーのモデル更新のための領域を選択するためにサンプラーを管理するクラス [AAM] Sampling e Labeling。表 I および第 III 章 B 節を参照。 続きを読む...
 
class  cv::detail::tracking::TrackerContribSamplerAlgorithm
 特定のサンプラーのアルゴリズムを表す TrackerContribSamplerAlgorithm の抽象基底クラス。 続きを読む...
 
class  cv::detail::tracking::TrackerContribSamplerCSC
 CSC (current state centered) に基づく TrackerSampler。MIL アルゴリズム TrackerMIL で使用される。 続きを読む...
 
class  cv::detail::tracking::TrackerFeature
 特徴を表す TrackerFeature の抽象基底クラス。 続きを読む...
 
class  cv::detail::tracking::TrackerFeatureFeature2d
 Feature2D に基づく TrackerContribFeature続きを読む...
 
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] Sampling e Labeling。表 I および第 III 章 B 節を参照。 続きを読む...
 
class  cv::detail::tracking::TrackerSamplerAlgorithm
 特定のサンプラーのアルゴリズムを表す TrackerSamplerAlgorithm の抽象基底クラス。 続きを読む...
 
class  cv::detail::tracking::TrackerSamplerCS
 CS (current state) に基づく TrackerContribSampler。アルゴリズム TrackerBoosting で使用される。 続きを読む...
 
class  cv::detail::tracking::TrackerSamplerCSC
 CSC (current state centered) に基づく TrackerSampler。MIL アルゴリズム TrackerMIL で使用される。 続きを読む...
 
class  cv::detail::tracking::TrackerSamplerPF
 このサンプラーはパーティクルフィルタリングに基づく。 続きを読む...
 
class  cv::detail::tracking::TrackerStateEstimator
 最も可能性の高い対象状態を推定する TrackerStateEstimator の抽象基底クラス。 続きを読む...
 
class  cv::detail::tracking::TrackerStateEstimatorAdaBoosting
 ADA-Boosting に基づく TrackerStateEstimatorAdaBoosting続きを読む...
 
class  cv::detail::tracking::TrackerStateEstimatorSVM
 SVM に基づく TrackerStateEstimator続きを読む...
 
class  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ピクセルに対する相互作用行列 ( [135] [55] [56] ) を計算する。これは通常、ロボットに所望のピクセル位置/速度で動くよう指令するビジュアルサーボイング応用で用いられる。この行列を逆にすることで、カメラの空間速度すなわちツイストを推定できる。
 
cv::Vec6d cv::detail::tracking::computeTwist (const cv::Mat &uv, const cv::Mat &duv, const cv::Mat &depths, const cv::Mat &K)
 2D ピクセル位置の集合、それらの速度、深度値、およびカメラの内部パラメータからカメラのツイストを計算する。ピクセル速度は通常、オプティカルフローアルゴリズムから得られる。画像間のフローの計算には密なフローと疎なフローの両方が使用でき、duv はフローを画像間の時間間隔で割ることで計算される。
 

型定義詳解

◆ ConfidenceMap

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

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

フレーム \(k\) における対象のモデル(すべての状態とスコア)を表す

[241] を参照。ペア \(\langle \hat{x}^{i}_{k}, C^{i}_{k} \rangle\) の集合

参照
TrackerTargetState

◆ Trajectory

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

すべてのフレームの推定状態を表す。

[241] \(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>

2Dピクセルの集合に対する相互作用行列( [135] [55] [56] )を計算する。これは通常、ビジュアルサーボイングアプリケーションにおいて、ロボットに目標となるピクセル位置や速度へ移動するよう指令するために使用される。この行列を逆行列にすることで、カメラの空間速度、すなわちツイストを推定できる。

引数
uv2D ピクセル位置の 2xN 行列
depths深度値の 1xN 行列
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>

2D ピクセル位置の集合、その速度、深度値、およびカメラの内部パラメータからカメラのツイストを計算する。ピクセル速度は通常オプティカルフローアルゴリズムから得られ、画像間のフローの計算には密フローと疎フローのどちらも使用でき、duv はフローを画像間の時間間隔で割ることで計算される。

引数
uv2D ピクセル位置の 2xN 行列
duv2D ピクセル速度の 2Nx1 行列
depths深度値の 1xN 行列
K3x3 のカメラ内部パラメータ行列
戻り値
cv::Vec6d 6x1 のカメラツイスト