OpenCV 4.5.3(日本語機械翻訳)
クラス | 列挙型 | 関数
Object Tracking

クラス

class cv::KalmanFilter
カルマンフィルタクラス.[【詳解】(英語]
class cv::DenseOpticalFlow
class cv::SparseOpticalFlow
疎なオプティカルフローアルゴリズムの基本インターフェース.[【詳解】(英語]
class cv::FarnebackOpticalFlow
Gunnar Farnebackのアルゴリズムを用いた高密度オプティカルフローの計算クラス[【詳解】(英語]
class cv::VariationalRefinement
変分的オプティカルフロー精密化[【詳解】(英語]
class cv::DISOpticalFlow
DISオプティカルフローアルゴリズム。[【詳解】(英語]
class cv::SparsePyrLKOpticalFlow
疎なオプティカルフローを計算するためのクラス.[【詳解】(英語]
class cv::Tracker
長期トラッカーのベースとなる抽象クラス[【詳解】(英語]
class cv::TrackerMIL
MILアルゴリズムは,オンラインで分類器を学習し,物体と背景を分離する.[【詳解】(英語]
class cv::TrackerGOTURN
GOTURN (Generic Object Tracking Using Regression Networks) トラッカー[【詳解】(英語]
class cv::TrackerDaSiamRPN

列挙型

enum { OPTFLOW_USE_INITIAL_FLOW = 4 , OPTFLOW_LK_GET_MIN_EIGENVALS = 8 , OPTFLOW_FARNEBACK_GAUSSIAN = 256 }
enum { MOTION_TRANSLATION = 0 , MOTION_EUCLIDEAN = 1 , MOTION_AFFINE = 2 , MOTION_HOMOGRAPHY = 3 }

関数

CV_EXPORTS_W RotatedRect cv::CamShift (InputArray probImage, CV_IN_OUT Rect &window, TermCriteria criteria)
オブジェクトの中心,大きさ,向きを検出します.[【詳解】(英語]
CV_EXPORTS_W int cv::meanShift (InputArray probImage, CV_IN_OUT Rect &window, TermCriteria criteria)
バックプロジェクション画像上のオブジェクトを検出します.[【詳解】(英語]
CV_EXPORTS_W int cv::buildOpticalFlowPyramid (InputArray img, OutputArrayOfArrays pyramid, Size winSize, int maxLevel, bool withDerivatives=true, int pyrBorder=BORDER_REFLECT_101, int derivBorder=BORDER_CONSTANT, bool tryReuseInputImage=true)
calcOpticalFlowPyrLKに渡すことができる画像ピラミッドを構築します。[【詳解】(英語]
CV_EXPORTS_W void cv::calcOpticalFlowPyrLK (InputArray prevImg, InputArray nextImg, InputArray prevPts, InputOutputArray nextPts, OutputArray status, OutputArray err, Size winSize=Size(21, 21), int maxLevel=3, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01), int flags=0, double minEigThreshold=1e-4)
ピラミッドを用いた反復ルーカス-カナード法を用いて,疎な特徴セットのオプティカルフローを計算します.[【詳解】(英語]
CV_EXPORTS_W void cv::calcOpticalFlowFarneback (InputArray prev, InputArray next, InputOutputArray flow, double pyr_scale, int levels, int winsize, int iterations, int poly_n, double poly_sigma, int flags)
Gunnar Farnebackのアルゴリズムを用いて,密なオプティカルフローを計算します.[【詳解】(英語]
CV_DEPRECATED CV_EXPORTS Mat cv::estimateRigidTransform (InputArray src, InputArray dst, bool fullAffine)
2つの2Dポイントセット間の最適なアフィン変換を計算します。[【詳解】(英語]
CV_EXPORTS_W double cv::computeECC (InputArray templateImage, InputArray inputImage, InputArray inputMask=noArray())
2つの画像間の強化相関係数の値を計算する[EP08]..[【詳解】(英語]
CV_EXPORTS_W double cv::findTransformECC (InputArray templateImage, InputArray inputImage, InputOutputArray warpMatrix, int motionType, TermCriteria criteria, InputArray inputMask, int gaussFiltSize)
2つの画像間の幾何学的変換(ワープ)を,ECC基準に基づいて求めます.[EP08]..[【詳解】(英語]
CV_EXPORTS_W double cv::findTransformECC (InputArray templateImage, InputArray inputImage, InputOutputArray warpMatrix, int motionType=MOTION_AFFINE, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 50, 0.001), InputArray inputMask=noArray())
CV_EXPORTS_W Mat cv::readOpticalFlow (const String &path)
.floファイルの読み込み[【詳解】(英語]
CV_EXPORTS_W bool cv::writeOpticalFlow (const String &path, InputArray flow)
.floをディスクに書き込む[【詳解】(英語]

詳解

関数詳解

buildOpticalFlowPyramid()

CV_EXPORTS_W int cv::buildOpticalFlowPyramid ( InputArray img,
OutputArrayOfArrays pyramid,
Size winSize,
int maxLevel,
bool withDerivatives = true,
int pyrBorder = BORDER_REFLECT_101 ,
int derivBorder = BORDER_CONSTANT ,
bool tryReuseInputImage = true
)

calcOpticalFlowPyrLKに渡すことができる画像ピラミッドを構築します。

引数
img 8ビットの入力画像。
pyramid ピラミッドを出力します.
winSize オプティカルフローアルゴリズムのウィンドウサイズ.calcOpticalFlowPyrLKの引数winSize以上である必要があります。ピラミッドのレベルに必要なパディングを計算するために必要です。
maxLevel ピラミッドレベルの最大値を0ベースで指定します。
withDerivatives ピラミッドの各レベルのグラデーションを事前に計算するように設定します。グラデーションを使わずにピラミッドを構築した場合は、 calcOpticalFlowPyrLK が内部でグラデーションを計算します。
pyrBorder ピラミッドのレイヤーの境界線モード。
derivBorder グラデーションのボーダーモードです。
tryReuseInputImage 可能であれば,入力画像のROIをピラミッドの中に入れます.falseを渡せば、データのコピーを強制することができます。
戻り値
構築されるピラミッドのレベル数.maxLevelより小さくても構いません.

calcOpticalFlowFarneback()

CV_EXPORTS_W void cv::calcOpticalFlowFarneback ( InputArray prev,
InputArray next,
InputOutputArray flow,
double pyr_scale,
int levels,
int winsize,
int iterations,
int poly_n,
double poly_sigma,
int flags
)

Gunnar Farnebackのアルゴリズムを用いて,密なオプティカルフローを計算します.

引数
prev 8ビットシングルチャンネルの1枚目の入力画像.
next 前の画像と同じサイズ,同じ種類の「2番目の入力画像」.
flow 前の画像と同じサイズで,タイプが CV_32FC2 である,計算されたフロー画像.
pyr_scale pyr_scale=0.5 は古典的なピラミッドを意味し、次の層は前の層よりも2倍小さくなります。
levels 最初の画像を含めたピラミッドの層の数; levels=1 は余分な層を作らず、元の画像のみを使用することを意味します。
winsize 平均化ウィンドウのサイズ:この値を大きくすると、画像のノイズに対するアルゴリズムのロバスト性が高まり、高速な動き検出のチャンスが増えますが、動きのあるフィールドがよりぼやけてしまいます。
iterations ピラミッドの各レベルでアルゴリズムが行う反復の数。
poly_n この値が大きいほど、画像はより滑らかな表面で近似され、よりロバストなアルゴリズムが得られ、よりぼやけたモーションフィールドが得られます。
poly_sigma poly_n=5の場合はpoly_sigma=1.1、poly_n=7の場合はpoly_sigma=1.5とするのが良いでしょう。
flags 操作フラグは、以下の組み合わせが可能です。
  • optflow_use_initial_flow入力フローを初期フローの近似値として使用します。
  • optflow_farneback_gaussianのボックスフィルターの代わりにガウシアン$\texttt{winsize}\times\texttt{winsize}$通常,このオプションでは,速度は低下するものの,ボックスフィルタよりも正確なフローが得られます.通常,同じレベルのロバスト性を得るためには,ガウス窓の winsize をより大きな値に設定する必要があります.

この関数は,各 prev ピクセルに対するオプティカルフローを[Farneback2003]アルゴリズムを用いて,次のように求めます.

\[\texttt{prev} (y,x) \sim \texttt{next} ( y + \texttt{flow} (y,x)[1], x + \texttt{flow} (y,x)[0])\]

覚え書き
  • Gunnar Farneback によって記述されたオプティカルフローアルゴリズムを利用した例は, opencv_source_code/samples/cpp/fback.cpp にあります.
  • (Python) Gunnar Farneback 氏のオプティカルフローアルゴリズムを使用した例は、opencv_source_code/samples/python/opt_flow.py にあります。

calcOpticalFlowPyrLK()

CV_EXPORTS_W void cv::calcOpticalFlowPyrLK ( InputArray prevImg,
InputArray nextImg,
InputArray prevPts,
InputOutputArray nextPts,
OutputArray status,
OutputArray err,
Size winSize = Size(21, 21),
int maxLevel = 3,
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01),
int flags = 0,
double minEigThreshold = 1e-4
)

ピラミッドを用いた反復ルーカス-カナード法を用いて,疎な特徴セットのオプティカルフローを計算します.

引数
prevImg buildOpticalFlowPyramidによって構築された8ビットの1番目の入力画像またはピラミッド。
nextImg prevImg と同じサイズ、同じタイプの2番目の入力画像またはピラミッド
prevPts フローを求める2次元点のベクトル.点の座標は,単精度浮動小数点数でなければなりません.
nextPts OPTFLOW_USE_INITIAL_FLOW フラグが渡された場合、このベクトルは入力と同じサイズでなければなりません。
status output status vector (of unsigned chars); ベクトルの各要素は、対応する特徴量に対するフローが見つかった場合は1に、そうでない場合は0に設定される。
err ベクトルの各要素には,対応する特徴のエラーが設定されます.エラー指標のタイプは flags パラメータで設定できます.
winSize 各ピラミッドレベルでの検索窓の大きさを指定します。
maxLevel 0ベースの最大ピラミッドレベル数; 0に設定された場合、ピラミッドは使用されず(1レベル)、1に設定された場合、2レベルが使用され、以下同様です; 入力にピラミッドが渡された場合、アルゴリズムはピラミッドが持つレベルの数だけ使用しますが、maxLevelを超えることはありません。
criteria パラメーター:反復検索アルゴリズムの終了基準を指定します(指定された最大反復回数 criteria.maxCount の後、あるいは検索窓の移動量が criteria.epsilon より小さくなったとき)。
flags 演算フラグ。
  • optflow_use_initial_flowは、nextPts に格納されている初期推定値を使用します。フラグが設定されていない場合、prevPts は nextPts にコピーされ、初期推定値とみなされます。
  • optflow_lk_get_min_eigenvalsエラー指標として最小固有値を使用します(minEigThreshold の説明を参照)。L1フラグがセットされていない場合は、オリジナルと移動した点の周りのパッチ間の距離を、ウィンドウ内のピクセル数で割った値が誤差の尺度として使われます。
minEigThreshold このアルゴリズムは,オプティカルフロー方程式の2x2正規行列(この行列は,以下では空間勾配行列と呼ばれます)の最小固有値を,ウィンドウ内のピクセル数で割って計算します.[Bouguet00].この値が minEigThreshold よりも小さい場合,対応する特徴はフィルタリングされ,そのフローは処理されないので,悪い点を削除して性能を向上させることができます.

この関数は,Lucas-Canade オプティカルフローの疎な反復版をピラミッド型に実装したものです.参照[Bouguet00].. この関数は,TBBライブラリを用いて並列化されています.

覚え書き
  • ルーカス-カナードオプティカルフローアルゴリズムを用いた例は,opencv_source_code/samples/cpp/lkdemo.cpp にあります.
  • (Python) Lucas-Canade オプティカルフローアルゴリズムを用いた例は opencv_source_code/samples/python/lk_track.py にあります。
  • (Python) Lucas-Kanade トラッカーを用いたホモグラフィーマッチングの例は、opencv_source_code/samples/python/lk_homography.py にあります。

CamShift()

CV_EXPORTS_W RotatedRect cv::CamShift ( InputArray probImage,
CV_IN_OUT Rect & window,
TermCriteria criteria
)

オブジェクトの中心,大きさ,向きを検出します.

引数
probImage オブジェクトのヒストグラムをバックプロジェクションします。calcBackProjectを参照してください。
window 初期検索ウィンドウ。
criteria meanShiftの停止基準. 戻り値(古いインターフェースで) CAMSHIFTが収束するまでに要した反復回数. この関数は,CAMSHIFTオブジェクト追跡アルゴリズムを実装しています[Bradski98].. まず,meanShift を利用してオブジェクトの中心を見つけ,次にウィンドウサイズを調整し,最適な回転を見つけます.この関数は,オブジェクトの位置,サイズ,向きを含む,回転した矩形構造を返します.探索窓の次の位置は,次のようにして得ることができます.RotatedRect::boundingRect()

色付きのオブジェクトを追跡するOpenCVのサンプル camshiftdemo.c を参照してください.

覚え書き
  • (Python) camshiftトラッキングアルゴリズムを説明するサンプルは, opencv_source_code/samples/python/camshift.py にあります.

computeECC()

CV_EXPORTS_W double cv::computeECC ( InputArray templateImage,
InputArray inputImage,
InputArray inputMask = noArray()
)

2つの画像間の強化相関係数の値を計算する[EP08]..

引数
templateImage シングルチャンネルのテンプレート画像.CV_8U または CV_32F の配列.
inputImage templateImage と同じ型で,templateImage に似た画像を得るためにワープされるシングルチャンネルの入力画像.
inputMask inputImage の有効な値を示す,オプションのマスク.
参照
findTransformECC

estimateRigidTransform()

CV_DEPRECATED CV_EXPORTS Mat cv::estimateRigidTransform ( InputArray src,
InputArray dst,
bool fullAffine
)

2つの2Dポイントセット間の最適なアフィン変換を計算します。

引数
src std::vector に格納された最初の入力2次元点群,またはMatに格納された画像、またはMat.
dst Aと同じサイズ,同じ型の2次元点群,あるいは,別の画像.
fullAffine 真の場合,この関数は,追加の制限無しに最適なアフィン変換を見つけます(6つの自由度).そうでない場合,選択できる変換のクラスは,平行移動,回転,および一様なスケーリングの組み合わせに限られます(4自由度).

この関数は,最適なアフィン変換[A|b] はの間のアフィン変換を最もよく近似する,最適なアフィン変換 [A|b] (2 x 3 の浮動小数点型行列) を求めます.

Two point sets Two raster images. In this case, the function first finds some features in the src image and finds the corresponding features in dst image. After that, the problem is reduced to the first case.

点群の場合,この問題は次のように定式化されます:2x2 の行列Aと2x1ベクトルbを見つける必要があります.

\[[A^*|b^*] = arg \min _{[A|b]} \sum _i \| \texttt{dst}[i] - A { \texttt{src}[i]}^T - b \| ^2\]

ここで, src[i] と dst[i] は,それぞれ src と dst の i 番目の点です.$[A|b]$は,任意の値(fullAffine=true の場合)か,あるいは,次のような形式になります

\[\begin{bmatrix} a_{11} & a_{12} & b_1 \\ -a_{12} & a_{11} & b_2 \end{bmatrix}\]

fullAffine=false の場合は

非推奨:
を使用します。cv::estimateAffine2D,cv::estimateAffinePartial2Dを削除します。この関数を画像に対して使用する場合は,次のようにして点を抽出しますcv::calcOpticalFlowPyrLKを使って点を抽出し,次に推定関数を使います.
参照
estimateAffine2D,estimateAffinePartial2D,getAffineTransform,getPerspectiveTransform,findHomography

findTransformECC() [1/2]

CV_EXPORTS_W double cv::findTransformECC ( InputArray templateImage,
InputArray inputImage,
InputOutputArray warpMatrix,
int motionType,
TermCriteria criteria,
InputArray inputMask,
int gaussFiltSize
)

2つの画像間の幾何学的変換(ワープ)を,ECC基準に基づいて求めます.[EP08]..

引数
templateImage シングルチャンネルのテンプレート画像.CV_8U または CV_32F の配列.
inputImage templateImage に似た画像を得るために,最終的な warpMatrix を用いてワープされるべきシングルチャンネルの入力画像,templateImage と同じ型.
warpMatrix 浮動小数点$2\times 3$または$3\times 3$マッピング行列(warp).
motionType パラメータ.動きの種類を指定します.
  • MOTION_TRANSLATIONは,並進運動モデルを設定します.warpMatrix は$2\times 3$で、最初の$2\times 2$は最初の部分がユニティ行列で、残りの2つのパラメータが推定されます。
  • モーション_euclideanモーションモデルとしてユークリッド(剛体)変換を設定します。3 つのパラメータが推定され、 warpMatrix は$2\times 3$.
  • MOTION_AFFINEアフィンのモーションモデルを設定します(DEFAULT); 6 つのパラメータが推定されます; warpMatrix は$2\times 3$.
  • MOTION_HOMOGRAPHYモーションモデルとしてホモグラフィーを設定します.$3\times 3$.
criteria パラメータで,ECC アルゴリズムの終了基準を指定します.cliteria.epsilon は,2 回の反復の間の相関係数の増分のしきい値を定義します(cliteria.epsilon を負にすると,cliteria.maxcount が唯一の終了基準になります).デフォルト値は,上記の宣言に示されています.
inputMask inputImage の有効な値を示す,オプションのマスク.
gaussFiltSize ガウスぼかしフィルタのサイズを示すオプション値;(デフォルト:5).

この関数は,ECC基準( )に関する最適な変換( warpMatrix )を推定します.[EP08].)に関して,最適な変換(warpMatrix)を推定します.

\[\texttt{warpMatrix} = \arg\max_{W} \texttt{ECC}(\texttt{templateImage}(x,y),\texttt{inputImage}(x',y'))\]

ここで

\[\begin{bmatrix} x' \\ y' \end{bmatrix} = W \cdot \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}\]

(となります(この式は,ホモグラフィのための同次座標でも成立します).この関数は,最終的な拡張相関係数,つまり,テンプレート画像と最終的にワープされた入力画像の間の相関係数を返します.モーションタイプが$3\times 3$行列が motionType =0, 1, 2 で与えられた場合,3行目は無視されます.

findHomography や estimateRigidTransform とは異なり,関数 findTransformECC は,強度の類似性を利用したエリアベースの位置合わせを行います.要するに,この関数は,画像を大まかに整列させる初期変換を更新します.この情報が不足している場合は,初期化として identity warp(ユニティ行列)が利用されます.なお,画像が強い変位や回転を受ける場合は,画像を大まかに揃える初期変換が必要になります(例えば,画像の内容がほぼ同じになるような単純なユークリッド変換や類似性変換など).1枚目の画像に近い画像を得るために,2枚目の画像に逆ワープを利用します.つまり,フラグ WARP_INVERSE_MAP と warpAffine または warpPerspective を利用します.この関数の使用方法を示す OpenCV のサンプル image_alignment.cpp も参照してください.この関数は,アルゴリズムが収束しない場合に例外を投げることに注意してください.

参照
computeECC,estimateAffine2D,estimateAffinePartial2D,findHomography

findTransformECC() [2/2]

CV_EXPORTS_W double cv::findTransformECC ( InputArray templateImage,
InputArray inputImage,
InputOutputArray warpMatrix,
int motionType = MOTION_AFFINE,
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 50, 0.001),
InputArray inputMask = noArray()
)

これはオーバーロードされたメンバ関数です。利便性のために用意されています。元の関数との違いは引き数のみです。

meanShift()

CV_EXPORTS_W int cv::meanShift ( InputArray probImage,
CV_IN_OUT Rect & window,
TermCriteria criteria
)

バックプロジェクション画像上のオブジェクトを検出します.

引数
probImage オブジェクトのヒストグラムをバックプロジェクションします.詳細は, calcBackProject を参照してください.
window 初期検索ウィンドウ。
criteria 反復検索アルゴリズムの停止基準. returns : CAMSHIFT が収束するまでに要した反復回数.この関数は,反復型オブジェクト探索アルゴリズムを実装しています.この関数は,物体のバックプロジェクションと初期位置を入力とします.バックプロジェクション画像のウィンドウ内の質量中心が計算され,探索ウィンドウの中心が質量中心に移動します.この手順は、指定された反復回数 criteria.maxCount が終了するまで、または窓の中心が criteria.epsilon よりも小さくシフトするまで繰り返されます。このアルゴリズムはCamShiftの内部で使用されており、CamShiftとは異なり、探索中に探索窓のサイズや方向が変化することはありません。単純に calcBackProject の出力をこの関数に渡すことができます。しかし、バックプロジェクションを事前にフィルタリングしてノイズを除去すると、より良い結果が得られます。例えば,findContours で連結成分を検索し,面積の小さい輪郭 ( contourArea ) を捨て,残りの輪郭を drawContours で描画することで,これを行うことができます.

readOpticalFlow()

CV_EXPORTS_W Mat cv::readOpticalFlow ( const String & path )

.floファイルの読み込み

引数
path 読み込まれるファイルのパス

関数 readOpticalFlow は,ファイルからフローフィールドを読み込み,それを1つの行列として返します.演算結果Matの型は,CV_32FC2 - 浮動小数点型,2チャンネルです.1番目のチャンネルは,水平方向(u)の流れに対応し,2番目のチャンネルは,垂直方向(v)の流れに対応します.

writeOpticalFlow()

CV_EXPORTS_W bool cv::writeOpticalFlow ( const String & path,
InputArray flow
)

.floをディスクに書き込む

引数
path 書き込まれるファイルのパス
flow 格納されるフローフィールド

この関数は,フローフィールドをファイルに保存し,成功すれば true,そうでなければ false を返します。フローフィールドは,2チャンネル,浮動小数点型の行列(CV_32FC2)でなければいけません.1番目のチャンネルは水平方向(u)の流れに対応し,2番目のチャンネルは垂直方向(v)の流れに対応します.