OpenCV 4.13.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 4.13.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
オプティカルフローアルゴリズム

詳細説明

デンスオプティカルフローアルゴリズムは各点のモーションを計算する。

モーションテンプレートは、モーションを検出しその向きを計算するための代替手法である。samples/motempl.py を参照。

"Middlebury" 形式の .flo ファイルを読み書きする関数。次を参照: http://vision.middlebury.edu/flow/code/flow-code/README.txt

クラス

class  cv::optflow::DenseRLOFOpticalFlow
 ロバスト局所オプティカルフロー(RLOF)アルゴリズムとスパースからデンスへの補間スキームに基づく、高速なデンスオプティカルフロー計算。 続き...
 
class  cv::optflow::DualTVL1OpticalFlow
 "Dual TV L1" オプティカルフロー Algorithm続き...
 
class  cv::optflow::GPCDetails
 
class  cv::optflow::GPCForest< T >
 
struct  cv::optflow::GPCMatchingParams
 マッチングパラメータをカプセル化するクラス。 続き...
 
struct  cv::optflow::GPCPatchDescriptor
 
struct  cv::optflow::GPCPatchSample
 
struct  cv::optflow::GPCTrainingParams
 学習パラメータをカプセル化するクラス。 続き...
 
class  cv::optflow::GPCTrainingSamples
 学習サンプルをカプセル化するクラス。 続き...
 
class  cv::optflow::GPCTree
 個々のツリーのためのクラス。 続き...
 
class  cv::optflow::OpticalFlowPCAFlow
 PCAFlowアルゴリズム。 続き...
 
class  cv::optflow::PCAPrior
 このクラスは、得られるオプティカルフローに学習済みの事前分布(prior)を課すために使用できる。解はこの事前分布に従って正則化される。事前に "learn_prior.py" スクリプトで適切な事前分布ファイルを生成しておく必要がある。 続き...
 
class  cv::optflow::RLOFOpticalFlowParameter
 これはロバスト局所オプティカルフロー(RLOF)アルゴリズムのパラメータを保存・設定するために使用される。 続き...
 
class  cv::optflow::SparseRLOFOpticalFlow
 ロバスト局所オプティカルフロー(RLOF)アルゴリズムを用いて、スパースオプティカルフローの計算と特徴トラッキングを行うためのクラス。 続き...
 

型定義

typedef std::vector< GPCPatchSamplecv::optflow::GPCSamplesVector
 

列挙型

enum  cv::optflow::GPCDescType {
  cv::optflow::GPC_DESCRIPTOR_DCT = 0 ,
  cv::optflow::GPC_DESCRIPTOR_WHT
}
 Global Patch Collider の記述子型。 続き...
 
enum  cv::optflow::InterpolationType {
  cv::optflow::INTERP_GEO = 0 ,
  cv::optflow::INTERP_EPIC = 1 ,
  cv::optflow::INTERP_RIC = 2
}
 
enum  cv::optflow::SolverType {
  cv::optflow::ST_STANDART = 0 ,
  cv::optflow::ST_BILINEAR = 1
}
 
enum  cv::optflow::SupportRegionType {
  cv::optflow::SR_FIXED = 0 ,
  cv::optflow::SR_CROSS = 1
}
 

関数

double cv::motempl::calcGlobalOrientation (InputArray orientation, InputArray mask, InputArray mhi, double timestamp, double duration)
 選択した領域における大域的なモーションの向きを計算する。
 
void cv::motempl::calcMotionGradient (InputArray mhi, OutputArray mask, OutputArray orientation, double delta1, double delta2, int apertureSize=3)
 モーション履歴画像の勾配の向きを計算する。
 
void cv::optflow::calcOpticalFlowDenseRLOF (InputArray I0, InputArray I1, InputOutputArray flow, Ptr< RLOFOpticalFlowParameter > rlofParam=Ptr< RLOFOpticalFlowParameter >(), float forwardBackwardThreshold=0, Size gridStep=Size(6, 6), InterpolationType interp_type=InterpolationType::INTERP_EPIC, int epicK=128, float epicSigma=0.05f, float epicLambda=100.f, int ricSPSize=15, int ricSLICType=100, bool use_post_proc=true, float fgsLambda=500.0f, float fgsSigma=1.5f, bool use_variational_refinement=false)
 ロバスト局所オプティカルフロー(RLOF)アルゴリズムとスパースからデンスへの補間スキームに基づく、高速なデンスオプティカルフロー計算。
 
void cv::optflow::calcOpticalFlowSF (InputArray from, InputArray to, OutputArray flow, int layers, int averaging_block_size, int max_flow)
 
void cv::optflow::calcOpticalFlowSF (InputArray from, InputArray to, OutputArray flow, int layers, int averaging_block_size, int max_flow, double sigma_dist, double sigma_color, int postprocess_window, double sigma_dist_fix, double sigma_color_fix, double occ_thr, int upscale_averaging_radius, double upscale_sigma_dist, double upscale_sigma_color, double speed_up_thr)
 "SimpleFlow" アルゴリズムを用いてオプティカルフローを計算する。
 
void cv::optflow::calcOpticalFlowSparseRLOF (InputArray prevImg, InputArray nextImg, InputArray prevPts, InputOutputArray nextPts, OutputArray status, OutputArray err, Ptr< RLOFOpticalFlowParameter > rlofParam=Ptr< RLOFOpticalFlowParameter >(), float forwardBackwardThreshold=0)
 optflow::calcOpticalFlowPyrLK() と同様に、ロバスト局所オプティカルフロー(RLOF)を用いてスパースな特徴セットの高速なオプティカルフローを計算する。
 
void cv::optflow::calcOpticalFlowSparseToDense (InputArray from, InputArray to, OutputArray flow, int grid_step=8, int k=128, float sigma=0.05f, bool use_post_proc=true, float fgs_lambda=500.0f, float fgs_sigma=1.5f)
 PyrLKのスパースマッチの補間に基づく高速なデンスオプティカルフロー。
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_DeepFlow ()
 DeepFlowオプティカルフローアルゴリズムの実装。
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_DenseRLOF ()
 Dense RLOFアルゴリズムへの追加インターフェイス - optflow::calcOpticalFlowDenseRLOF()
 
Ptr< DualTVL1OpticalFlowcv::optflow::createOptFlow_DualTVL1 ()
 cv::DenseOpticalFlow のインスタンスを生成する。
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_Farneback ()
 Farnebackのアルゴリズムへの追加インターフェイス - calcOpticalFlowFarneback()
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_PCAFlow ()
 PCAFlowのインスタンスを生成する。
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_SimpleFlow ()
 SimpleFlowアルゴリズムへの追加インターフェイス - calcOpticalFlowSF()
 
Ptr< SparseOpticalFlowcv::optflow::createOptFlow_SparseRLOF ()
 Sparse RLOFアルゴリズムへの追加インターフェイス - optflow::calcOpticalFlowSparseRLOF()
 
Ptr< DenseOpticalFlowcv::optflow::createOptFlow_SparseToDense ()
 SparseToDenseFlowアルゴリズムへの追加インターフェイス - calcOpticalFlowSparseToDense()
 
void cv::optflow::GPCForest< T >::findCorrespondences (InputArray imgFrom, InputArray imgTo, std::vector< std::pair< Point2i, Point2i > > &corr, const GPCMatchingParams params=GPCMatchingParams()) const
 2枚の画像間の対応を求める。
 
void cv::motempl::segmentMotion (InputArray mhi, OutputArray segmask, std::vector< Rect > &boundingRects, double timestamp, double segThresh)
 モーション履歴画像を、独立した個々のモーション(例えば左手、右手)に対応するいくつかの部分に分割する。
 
void cv::motempl::updateMotionHistory (InputArray silhouette, InputOutputArray mhi, double timestamp, double duration)
 移動するシルエットによってモーション履歴画像を更新する。
 

型定義詳解

◆ GPCSamplesVector

列挙型詳解

◆ GPCDescType

#include <opencv2/optflow/sparse_matching_gpc.hpp>

Global Patch Collider の記述子型。

列挙値
GPC_DESCRIPTOR_DCT 
Python: cv.optflow.GPC_DESCRIPTOR_DCT

品質は良いが低速。

GPC_DESCRIPTOR_WHT 
Python: cv.optflow.GPC_DESCRIPTOR_WHT

品質は劣るがはるかに高速。

◆ InterpolationType

#include <opencv2/optflow/rlofflow.hpp>

列挙値
INTERP_GEO 
Python: cv.optflow.INTERP_GEO

高速な測地補間。[105] を参照。

INTERP_EPIC 
Python: cv.optflow.INTERP_EPIC

ximgproc::EdgeAwareInterpolator を用いたエッジ保存補間。[231],Geistert2016 を参照。

INTERP_RIC 
Python: cv.optflow.INTERP_RIC

ximgproc::RICInterpolator を用いたSLICベースのロバストな補間。[134] を参照。

◆ SolverType

#include <opencv2/optflow/rlofflow.hpp>

列挙値
ST_STANDART 
Python: cv.optflow.ST_STANDART

標準的な反復的リファインメントを適用する

ST_BILINEAR 
Python: cv.optflow.ST_BILINEAR

[245] に記載された双線形方程式の解に基づく最適化された反復的リファインメントを適用する

◆ SupportRegionType

#include <opencv2/optflow/rlofflow.hpp>

列挙値
SR_FIXED 
Python: cv.optflow.SR_FIXED

一定のサポート領域を適用する

SR_CROSS 
Python: cv.optflow.SR_CROSS

[246] に記載されたクロスベースのセグメンテーションによって得られる適応的なサポート領域を適用する

関数詳解

◆ calcGlobalOrientation()

double cv::motempl::calcGlobalOrientation ( InputArray orientation,
InputArray mask,
InputArray mhi,
double timestamp,
double duration )
Python:
cv.motempl.calcGlobalOrientation(orientation, mask, mhi, timestamp, duration) -> retval

#include <opencv2/optflow/motempl.hpp>

選択した領域における大域的なモーションの向きを計算する。

引数
orientation関数 calcMotionGradient で計算されるモーション勾配方向画像。
maskマスク画像。これは calcMotionGradient で計算された有効な勾配マスクと、方向を計算する必要がある領域のマスクとの論理積であってよい。
mhiupdateMotionHistory で計算されるモーション履歴画像。
timestampupdateMotionHistory に渡されるタイムスタンプ。
durationupdateMotionHistory に渡される、モーショントラックの最大持続時間(ミリ秒単位)。

この関数は、選択した領域における平均的なモーションの方向を計算し、0度から360度の間の角度を返す。平均方向は重み付きの向きヒストグラムから計算され、最近のモーションほど大きな重みを、過去に発生したモーションほど小さな重みを持つ。これらは mhi に記録されている。

◆ calcMotionGradient()

void cv::motempl::calcMotionGradient ( InputArray mhi,
OutputArray mask,
OutputArray orientation,
double delta1,
double delta2,
int apertureSize = 3 )
Python:
cv.motempl.calcMotionGradient(mhi, delta1, delta2[, mask[, orientation[, apertureSize]]]) -> mask, orientation

#include <opencv2/optflow/motempl.hpp>

モーション履歴画像の勾配の向きを計算する。

引数
mhiモーション履歴のシングルチャンネル浮動小数点画像。
mask型 CV_8UC1 を持ち、mhi と同じサイズの出力マスク画像。その非ゼロ要素は、モーション勾配データが正しいピクセルを示す。
orientationmhi と同じ型・同じサイズを持つ出力モーション勾配方向画像。画像の各ピクセルはモーション方向であり、0 から 360 度の範囲となる。
delta1ピクセル近傍内における mhi 値の許容される最小(または最大)の差。
delta2ピクセル近傍内における mhi 値の許容される最大(または最小)の差。すなわち、この関数は各ピクセルの \(3 \times 3\) 近傍にわたって mhi 値の最小値( \(m(x,y)\) )と最大値( \(M(x,y)\) )を求め、次の条件を満たす場合に限り \((x, y)\) におけるモーション方向を有効とみなす:

\[\min ( \texttt{delta1} , \texttt{delta2} ) \le M(x,y)-m(x,y) \le \max ( \texttt{delta1} , \texttt{delta2} ).\]

apertureSizeSobel オペレータのアパーチャサイズ。

この関数は各ピクセル \((x, y)\) における勾配の向きを次のように計算する:

\[\texttt{orientation} (x,y)= \arctan{\frac{d\texttt{mhi}/dy}{d\texttt{mhi}/dx}}\]

実際には、計算される角度が度単位で測定され0..360の全範囲をカバーするように、fastAtan2 と phase が使用される。また、計算された角度が有効なピクセルを示すために mask が埋められる。

覚え書き
  • (Python) モーションテンプレート技術の実行方法の例は opencv_source_code/samples/python2/motempl.py にある

◆ calcOpticalFlowDenseRLOF()

void cv::optflow::calcOpticalFlowDenseRLOF ( InputArray I0,
InputArray I1,
InputOutputArray flow,
Ptr< RLOFOpticalFlowParameter > rlofParam = PtrRLOFOpticalFlowParameter >(),
float forwardBackwardThreshold = 0,
Size gridStep = Size(6, 6),
InterpolationType interp_type = InterpolationType::INTERP_EPIC,
int epicK = 128,
float epicSigma = 0.05f,
float epicLambda = 100.f,
int ricSPSize = 15,
int ricSLICType = 100,
bool use_post_proc = true,
float fgsLambda = 500.0f,
float fgsSigma = 1.5f,
bool use_variational_refinement = false )
Python:
cv.optflow.calcOpticalFlowDenseRLOF(I0, I1, flow[, rlofParam[, forwardBackwardThreshold[, gridStep[, interp_type[, epicK[, epicSigma[, epicLambda[, ricSPSize[, ricSLICType[, use_post_proc[, fgsLambda[, fgsSigma[, use_variational_refinement]]]]]]]]]]]]]) -> flow

#include <opencv2/optflow/rlofflow.hpp>

ロバストローカルオプティカルフロー (RLOF) アルゴリズムと sparse-to-dense 補間方式に基づく高速な密なオプティカルフローの計算。

RLOF は [244] [245] [246] および [247] で説明されている高速なローカルオプティカルフロー手法であり、[38] で提案されたピラミッド型反復 Lucas-Kanade 法に類似している。さらに詳細と実験は次の学位論文 [248] にある。実装は optflow::calcOpticalFlowPyrLK() から派生している。

sparse-to-dense 補間方式により、RLOF を用いた密なオプティカルフローの高速な計算が可能になる ([105] を参照)。この方式では次の手順を適用する。

  1. 等間隔にサンプリングしたグリッド上に配置した動きベクトルを計算する。このグリッドの粗さは setGridStep で設定できる
  2. (省略可能) 誤った動きベクトルを forward backward の信頼度に基づいてフィルタリングする。しきい値は setForwardBackward で設定できる。フィルタはしきい値が >0 の場合のみ適用されるが、その場合は後方フローの推定が加わるため実行時間が2倍になる。
  3. 動きベクトルの集合にベクトル場の補間を適用し、密なベクトル場を得る。
引数
I01枚目の 8 ビット入力画像。クロスベースの RLOF を使用する場合( optflow::RLOFOpticalFlowParameter::supportRegionType = SupportRegionType::SR_CROSS を選択した場合)、画像は 8 ビット 3 チャンネル画像でなければならない。
I12枚目の 8 ビット入力画像。クロスベースの RLOF を使用する場合( optflow::RLOFOpticalFlowParameter::supportRegionType = SupportRegionType::SR_CROSS を選択した場合)、画像は 8 ビット 3 チャンネル画像でなければならない。
flowI0 と同じサイズで型 CV_32FC2 を持つ、計算されたフロー画像。
rlofParamoptflow::RLOFOpticalFlowParameter を参照。
forwardBackwardThreshold前方後方の信頼度チェックのためのしきい値。各格子点 \( \mathbf{x} \) について、モーションベクトル \( d_{I0,I1}(\mathbf{x}) \) が計算される。前方後方誤差

\[ EP_{FB} = || d_{I0,I1} + d_{I1,I0} || \]

がこの関数で与えられるしきい値より大きい場合、そのモーションベクトルは後続のベクトル場補間で使用されない。\( d_{I1,I0} \) は後方フローを表す。なお、前方後方テストはしきい値が > 0 の場合にのみ適用される。これによりモーション推定の実行時間が2倍になる可能性がある。
gridStepモーションベクトルを生成する格子のサイズ。各格子点についてモーションベクトルが計算される。一部のモーションベクトルは前方後方しきい値(>0 に設定されている場合)により除去される。残りがベクトル場補間の基礎となる。
interp_type密なオプティカルフローを計算するために使用する補間手法。2つの補間アルゴリズムがサポートされている:
  • INTERP_GEO は高速な測地補間を適用する。 [105] を参照。
  • INTERP_EPIC_RESIDUAL はエッジ保存補間を適用する。 [231],Geistert2016 を参照。
epicKximgproc::EdgeAwareInterpolator を参照。対応するパラメータを設定する。
epicSigmaximgproc::EdgeAwareInterpolator を参照。対応するパラメータを設定する。
epicLambdaximgproc::EdgeAwareInterpolator を参照。対応するパラメータを設定する。
ricSPSizeximgproc::RICInterpolator を参照。対応するパラメータを設定する。
ricSLICTypeximgproc::RICInterpolator を参照。対応するパラメータを設定する。
use_post_procximgproc::fastGlobalSmootherFilter() パラメータを有効にする。
fgsLambda対応する ximgproc::fastGlobalSmootherFilter() パラメータを設定する。
fgsSigma対応する ximgproc::fastGlobalSmootherFilter() パラメータを設定する。
use_variational_refinementVariationalRefinement を有効にする。

引数は [244], [245], [246], [247] で説明されている。RLOF の設定については、さらに詳しくは optflow::RLOFOpticalFlowParameter を参照。

覚え書き
グリッドサイズが (1,1) に設定され、forward backward のしきい値が <= 0 の場合、密なオプティカルフロー場は純粋に RLOF だけで計算される。
SIMD による並列化は SSE4.1 でコンパイルした場合のみ利用できる。
出力において、I0I1 の間で対応点が見つからない場合、flow は 0 に設定されることに注意。
参照
optflow::DenseRLOFOpticalFlow, optflow::RLOFOpticalFlowParameter

◆ calcOpticalFlowSF() [1/2]

void cv::optflow::calcOpticalFlowSF ( InputArray from,
InputArray to,
OutputArray flow,
int layers,
int averaging_block_size,
int max_flow )
Python:
cv.optflow.calcOpticalFlowSF(from_, to, layers, averaging_block_size, max_flow[, flow]) -> flow
cv.optflow.calcOpticalFlowSF(from_, to, layers, averaging_block_size, max_flow, sigma_dist, sigma_color, postprocess_window, sigma_dist_fix, sigma_color_fix, occ_thr, upscale_averaging_radius, upscale_sigma_dist, upscale_sigma_color, speed_up_thr[, flow]) -> flow

#include <opencv2/optflow.hpp>

これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。

◆ calcOpticalFlowSF() [2/2]

void cv::optflow::calcOpticalFlowSF ( InputArray from,
InputArray to,
OutputArray flow,
int layers,
int averaging_block_size,
int max_flow,
double sigma_dist,
double sigma_color,
int postprocess_window,
double sigma_dist_fix,
double sigma_color_fix,
double occ_thr,
int upscale_averaging_radius,
double upscale_sigma_dist,
double upscale_sigma_color,
double speed_up_thr )
Python:
cv.optflow.calcOpticalFlowSF(from_, to, layers, averaging_block_size, max_flow[, flow]) -> flow
cv.optflow.calcOpticalFlowSF(from_, to, layers, averaging_block_size, max_flow, sigma_dist, sigma_color, postprocess_window, sigma_dist_fix, sigma_color_fix, occ_thr, upscale_averaging_radius, upscale_sigma_dist, upscale_sigma_color, speed_up_thr[, flow]) -> flow

#include <opencv2/optflow.hpp>

"SimpleFlow" アルゴリズムを用いてオプティカルフローを計算する。

引数
from1枚目の 8 ビット 3 チャンネル画像。
toprev と同じサイズの2枚目の 8 ビット 3 チャンネル画像。
flowprev と同じサイズで型 CV_32FC2 を持つ、計算されたフロー画像。
layersレイヤー数。
averaging_block_sizeピクセルのコスト関数を計算する際に合計を取るブロックのサイズ。
max_flow各レベルで探索する最大フロー。
sigma_distベクトル平滑化の空間 sigma パラメータ。
sigma_colorベクトル平滑化の色 sigma パラメータ。
postprocess_window後処理のクロスバイラテラルフィルタのウィンドウサイズ。
sigma_dist_fix後処理のクロスバイラテラルフィルタの空間 sigma。
sigma_color_fix後処理のクロスバイラテラルフィルタの色 sigma。
occ_thrオクルージョン検出のためのしきい値。
upscale_averaging_radiusバイラテラルアップスケール処理のウィンドウサイズ。
upscale_sigma_distバイラテラルアップスケール処理の空間 sigma。
upscale_sigma_colorバイラテラルアップスケール処理の色 sigma。
speed_up_thr不規則なフローを持つ点を検出するためのしきい値。アップスケール後にフローを再計算すべき点を判定する。

[270] を参照。またプロジェクトのサイトは http://graphics.berkeley.edu/papers/Tao-SAN-2012-05/

覚え書き
  • simpleFlow アルゴリズムを用いた例は samples/simpleflow_demo.cpp にある

◆ calcOpticalFlowSparseRLOF()

void cv::optflow::calcOpticalFlowSparseRLOF ( InputArray prevImg,
InputArray nextImg,
InputArray prevPts,
InputOutputArray nextPts,
OutputArray status,
OutputArray err,
Ptr< RLOFOpticalFlowParameter > rlofParam = PtrRLOFOpticalFlowParameter >(),
float forwardBackwardThreshold = 0 )
Python:
cv.optflow.calcOpticalFlowSparseRLOF(prevImg, nextImg, prevPts, nextPts[, status[, err[, rlofParam[, forwardBackwardThreshold]]]]) -> nextPts, status, err

#include <opencv2/optflow/rlofflow.hpp>

optflow::calcOpticalFlowPyrLK() と同様にロバストローカルオプティカルフロー (RLOF) を用いて、疎な特徴集合に対する高速なオプティカルフローを計算する。

RLOF は [244] [245] [246] および [247] で説明されている高速なローカルオプティカルフロー手法であり、[38] で提案されたピラミッド型反復 Lucas-Kanade 法に類似している。さらに詳細と実験は次の学位論文 [248] にある。実装は optflow::calcOpticalFlowPyrLK() から派生している。

引数
prevImg1枚目の 8 ビット入力画像。クロスベースの RLOF を使用する場合( optflow::RLOFOpticalFlowParameter::supportRegionType = SupportRegionType::SR_CROSS を選択した場合)、画像は 8 ビット 3 チャンネル画像でなければならない。
nextImg2枚目の 8 ビット入力画像。クロスベースの RLOF を使用する場合( optflow::RLOFOpticalFlowParameter::supportRegionType = SupportRegionType::SR_CROSS を選択した場合)、画像は 8 ビット 3 チャンネル画像でなければならない。
prevPtsフローを求める対象となる 2D 点のベクトル。点の座標は単精度浮動小数点数でなければならない。
nextPts2枚目の画像における入力特徴の計算された新しい位置を含む、2D 点(単精度浮動小数点座標を持つ)の出力ベクトル。optflow::RLOFOpticalFlowParameter::useInitialFlow 変数が true の場合、このベクトルは入力と同じサイズを持ち、初期化用の点の対応関係を含んでいなければならない。
status出力ステータスベクトル(unsigned char型)。対応する特徴のフローがforward-backwardチェックを通過した場合、ベクトルの各要素は1に設定される。
err出力誤差ベクトル。ベクトルの各要素には、対応する特徴のforward-backward誤差が設定される。
rlofParamoptflow::RLOFOpticalFlowParameter を参照。
forwardBackwardThresholdforward-backward信頼度チェックのしきい値。forewardBackwardThreshold <=0 の場合、forward
覚え書き
SIMD による並列化は SSE4.1 でコンパイルした場合のみ利用できる。

引数は [244], [245], [246] および [247] で説明されている。RLOF の設定については、さらに詳しくは optflow::RLOFOpticalFlowParameter を参照。

◆ calcOpticalFlowSparseToDense()

void cv::optflow::calcOpticalFlowSparseToDense ( InputArray from,
InputArray to,
OutputArray flow,
int grid_step = 8,
int k = 128,
float sigma = 0.05f,
bool use_post_proc = true,
float fgs_lambda = 500.0f,
float fgs_sigma = 1.5f )
Python:
cv.optflow.calcOpticalFlowSparseToDense(from_, to[, flow[, grid_step[, k[, sigma[, use_post_proc[, fgs_lambda[, fgs_sigma]]]]]]]) -> flow

#include <opencv2/optflow.hpp>

PyrLK の疎なマッチングの補間に基づく高速な密なオプティカルフロー。

引数
from1枚目の8ビット3チャンネルまたは1チャンネル画像。
tofrom と同じサイズの2枚目の8ビット3チャンネルまたは1チャンネル画像。
flowfrom と同じサイズで CV_32FC2 型の計算されたフロー画像。
grid_stepスパースマッチ計算で使用するストライド。値を小さくすると通常は品質が向上するが、アルゴリズムの速度は低下する。
k局所的なアフィンモデルをフィッティングする際に考慮する最近傍マッチの数。値を小さくすると、多少の品質低下と引き換えにアルゴリズムを顕著に高速化できる。
sigma局所重み付きアフィンフィッティングにおいて重みがどれだけ速く減少するかを定義する引数。値を大きくすると細部の保持に役立ち、値を小さくすると出力フローのノイズ除去に役立つ。
use_post_proc補間後の後処理として ximgproc::fastGlobalSmootherFilter() を使用するかどうかを定義する。
fgs_lambdaximgproc::fastGlobalSmootherFilter() の対応する引数を参照。
fgs_sigmaximgproc::fastGlobalSmootherFilter() の対応する引数を参照。

◆ createOptFlow_DeepFlow()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_DeepFlow ( )
Python:
cv.optflow.createOptFlow_DeepFlow() -> retval

#include <opencv2/optflow.hpp>

DeepFlow オプティカルフローアルゴリズムの実装。

このクラスは [301] で説明されている DeepFlow オプティカルフローアルゴリズムを実装している。http://lear.inrialpes.fr/src/deepmatching/ も参照。クラスインスタンスを作成した後に変更できる引数 (クラスのフィールド)。

  • member float alpha 平滑性仮定の重み
  • member float delta 色の恒常性仮定の重み
  • member float gamma 勾配の恒常性の重み
  • member float sigma ガウシアン平滑化の引数
  • member int minSize ピラミッド内の画像の最小の次元 (ピラミッド内の次の、より小さい画像が、いずれかの次元がこのサイズに達するまで生成される)
  • member float downscaleFactor 画像ピラミッドのスケーリング係数 (< 1 でなければならない)
  • member int fixedPointIterations ピラミッドの各レベルでの反復回数
  • member int sorIterations 逐次過緩和法 (ソルバー) の反復回数
  • member float omega SOR における緩和係数

◆ createOptFlow_DenseRLOF()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_DenseRLOF ( )
Python:
cv.optflow.createOptFlow_DenseRLOF() -> retval

#include <opencv2/optflow/rlofflow.hpp>

密な RLOF アルゴリズムへの追加インターフェース - optflow::calcOpticalFlowDenseRLOF()

◆ createOptFlow_DualTVL1()

Ptr< DualTVL1OpticalFlow > cv::optflow::createOptFlow_DualTVL1 ( )
Python:
cv.optflow.createOptFlow_DualTVL1() -> retval

#include <opencv2/optflow.hpp>

cv::DenseOpticalFlow のインスタンスを作成する。

◆ createOptFlow_Farneback()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_Farneback ( )
Python:
cv.optflow.createOptFlow_Farneback() -> retval

#include <opencv2/optflow.hpp>

Farneback のアルゴリズムへの追加インターフェース - calcOpticalFlowFarneback()

◆ createOptFlow_PCAFlow()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_PCAFlow ( )
Python:
cv.optflow.createOptFlow_PCAFlow() -> retval

#include <opencv2/optflow/pcaflow.hpp>

PCAFlow のインスタンスを作成する。

◆ createOptFlow_SimpleFlow()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_SimpleFlow ( )
Python:
cv.optflow.createOptFlow_SimpleFlow() -> retval

#include <opencv2/optflow.hpp>

SimpleFlow アルゴリズムへの追加インターフェース - calcOpticalFlowSF()

◆ createOptFlow_SparseRLOF()

Ptr< SparseOpticalFlow > cv::optflow::createOptFlow_SparseRLOF ( )
Python:
cv.optflow.createOptFlow_SparseRLOF() -> retval

#include <opencv2/optflow/rlofflow.hpp>

疎な RLOF アルゴリズムへの追加インターフェース - optflow::calcOpticalFlowSparseRLOF()

◆ createOptFlow_SparseToDense()

Ptr< DenseOpticalFlow > cv::optflow::createOptFlow_SparseToDense ( )
Python:
cv.optflow.createOptFlow_SparseToDense() -> retval

#include <opencv2/optflow.hpp>

SparseToDenseFlow アルゴリズムへの追加インターフェース - calcOpticalFlowSparseToDense()

◆ findCorrespondences()

template<int T>
void cv::optflow::GPCForest< T >::findCorrespondences ( InputArray imgFrom,
InputArray imgTo,
std::vector< std::pair< Point2i, Point2i > > & corr,
const GPCMatchingParams params = GPCMatchingParams() ) const

#include <opencv2/optflow/sparse_matching_gpc.hpp>

2枚の画像間の対応点を見つける。

引数
[in]imgFromシーケンス内の1枚目の画像。
[in]imgToシーケンス内の2枚目の画像。
[out]corr対応する点のペアを格納した出力ベクトル。
[in]params微調整のための追加マッチングパラメータ。
この関数の呼び出しグラフ:

◆ segmentMotion()

void cv::motempl::segmentMotion ( InputArray mhi,
OutputArray segmask,
std::vector< Rect > & boundingRects,
double timestamp,
double segThresh )
Python:
cv.motempl.segmentMotion(mhi, timestamp, segThresh[, segmask]) -> segmask, boundingRects

#include <opencv2/optflow/motempl.hpp>

モーション履歴画像を、独立した個別の動き (例えば左手、右手) に対応するいくつかの部分に分割する。

引数
mhiモーション履歴画像 (motion history image)。
segmask検出されたマスクを格納する画像。シングルチャンネル、32ビット浮動小数点。
boundingRectsモーションが連結した成分のROIを格納するベクトル。
timestamp現在の時刻(ミリ秒またはその他の単位)。
segThreshセグメンテーションのしきい値。モーション履歴の「ステップ」の間隔と等しいか、それ以上にすることが推奨される。

この関数はすべての動きセグメントを見つけ、それらを segmask に個別の値 (1,2,...) で印付ける。また、動きの連結成分の ROI を要素とするベクトルも計算する。その後、抽出された特定成分のマスクを用いて calcGlobalOrientation で各成分の動きの方向を計算できる。

◆ updateMotionHistory()

void cv::motempl::updateMotionHistory ( InputArray silhouette,
InputOutputArray mhi,
double timestamp,
double duration )
Python:
cv.motempl.updateMotionHistory(silhouette, mhi, timestamp, duration) -> mhi

#include <opencv2/optflow/motempl.hpp>

移動するシルエットによってモーション履歴画像を更新する。

引数
silhouetteモーションが発生した箇所に非ゼロのピクセルを持つシルエットマスク。
mhiこの関数によって更新されるモーション履歴画像(シングルチャンネル、32ビット浮動小数点)。
timestamp現在の時刻(ミリ秒またはその他の単位)。
durationモーショントラックの最大持続時間。単位は timestamp と同じ。

この関数はモーション履歴画像を次のように更新する。

\[\texttt{mhi} (x,y)= \forkthree{\texttt{timestamp}}{if \(\texttt{silhouette}(x,y) \ne 0\)}{0}{if \(\texttt{silhouette}(x,y) = 0\) and \(\texttt{mhi} < (\texttt{timestamp} - \texttt{duration})\)}{\texttt{mhi}(x,y)}{otherwise}\]

つまり、動きが発生した MHI のピクセルは現在のタイムスタンプに設定され、最後に動きがあったのがかなり前であるピクセルはクリアされる。

この関数は calcMotionGradient および calcGlobalOrientation とともに、[69] および [40] で説明されているモーションテンプレート技術を実装している。