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)
物体追跡(Object Tracking)
MeanShift
バックプロジェクションでのオブジェクトの中心を検出する
int cvMeanShift( const CvArr* prob_image, CvRect window,
CvTermCriteria criteria, CvConnectedComp* comp );
- prob_image
- オブジェクトヒストグラムのバックプロジェクション(cvCalcBackProject を参照).
- window
- 初期探索ウィンドウ.
- criteria
- ウィンドウ探索を終了するための条件.
- comp
- 結果として得られる構造体.収束した探索ウィンドウの座標(comp->rect フィールド),および ウィンドウ内の全ピクセルの合計値(comp->area フィールド)が含まれる.
関数 cvMeanShift は,オブジェクトのバックプロジェクションと探索ウィンドウの初期位置が与えられたときに,オブジェクトの中心を検出するための反復計算を行う. 反復計算は,探索ウィンドウ中心の動きが与えられた閾値より小さくなるか,あるいは関数の反復数が最大値に達するまで続けられる. この関数は反復数を返す.
CamShift
オブジェクト中心,サイズおよび姿勢を求める
int cvCamShift( const CvArr* prob_image, CvRect window, CvTermCriteria criteria,
CvConnectedComp* comp, CvBox2D* box=NULL );
- prob_image
- オブジェクトヒストグラムのバックプロジェクション (cvCalcBackProjectを参照).
- window
- 初期探索ウィンドウ.
- criteria
- 結果として得られる構造体.収束した探索ウィンドウの座標(comp->rect フィールド),およびウィンドウ内の全ピクセルの合計値(comp->area フィールド)が含まれる.
- box
- オブジェクトの外接矩形.NULLでない場合,オブジェクトのサイズと姿勢が含まれる.
関数 cvCamShift は, CAMSHIFT オブジェクトトラッキングアルゴリズム ([Bradski98])の実装である. まず,cvMeanShift を用いてオブジェクトの中心を検出し,次にオブジェクトのサイズと姿勢を計算する.この関数はcvMeanShift 内での反復数を返す.
cvaux.hpp で宣言されたクラス CvCamShiftTracker は,この関数を利用するカラーオブジェクトトラッカーの実装である.
SnakeImage
エネルギーが最小となるように輪郭位置を変化させる
void cvSnakeImage( const IplImage* image, CvPoint* points, int length,
float* alpha, float* beta, float* gamma, int coeff_usage,
CvSize win, CvTermCriteria criteria, int calc_gradient=1 );
- image
- 元画像あるいは,外部エネルギー場.
- points
- 輪郭点(snake).
- length
- 輪郭中の点数.
- alpha
- 連続エネルギーの重み.浮動小数点数 1つ,または length の長さを持つ浮動小数点型配列(各輪郭点に配列の各要素が対応).
- beta
- 曲率エネルギーの重み.alpha と同様.
- gamma
- 画像エネルギーの重み.alpha と同様.
- coeff_usage
- 前述の 3 つのパラメータの使用方法を表す変数.
- CV_VALUEの場合,alpha, beta, gamma は, 全ての点に対して用いられる単一の値へのポインタを示す.
- CV_ARRAYの場合,alpha, beta, gamma は, snake の全ての点に対して異なる係数となる配列へのポインタを示す. 全ての配列は,輪郭のサイズと同じサイズでなければならない.
- win
- 最小値を探索する各点の近傍のサイズ. win.width と win.height は奇数でなければならない.
- criteria
- 終了条件.
- calc_gradient
- 勾配フラグ.0 でない場合,この関数は全ての画像ピクセルに対する勾配の強さを計算し,これをエネルギー場と見なす. 0 の場合は,入力画像自体がエネルギー場と見なされる.
関数 cvSnakeImage は,内部エネルギーと外部エネルギーの総和が最小になるように snake を更新する. 内部エネルギーは輪郭形状に依存する(滑らかな輪郭ほど内部エネルギーが小さい).外部エネルギーはエネルギー場に依存し,画像勾配の場合は画像のエッジに対応するような局所的なエネルギー極小値において最小になる.
パラメータ criteria.epsilon は,反復処理を継続するために必要な移動点の最小数の定義に用いられる.
ある反復回において,移動点の数が criteria.epsilon よりも小さい場合,または関数が criteria.max_iter 回繰り返された場合,この関数は終了する.