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 相機扭轉