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)
- 背景統計量の累積(Accumulation of Background Statistics)
- モーションテンプレート(Motion Templates)
- 物体追跡(Object Tracking)
- オプティカルフロー(Optical Flow)
- 推定器(Estimators)
- パターン認識(Pattern Recognition)
- カメラキャリブレーションと3次元再構成(Camera Calibration and 3D Reconstruction)
- 参考文献
モーション解析と物体追跡(Motion Analysis and Object Tracking)
モーションテンプレート(Motion Templates)
UpdateMotionHistory
動きを表すシルエット画像を用いてモーション履歴画像を更新する
void cvUpdateMotionHistory( const CvArr* silhouette, CvArr* mhi,
double timestamp, double duration );
- silhouette
- モーションが発生した場所が 0 以外のピクセル値をもつシルエットマスク.
- mhi
- 関数によって更新される,モーション履歴画像(シングルチャンネル,32 ビット浮動小数点型).
- timestamp
- ミリ秒単位,あるはその他の単位で表される現在時間.
- duration
- timestamp と同じ時間単位で表される,モーション軌跡の最大保持時間.
関数 cvUpdateMotionHistory は,モーション履歴画像を以下のように更新する.
mhi(x,y)=timestamp silhouette(x,y)!=0の場合 0 silhouette(x,y)=0 かつ mhi(x,y)<timestamp-durationの場合 mhi(x,y) それ以外の場合
つまり,モーションが発生している場所の MHI のピクセルには現在の timestamp がセットされ,ある程度以上昔ににモーションが発生した場所のピクセルはクリアされる.
CalcMotionGradient
モーション履歴画像の勾配方向を計算する
void cvCalcMotionGradient( const CvArr* mhi, CvArr* mask, CvArr* orientation,
double delta1, double delta2, int aperture_size=3 );
- mhi
- モーション履歴画像.
- mask
- マスク画像.モーション勾配方向として有効なピクセルがマーキングされているマスク.出力パラメータ.
- orientation
- モーション勾配方向画像.値は0~360°の角度値.
- delta1, delta2
- この関数は,各ピクセル (x,y) の近傍における 最小 (m(x,y)) および 最大 (M(x,y))の mhi 値を見つけ,次の条件を満たす場合にのみ,その勾配が有効であると仮定する.
min(delta1,delta2) <= M(x,y)-m(x,y) <= max(delta1,delta2).
- aperture_size
- この関数で用いられるいられる微分オペレータのアパーチャサイズ: CV_SCHARR, 1, 3, 5 または 7 (cvSobel を参照).
関数 cvCalcMotionGradient は, mhi の微分値 Dx および Dy を計算し,勾配方向を次のように求める:
orientation(x,y)=arctan(Dy(x,y)/Dx(x,y))
ここでは,Dx(x,y)' と Dy(x,y)' の両方の符号が考慮されている(関数 cvCartToPolar 内でも同様である).そしてその方向が有効である場所を示すために mask が埋められる (delta1 と delta2 の説明を参照).
CalcGlobalOrientation
選択された複数の領域の全体的なモーション方向を計算する
double cvCalcGlobalOrientation( const CvArr* orientation, const CvArr* mask, const CvArr* mhi,
double timestamp, double duration );
- orientation
- モーション勾配方向画像.関数 cvCalcMotionGradient によって計算されている.
- mask
- マスク画像.cvCalcMotionGradient によって得られる有効な勾配マスクと,方向を計算する必要がある領域を示すマスクの共通部分.
- mhi
- モーション履歴画像.
- timestamp
- ミリ秒単位,あるいはその他の単位で表される現在時間.cvUpdateMotionHistory の呼び出し時に引数として渡した時間を保存しておいて,ここでその値を再利用する方が良い.なぜなら大きな画像に対して cvUpdateMotionHistory と cvCalcMotionGradient を行った場合,長い処理時間を要することがあるためである.
- duration
- timestamp と同じ時間単位で表される,モーション軌跡の最大保持時間.cvUpdateMotionHistory での引数と同じ.
関数 cvCalcGlobalOrientation は,選択された領域の全体的なモーション方向を計算し, 0° から 360° の間の角度を返す. この関数は最初に方向ヒストグラムを作成し,ヒストグラムが最大値を取る方向を基本方向とする.次に全ての方向ベクトルの重み付き和として,基本方向からの相対的な角度(シフト)を計算する:最近の動作ベクトルであるほど,重みが大きくなる. 結果の角度は基本方向とシフトの和になる.
SegmentMotion
全体のモーションを動作部分毎に分割する
CvSeq* cvSegmentMotion( const CvArr* mhi, CvArr* seg_mask, CvMemStorage* storage,
double timestamp, double seg_thresh );
- mhi
- モーション履歴画像.
- seg_mask
- 検出されたマスクが格納される画像,シングルチャンネル,32ビット浮動小数点型.
- storage
- 成分に関連づけられたモーション列が格納されるメモリ領域.
- timestamp
- ミリ秒単位,あるいはその他の単位で表される現在時刻.
- seg_thresh
- セグメンテーション閾値.モーション履歴の間隔と同じか,それより大きい値にすることが推奨される.
関数 cvSegmentMotion は, 全てのモーションセグメントを見つけ,seg_mask に個々の値(1,2,...)をマークする. 各モーション成分毎に,構造体 CvConnectedComp のシーケンスを一つ返す. そして,特定の成分を抽出するマスクを利用して (cvCmp を利用), cvCalcGlobalOrientation により各成分に対するモーション方向が計算される.