CV リファレンス マニュアル
-
画像処理(Image Processing)
- 勾配,エッジ,コーナー(Gradients, Edges and Corners)
- サンプリング,補間,幾何変換(Sampling, Interpolation and Geometrical Transforms)
- モルフォロジー演算(Morphological Operations)
- フィルタと色変換(Filters and Color Conversion)
- ピラミッドとその応用(Pyramids and the Applications)
- 画像分割,領域結合,輪郭検出(Image Segmentation, Connected Components and Contour Retrieval)
- 画像と形状のモーメント(Image and Contour Moments)
- 特殊な画像変換(Special Image Transforms)
- ヒストグラム(Histograms)
- マッチング(Matching)
- 構造解析(Structural Analysis)
- モーション解析と物体追跡(Motion Analysis and Object Tracking)
- パターン認識(Pattern Recognition)
- カメラキャリブレーションと3次元再構成(Camera Calibration and 3D Reconstruction)
- 参考文献
モーション解析と物体追跡(Motion Analysis and Object Tracking)
オプティカルフロー(Optical Flow)
CalcOpticalFlowHS
二つの画像に対するオプティカルフローを計算する
void cvCalcOpticalFlowHS( const CvArr* prev, const CvArr* curr, int use_previous,
CvArr* velx, CvArr* vely, double lambda,
CvTermCriteria criteria );
- prev
- 1番目の画像,8 ビット,シングルチャンネル.
- curr
- 2番目の画像,8 ビット,シングルチャンネル.
- use_previous
- 前の(入力)速度場を用いる.
- velx
- 入力画像と同じサイズのオプティカルフローの水平成分,32 ビット浮動小数点型,シングルチャンネル.
- vely
- 入力画像と同じサイズのオプティカルフローの垂直成分,32 ビット浮動小数点型,シングルチャンネル.
- lambda
- ラグランジュ乗数.
- criteria
- 速度計算の終了条件.
関数 cvCalcOpticalFlowHS は,Horn & Schunck アルゴリズム [Horn81] を用いて, 1番目の入力画像の全ピクセルに対するフローを,2番目の画像を参照して計算する.
CalcOpticalFlowLK
二つの画像に対するオプティカルフローを計算する
void cvCalcOpticalFlowLK( const CvArr* prev, const CvArr* curr, CvSize win_size,
CvArr* velx, CvArr* vely );
- prev
- 1番目の画像,8 ビット,シングルチャンネル.
- curr
- 2番目の画像,8 ビット,シングルチャンネル.
- win_size
- ピクセルをグループ化するために用いられる平均化ウィンドウのサイズ.
- velx
- 入力画像と同じサイズのオプティカルフローの水平成分,32 ビット浮動小数点型,シングルチャンネル.
- vely
- 入力画像と同じサイズのオプティカルフローの垂直成分,32 ビット浮動小数点型,シングルチャンネル.
関数 cvCalcOpticalFlowHS は,Lucas & Kanade アルゴリズム [Lucas81] を用いて,1番目の入力画像の全ピクセルに対するフローを,2番目の画像を参照して計算する.
CalcOpticalFlowBM
二つの画像に対するオプティカルフローをブロックマッチング法を用いて計算する
void cvCalcOpticalFlowBM( const CvArr* prev, const CvArr* curr, CvSize block_size,
CvSize shift_size, CvSize max_range, int use_previous,
CvArr* velx, CvArr* vely );
- prev
- 1番目の画像,8 ビット,シングルチャンネル.
- curr
- 2番目の画像,8 ビット,シングルチャンネル.
- block_size
- 比較対象となる基本ブロックのサイズ.
- shift_size
- ブロック座標の増加量.
- max_range
- 走査対象となるブロックの近傍領域.ピクセル単位.
- use_previous
- 前の(入力)速度場を用いる.
- velx
- 以下のオプティカルフローの水平成分
ceil(prev->width/block_size.width)×ceil(prev->height/block_size.height) のサイズ, 32 ビット浮動小数点型,シングルチャンネル. - vely
- velx と同一サイズ,32 ビット浮動小数点型,シングルチャンネルのオプティカルフローの垂直成分.
関数 cvCalcOpticalFlowBM は,重なり合ったblock_size.width×block_size.heightピクセルのブロック毎にオプティカルフローを計算する.従って,その速度場は元画像よりも小さくなる. この関数は,prev のそれぞれのブロックに対して, curr から似ているブロックを探そうとする その探索範囲は,元のブロックの近傍か,あるいは,前回呼ばれた関数によって計算された (velx(x0,y0),vely(x0,y0)) だけシフトしたブロックの近傍 (use_previous=1 の場合)である.
CalcOpticalFlowPyrLK
Lucas-Kanade法を用いた画像ピラミッドでの反復を利用し,疎な特徴に対するオプティカルフローを計算する
void cvCalcOpticalFlowPyrLK( const CvArr* prev, const CvArr* curr, CvArr* prev_pyr, CvArr* curr_pyr,
const CvPoint2D32f* prev_features, CvPoint2D32f* curr_features,
int count, CvSize win_size, int level, char* status,
float* track_error, CvTermCriteria criteria, int flags );
- prev
- 1番目のフレーム(時間 t)
- curr
- 2番目のフレーム(時間 t + dt)
- prev_pyr
- 最初の画像に対するピラミッドのバッファ.これが NULL でない場合は,このバッファは,レベル 1 からレベル#level までのピラミッドを格納するのに十分なサイズでなければならない. (image_width+8)*image_height/3 バイトの合計が十分なサイズとなる.
- curr_pyr
- prev_pyr と同様に,2番目のフレームに対して用いられる.
- prev_features
- フローを検出するのに必要な点の配列.
- curr_features
- 2次元の点の配列.2番目の画像(フレーム)中の入力特徴の新たな位置が計算され,ここに格納される.
- count
- 特徴点の数.
- win_size
- 各ピラミッドレベルでの探索ウィンドウのサイズ.
- level
- ピラミッドレベルの最大値.0 の場合はピラミッドは用いられない(シングルレベル).1 の場合はレベル 2 となる.
- status
- 配列.特徴に対応するフローが見つかった場合に,配列の各要素 が 1 にセットされる.そうでない場合は0 になる.
- track_error
- 移動前の点と移動後の点の周辺領域の差(誤差)を含む倍精度型の配列.オプションパラメータ(NULL も取りうる).
- criteria
- 各ピラミッドの各点に対するフローを検出する繰り返し計算の終了条件.
- flags
- 雑多なフラグ.
- CV_LKFLOW_PYR_A_READY 1番目のフレームに対するピラミッドが事前に計算される.
- CV_LKFLOW_PYR_B_READY 2番目のフレームに対するピラミッドが事前に計算される.
- CV_LKFLOW_INITIAL_GUESSES この関数呼び出し以前に,配列 curr_featuresは特徴の初期座標を持つ.
関数 cvCalcOpticalFlowPyrLK は, Lucas-Kanade オプティカルフローの, ピラミッドを用いて疎な特徴に対応した反復バージョン([Bouguet00])の実装である.前フレームにおける特徴点の座標が与えられた場合に,現在のフレームにおける特徴点の座標が計算される.座標はサブピクセル精度で検出される.
パラメータ prev_pyr と curr_pyrは以下の規則に従う.画像ポインタが 0 の場合,関数は内部バッファを確保し,ピラミッドを計算した後にバッファを解放する. 画像ポインタが 0 以外の場合,CV_LKFLOW_PYR_A[B]_READY がセットされている場合を除いて,関数はピラミッドを計算し,それをバッファ内部に保持する. 画像はガウシアンピラミッドデータに対して十分な大きさを持つべきである. 関数呼び出しの後,両方のピラミッドが計算され,次の呼び出しで対応する画像の準備フラグがセットされる (つまり通常は,1回目の関数呼び出し以外のすべての画像ペアに対する関数呼び出しにおいて CV_LKFLOW_PYR_A_READY がセットされる).