サポートされない実験的な関数のリファレンス
cvaux ライブラリにある機能をユーザのアプリケーションで利用するためには, ソースファイルに #include "cvaux.h" を記述し:
- Win32 環境の場合は,cvaux.dll のインポートライブラリ cvaux.lib をリンクする.
- Linux 環境の場合は,コンパイラオプション -lcvuaux を利用する.
- ステレオ対応関数(Stereo Correspondence Functions)
- ビューモーフィング関数(View Morphing Functions)
- 3次元トラッキング関数(3D Tracking Functions)
- 主成分分析関数(Eigen Objects (PCA) Functions)
- Embedded HMM 関数(Embedded Hidden Markov Models Functions)
ステレオ対応関数(Stereo Correspondence Functions)
FindStereoCorrespondence
ステレオペア間の視差を計算する
cvFindStereoCorrespondence( const CvArr* leftImage, const CvArr* rightImage, int mode, CvArr* depthImage, int maxDisparity, double param1, double param2, double param3, double param4, double param5 );
- leftImage
- ステレオペアの左画像.8ビット,グレースケールの(傾きや位置などが)修正された画像.
- rightImage
- ステレオペアの右画像.8ビット,グレースケールの修正された画像.
- mode
- 視差を計算するためのアルゴリズム(現在は,CV_DISPARITY_BIRCHFIELD のみをサポートしている).
- depthImage
- 結果のデプス画像.視差を表すようにスケーリングされた,8ビット,グレースケール画像. つまり,ゼロ視差(これは,カメラから非常に遠い場所の点にあたる)は 0 にマッピングされ,最大視差は 255 にマッピングされる.
- maxDisparity
- 取りうる最大視差.オブジェクトがカメラに近ければ近い程,ここには大きな値が指定されるべきである. ただし,大きすぎる値は,処理速度を極端に低下させる.
- param1, param2, param3, param4, param5
- - アルゴリズムのパラメータ. 例えば,param1 は,オクルージョンペナルティ定数, param2 は,一致報酬, param3 は,高信頼度の領域(param3 以上の信頼性を持つ,隣接するピクセルの組)の定義, param4 は,中信頼度の領域の定義, param5 は,低信頼度の領域の定義,に用いられる. 指定されないパラメータがある場合は,デフォルト値が用いられる. Birchfield のアルゴリズムにおいては,param1 = 25, param2 = 5, param3 = 12, param4 = 15, param5 = 25 である. (これらの値は次の文献から引用した."Depth Discontinuities by Pixel-to-Pixel Stereo" Stanford University Technical Report STAN-CS-TR-96-1573, July 1996.)
関数 cvFindStereoCorrespondence
は,
二つの調整されたグレースケール画像に対する視差画像(disparity map)を計算する
例.8ビット,カラー画像のペアにおける視差を計算する.
/*---------------------------------------------------------------------------------*/ IplImage* srcLeft = cvLoadImage("left.jpg",1); IplImage* srcRight = cvLoadImage("right.jpg",1); IplImage* leftImage = cvCreateImage(cvGetSize(srcLeft), IPL_DEPTH_8U, 1); IplImage* rightImage = cvCreateImage(cvGetSize(srcRight), IPL_DEPTH_8U, 1); IplImage* depthImage = cvCreateImage(cvGetSize(srcRight), IPL_DEPTH_8U, 1); cvCvtColor(srcLeft, leftImage, CV_BGR2GRAY); cvCvtColor(srcRight, rightImage, CV_BGR2GRAY); cvFindStereoCorrespondence( leftImage, rightImage, CV_DISPARITY_BIRCHFIELD, depthImage, 50, 15, 3, 6, 8, 15 ); /*---------------------------------------------------------------------------------*/
この実例で利用できるステレオぺア画像の例
ビューモーフィング関数(View Morphing Functions)
MakeScanlines
基礎行列から二つのカメラ間のスキャンライン座標を計算する
void cvMakeScanlines( const CvMatrix3* matrix, CvSize img_size, int* scanlines1, int* scanlines2, int* lengths1, int* lengths2, int* line_count );
- matrix
- 基礎行列.
- imgSize
- 画像のサイズ.
- scanlines1
- 第1画像の計算されたスキャンラインが格納される配列へのポインタ.
- scanlines2
- 第2画像の計算されたスキャンラインが格納される配列へのポインタ.
- lengths1
- 第1画像スキャンラインの長さ(ピクセル単位)が格納される配列へのポインタ.
- lengths2
- 第2画像スキャンラインの長さ(ピクセル単位)が格納される配列へのポインタ.
- line_count
- スキャンライン数を格納する変数へのポインタ.
関数 cvMakeScanlines
は,二つの画像間のスキャンラインの座標を求める.
この間数は,スキャンラインの数を返す.
ポインタ scanlines1
あるいは, scanlines2
が
0 である場合は,スキャンラインの数を計算するだけである.
PreWarpImage
画像を修正する
void cvPreWarpImage( int line_count, IplImage* img, uchar* dst, int* dst_nums, int* scanlines );
- line_count
- 画像のスキャンライン数.
- img
- 入力画像.
- dst
- 修正された prewarp 画像のデータ.
- dst_nums
- スキャンラインの長さが格納された配列へのポインタ.
- scanlines
- スキャンラインの座標が格納された配列へのポインタ.
関数 cvPreWarpImage
は,修正後の画像のスキャンラインが水平になるように,画像を修正する.
この関数を呼び出す前に,
サイズ max(width,height)*line_count*3
の出力バッファが
確保されてなければならない.
FindRuns
修正された画像からスキャンラインを取り出し,それらを run に分解する
void cvFindRuns( int line_count, uchar* prewarp1, uchar* prewarp2, int* line_lengths1, int* line_lengths2, int* runs1, int* runs2, int* num_runs1, int* num_runs2 );
- line_count
- スキャンライン数.
- prewarp1
- 第1画像の prewarp 画像データ.
- prewarp2
- 第2画像の prewarp 画像データ.
- line_lengths1
- 第1画像内のスキャンライン長が格納された配列
- line_lengths2
- 第2画像内のスキャンライン長が格納された配列
- runs1
- 第1画像における各スキャンラインの run の配列.
- runs2
- 第2画像における各スキャンラインの run の配列.
- num_runs1
- 第1画像における各スキャンラインの run 数の配列.
- num_runs2
- 第2画像における各スキャンラインの run 数の配列.
関数 cvFindRuns
は,
修正された画像からスキャンラインを取り出し,各スキャンラインをいくつか
の run ,つまり,ほぼ同じ明るさの連続したピクセルの組,に分解する.
DynamicCorrespondMulti
二つの warp 画像の二つの runs の組を対応付ける
void cvDynamicCorrespondMulti( int line_count, int* first, int* first_runs, int* second, int* second_runs, int* first_corr, int* second_corr );
- line_count
- スキャンラインの数.
- first
- 第1画像の run の配列.
- first_runs
- 第1画像の各スキャンラインにおける run の数を格納した配列
- second
- 第2画像の run の配列.
- second_runs
- 第2画像の各スキャンラインにおける run の数を格納した配列
- first_corr
- 第1画像の run に対して検出された,対応情報の配列へのポインタ.
- second_corr
- 第2画像の run に対して検出された,対応情報の配列へのポインタ.
関数 cvDynamicCorrespondMulti
は,二つの画像の二組の run を対応付ける.
この間数を呼び出す前に,メモリを確保する必要がある.
対応情報の一つの配列に対するメモリサイズは,
max( width,height )* numscanlines*3*sizeof ( int )
である.
MakeAlphaScanlines
仮想カメラ画像のスキャンライン座標を計算する
void cvMakeAlphaScanlines( int* scanlines1, int* scanlines2, int* scanlinesA, int* lengths, int line_count, float alpha );
- scanlines1
- 第1スキャンラインの配列へのポインタ.
- scanlines2
- 第2スキャンラインの配列へのポインタ.
- scanlinesA
- 仮想画像内のスキャンライン配列へのポインタ.
- lengths
- 仮想画像内のスキャンライン長の配列へのポインタ.
- line_count
- スキャンラインの数.
- alpha
- 仮想カメラの位置
(0.0 - 1.0)
.
関数 cvMakeAlphaScanlines
は,
位置が与えられた仮想カメラのスキャンライン座標を求める.
この間数を呼び出す前に,メモリを確保する必要がある.
対応する run の配列に対するメモリサイズは,
numscanlines*2*4*sizeof(int)
である.
スキャンライン長の配列に対するメモリサイズは,
numscanlines*2*4*sizeof(int)
である.
MorphEpilinesMulti
ステレオ対応情報を用いて,二つの pre-warped 画像をモーフィングする
void cvMorphEpilinesMulti( int line_count, uchar* first_pix, int* first_num, uchar* second_pix, int* second_num, uchar* dst_pix, int* dst_num, float alpha, int* first, int* first_runs, int* second, int* second_runs, int* first_corr, int* second_corr );
- line_count
- prewarp 画像内のスキャンライン数.
- first_pix
- 第1prewarp画像へのポインタ.
- first_num
- 第1画像内の各スキャンラインに存在する点数の配列へのポインタ.
- second_pix
- 第2prewarp画像へのポインタ.
- second_num
- 第2画像内の各スキャンラインに存在する点数の配列へのポインタ.
- dst_pix
- モーフィングされた warped 画像へのポインタ.
- dst_num
- 各ラインに存在する点数の配列へのポインタ.
- alpha
- 仮想カメラ位置
(0.0 - 1.0)
. - first
- 第1画像の run のシーケンス.
- first_runs
- 第1画像の各スキャンラインの run 数へのポインタ.
- second
- 第2画像の run のシーケンス.
- second_runs
- 第2画像の各スキャンラインの run 数へのポインタ.
- first_corr
- 第1画像の run における対応情報配列へのポインタ.
- second_corr
- 第2画像の run における対応情報配列へのポインタ.
関数 cvMorphEpilinesMulti
は,
二つの画像のスキャンライン間の対応情報を用いて,二つの pre-warped 画像をモーフィングする.
PostWarpImage
Warps rectified morphed image back
void cvPostWarpImage( int line_count, uchar* src, int* src_nums, IplImage* img, int* scanlines );
- line_count
- スキャンライン数.
- src
- Pointer to the prewarp image virtual image.
- src_nums
- 画像中のスキャンライン数.
- img
- 結果の unwarp 画像.
- scanlines
- スキャンラインデータ配列へのポインタ.
関数 cvPostWarpImage
は,
cvMakeAlphaScanlines によって座標計算されたスキャンラインを横切る行を格納する事によって,仮想カメラ画像を warp する.
DeleteMoire
入力画像のモアレを削除する
void cvDeleteMoire( IplImage* img );
- img
- 入力画像.
関数 cvDeleteMoire
は,与えられた画像のモアレを削除する.
post-warped 画像には,
隣接するスキャンライン間に存在しうる穴が理由で発生した黒い(un-covered)点がある場合がある.
この関数は,黒いピクセルの代りに隣接ピクセルを利用することで,画像からモアレ(黒いピクセル)を削除する.
全てのスキャンラインが水平である場合は,この関数は省略されるかもしれない.
3次元トラッキング関数(3D Tracking Functions)
このセクションでは,ステレオカメラを利用して,オブジェクトを3次元空間内でトラッキングする 関数について述べる.
3dTrackerCalibrateCameras
複数カメラの位置と姿勢を同時に決定する
CvBool cv3dTrackerCalibrateCameras(int num_cameras, const Cv3dTrackerCameraIntrinsics camera_intrinsics[], CvSize checkerboard_size, IplImage *samples[], Cv3dTrackerCameraInfo camera_info[]);
- num_cameras
- キャリブレーションするカメラの台数.これは,三つの配列パラメータの各サイズである.
- camera_intrinsics
- CalibFilter によって決定されるような,各カメラの内部パラメータ.
- checkerboard_size
- チェッカーボードの幅と高さ(矩形の個数).
- samples
- チェッカーボードを写した,各カメラ画像.
- camera_info
- カメラキャリブレーションの結果が格納される. これは,トラッキングを行うために 3dTrackerLocateObjects に渡される.
関数 cv3dTrackerCalibrateCameras
は,
各画像から,指定されたサイズのチェッカーボードを探す.
チェッカーボードが検出された各画像では,
camera_info
の対応する場所に,
チェッカーボードからの相対的なカメラの位置と姿勢が格納され,
valid
フラグがセットされる.
すべての画像でチェッカーボードが検出された場合は true を,
そうでない場合は false を返す.
この間数は,チェッカーボードを検出できなかった画像に応じて,
camera_info
配列の個数を変更することはできない.
すべてを同時に行う代りに,各カメラを個別にキャリブレーションすることはできる.
そのためには,以下のように行う:
- この関数が呼ばれる前に,すべての
valid
フラグをクリアする; - 画像の各組毎にこの間数を呼び出す;
- 各関数呼出の後に,すべての
valid
フラグをチェックする. すべてのvalid
フラグがセットされていた場合は, キャリブレーションが完了している.
valid
フラグを無視して,
キャリブレーションが完了した場合に決定される戻り値を使う.
3dTrackerLocateObjects
トラッキングオブジェクトの3次元位置を決定する
int cv3dTrackerLocateObjects(int num_cameras, int num_objects, const Cv3dTrackerCameraInfo camera_info[], const Cv3dTracker2dTrackedObject tracking_info[], Cv3dTrackerTrackedObject tracked_objects[]);
- num_cameras
- カメラの台数.
- num_objects
- 1つのカメラで検出されるオブジェクトの最大数.
(
tracked_objects
に格納されるオブジェクトの最大数でもある) - camera_info
- 3dTrackerCalibrateCameras によって決定される各カメラの位置,姿勢情報.
- tracking_info
-
各カメラに写る各オブジェクトの2次元位置.これは1次元配列として指定
されているが,実際は2次元配列である:
const Cv3dTracker2dTrackedObject tracking_info[num_cameras][num_objects]
. 使われないスロットのid
フィールドは,-1 でなければならない. Id は,順番に並んでいたり,連続していたりする必要はない. - tracked_objects
- 結果が格納される.
関数 cv3dTrackerLocateObjects
は,
トラッキングされたオブジェクトの3次元位置を決定する.
これは,複数カメラによる2次元トラッキング情報と,
3dTrackerCalibrateCameras
で計算されたカメラの位置姿勢情報に基づいている.
二つ以上のカメラによってトラッキングされている
同じ id
のオブジェクトの位置が決定される.
この関数は,tracked_objects
配列に結果を代入し,
位置決めされたオブジェクトの個数を返す.
使われないスロットの id
フィールドには,-1 がセットされる.
主成分分析関数(Eigen Objects (PCA) Functions)
このセクションでは, 主成分分析や,すべてが同時にはメモリに収まらない8ビット画像集合の圧縮 などを行う関数について述べる. もし,データファイルがメモリに収まり,ベクトルが8ビットではない場合 (あるいは,よりシンプルなインタフェースを望むなら),主成分分析のために, cvCalcCovarMatrix, cvSVD, cvGEMM などを利用すること.
CalcCovarMatrixEx
入力オブジェクト集合の共分散行列を計算する
void cvCalcCovarMatrixEx( int object_count, void* input, int io_flags, int iobuf_size, uchar* buffer, void* userdata, IplImage* avg, float* covar_matrix );
- object_count
- 入力オブジェクトの個数.
- input
IplImage
型の入力オブジェクトの配列へのポインタか, 読み込みコールバック関数へのポインタ.パラメータioFlags
の値に応じて決まる.- io_flags
- 入出力フラグ.
- iobuf_size
- 入出力バッファサイズ.
- buffer
- 入出力バッファへのポインタ.
- userdata
- コールバック関数に必要なすべてのデータを含む構造体へのポインタ.
- avg
- 平均オブジェクト.
- covar_matrix
- 共分散行列.出力パラメータであるので,関数が呼ばれる前に確保されてなければならない.
関数 cvCalcCovarMatrixEx
は,事前に計算された平均オブジェクトを用いて,
入力オブジェクト集合の共分散行列を計算する.
ioFlags
パラメータに応じて,直接アクセスモードか,コールバックモードかが決まる.
もし,ioFlags
が CV_EIGOBJ_NO_CALLBACK
ではない場合は,
この関数が呼ばれるよりも前にバッファが確保されていなければならない.
CalcEigenObjects
入力オブジェクト集合の正規直交基底と平均オブジェクトを計算する
void cvCalcEigenObjects( int nObjects, void* input, void* output, int ioFlags, int ioBufSize, void* userData, CvTermCriteria* calcLimit, IplImage* avg, float* eigVals );
- nObjects
- 入力オブジェクトの個数.
- input
IplImage
型の入力オブジェクトの配列へのポインタか, 読み込みコールバック関数へのポインタ.パラメータioFlags
の値に応じて決まる.- output
- 固有オブジェクトの配列へのポインタか,
パラメータ
ioFlags
の値に応じた書き出しコールバック関数へのポインタ. - ioFlags
- 入出力フラグ.
- ioBufSize
- バイト単位で表される入出力バッファサイズ.サイズが分からない場合は,0 にする.
- userData
- コールバック関数に必要なすべてのデータを含む構造体へのポインタ.
- calcLimit
- 固有オブジェクトの計算を終了するための終了条件.
- avg
- 平均オブジェクト.
- eigVals
- 降順に並んだ固有値配列へのポインタ;
NULL
の場合もある.
関数 cvCalcEigenObjects
は,入力オブジェクト集合に対する正規直交基底と平均オブジェクトを計算する.
ioFlags
パラメータに応じて,直接アクセスモードか,コールバックモードかが決まる.
calcLimit
パラメータに応じて,
第1から第calcLimit->max_iter
目までの固有値が計算されたときか,
あるいは,現在の固有値と最大固有値との比が閾値 calcLimit->epsilon
よりも
小さくなったときに,計算が終了する.
calcLimit->type
の値は,CV_TERMCRIT_NUMB, CV_TERMCRIT_EPS
あるいは,CV_TERMCRIT_NUMB | CV_TERMCRIT_EPS
でなければならない.
この関数は,平均オブジェクトも計算し,これらは事前に作成される必要がある. 計算された平均オブジェクトは,対応する固有値が降順になるように並べられる.
固有値が必要ない場合は,パラメータeigVals
が NULL
になるかもしれない.
関数 cvCalcEigenObjects
は,関数
cvCalcCovarMatrixEx を利用している.
CalcDecompCoeff
入力オブジェクトの分解係数を計算する
double cvCalcDecompCoeff( IplImage* obj, IplImage* eigObj, IplImage* avg );
- obj
- 入力オブジェクト.
- eigObj
- 固有オブジェクト.
- avg
- 平均オブジェクト.
関数 cvCalcDecompCoeff
は,事前に計算された固有オブジェクトと平均オブジェクトを利用して,
入力オブジェクトの一つの分解系数を計算する.
EigenDecomposite
入力オブジェクトのすべての分解係数を計算する
void cvEigenDecomposite( IplImage* obj, int eigenvec_count, void* eigInput, int ioFlags, void* userData, IplImage* avg, float* coeffs );
- obj
- 入力オブジェクト.
- eigenvec_count
- 固有オブジェクトの個数.
- eigInput
IplImage
型の入力オブジェクトの配列へのポインタか, 読み込みコールバック関数へのポインタ.パラメータioFlags
の値に応じて決まる.- ioFlags
- 入出力フラグ.
- userData
- コールバック関数に必要なすべてのデータを含む構造体へのポインタ.
- avg
- 平均オブジェクト.
- coeffs
- 計算された係数;出力パラメータ.
関数 cvEigenDecomposite
は,
事前に計算された固有オブジェクト基底と平均オブジェクトを用いて,
入力オブジェクトのすべての分解係数を計算する.
ioFlags
パラメータに応じて,直接アクセスモードか,コールバックモードかが決まる.
EigenProjection
オブジェクトの固有部分空間への投影を計算する
void cvEigenProjection( void* input_vecs, int eigenvec_count, int io_flags, void* userdata, float* coeffs, IplImage* avg, IplImage* proj );
- input_vec
IplImage
型の入力オブジェクトの配列へのポインタか, コールバック関数へのポインタ.パラメータioFlags
の値に応じて決まる.- eigenvec_count
- 固有ベクトルの個数.
- io_flags
- 入出力フラグ;cvCalcEigenObjects を参照すること.
- userdata
- コールバック関数に必要なすべてのデータを含む構造体へのポインタ.
- coeffs
- 事前に計算された分解係数.
- avg
- cvCalcEigenObjects によって計算された平均ベクトル.
- proj
- 固有部分空間への投影.
関数 cvEigenProjection
は,オブジェクトの固有部分空間への投影を計算する.
言いかえれば,事前に計算された固有オブジェクト基底,平均オブジェクト,
復元オブジェクトの分解係数を用いて,オブジェクトを復元する.
ioFlags
パラメータに応じて,直接アクセスモードか,コールバックモードかが決まる.
Embedded HMM 関数(Embedded Hidden Markov Models Functions)
embedded モデルをサポートするために, ユーザは,1次元 HMM と2次元 embedded HMM モデルを表現する構造体を定義しなければならない.
CvHMM
Embedded HMM 構造体
typedef struct _CvEHMM { int level; int num_states; float* transP; float** obsProb; union { CvEHMMState* state; struct _CvEHMM* ehmm; } u; } CvEHMM;
- level
- embedded HMM のレベル.
level ==0
の場合,HMM は,大体が external である. 2次元HMMには,2種類のHMMが存在する:一つの external と,いくつかの embedded である. external HMM はlevel ==1
,embedded HMM はlevel ==0
. - num_states
- 1次元 HMM の state 数.
- transP
- state から state への遷移確率,正方行列
(num_state×num_state)
. - obsProb
- 観測確率行列.
- state
- HMM state の配列.最終レベル HMM,つまり,embedded HMM を持たない HMM では,HMM state は実数である.
- ehmm
- embedded HMM の配列.HMMが,最終レベル HMMではない場合,HMM state は実数ではなく,これは 複数の HMM となる.
観測を表現するために,以下のような構造体が定義されている:
CvImgObsInfo
画像観測構造体
typedef struct CvImgObsInfo { int obs_x; int obs_y; int obs_size; float** obs; int* state; int* mix; } CvImgObsInfo;
- obs_x
- 水平方向の観測数.
- obs_y
- 垂直方向の観測数.
- obs_size
- 各観測ベクトルの長さ.
- obs
- 連続して保存された観測ベクトルへのポインタ.
ベクトル数は,
obs_x*obs_y
となる. - state
- 各観測ベクトルに割り当てられた state インデックスの配列.
- mix
- 割り当てられた state 内の観測ベクトルに対応した,混合コンポーネントのインデックス
Create2DHMM
2次元 embedded HMM を作成する
CvEHMM* cvCreate2DHMM( int* stateNumber, int* numMix, int obsSize );
- stateNumber
- 配列.この配列の最初の要素は,HMM のsuper stateの個数を表す.
それに続くすべての要素は,各super stateに対応した各 embedded HMM の state 数を表す.
そして配列の長さは,
stateNumber [0]+1
となる. - numMix
- 各内部 state 毎のガウシアン混合コンポーネント数の配列. この配列の要素数は,HMM の内部 state 数と等しい.つまり, super stateはここでは数に入らない.
- obsSize
- HMM を構成するのに使われる観測ベクトルのサイズ.
関数 cvCreate2DHMM
は,
指定されたパラメータにより作成された,CvEHMM 型の構造体を返す.
Release2DHMM
2次元 embedded HMM を解放する
void cvRelease2DHMM(CvEHMM** hmm );
- hmm
- 開放される HMM へのポインタ.
関数 cvRelease2DHMM
は,HMM に使われていたすべてのメモリを解放し,
HMM へのポインタをクリアする.
CreateObsInfo
画像観測ベクトルを格納する構造体を作成する
CvImgObsInfo* cvCreateObsInfo( CvSize numObs, int obsSize );
- numObs
- 水平方向,および垂直方向の観測ベクトル数.
画像と観測抽出のスキームが与えられると,
マクロ
CV_COUNT_OBS( roi, dctSize, delta, numObs )
によりパラメータが計算される. ここで,roi, dctSize, delta, numObs
は, CvSize 型の構造体へのポインタである. ポインタroi
は,観測された画像のroi
のサイズを意味し,numObs
は,マクロの出力パラメータである. - obsSize
- 構造体に格納される観測ベクトルのサイズ.
関数 cvCreateObsInfo
は,画像観測ベクトルを格納するための新しい構造体を作成する.
パラメータ roi, dctSize
,および delta
の定義については,
関数 cvImgToObs_DCT
の記述を参照すること.
ReleaseObsInfo
観測ベクトル構造体を解放する
void cvReleaseObsInfo( CvImgObsInfo** obsInfo );
- obsInfo
- 構造体 CvImgObsInfo へのポインタ.
関数 cvReleaseObsInfo
は,観測に使われていたすべてのメモリを解放し,
構造体 CvImgObsInfo へのポインタをクリアする.
ImgToObs_DCT
画像から観測ベクトルを抽出する
void cvImgToObs_DCT( IplImage* image, float* obs, CvSize dctSize, CvSize obsSize, CvSize delta );
- image
- 入力画像.
- obs
- 連続して格納された観測ベクトルへのポインタ.
- dctSize
- 計算される DCT(離散コサイン変換)係数のための画像ブロックサイズ.
- obsSize
- 観測ベクトルに入れられるための,水平方向および垂直方向における最小の DCT 係数の個数.
- delta
- 水平方向および垂直方向の二つの連続紙他画像ブロック間の間隔(ピクセル単位)
関数 cvImgToObs_DCT
は,観測ベクトルを,つまり,画像から
DCT 係数を,抽出する.
ユーザは,他の HMM 関数といっしょにこの関数を用いるために,
パラメータ obs
として obsInfo.obs
を渡さなければならず,
CvImgObsInfo 型の構造体
obsInfo
を用いる.
HMM の観測ベクトルの計算
CvImgObsInfo* obs_info; ... cvImgToObs_DCT( image,obs_info->obs, //!!! dctSize, obsSize, delta );
UniformImgSegm
HMM state による,画像観測ベクトルの一様分割
void cvUniformImgSegm( CvImgObsInfo* obsInfo, CvEHMM* hmm );
- obsInfo
- 観測ベクトル構造体.
- hmm
- HMM 構造体.
関数 cvUniformImgSegm
は,HMM state に応じて,
画像観測ベクトルを一様に分割する
(5個のsuper state,および,各super stateに 3, 6, 6, 6, 3個の内部 state を持つ2次元 embedded HMM
のための 初期分割 を参照すること).
2次元 embedded HMM のための初期分割
InitMixSegm
state 混合コンポーネントにより HMM の各内部 state 内のすべての観測ベクトルを分割する
void cvInitMixSegm( CvImgObsInfo** obsInfoArray, int numImg, CvEHMM* hmm );
- obsInfoArray
- 観測構造体へのポインタの配列
- numImg
- その配列の長さ.
- hmm
- HMM.
関数 cvInitMixSegm
は,
state に応じてあらかじめ分割されたいくつかの学習画像から観測ベクトル集合を得る.
また,各内部 HMM state 内の観測ベクトル集合を,
その state の混合コンポーネント数となる多くのクラスタに分割する
EstimateHMMStateParams
各 HMM state のすべてのパラメータを推定する
void cvEstimateHMMStateParams( CvImgObsInfo** obsInfoArray, int numImg, CvEHMM* hmm );
- obsInfoArray
- 観測構造体へのポインタの配列
- numImg
- その配列の長さ.
- hmm
- HMM.
関数 cvEstimateHMMStateParams
は,
ガウシアン平均,分散などを含む,各 HMM state の内部パラメータを計算する.
EstimateTransProb
遷移確率を計算する
void cvEstimateTransProb( CvImgObsInfo** obsInfoArray, int numImg, CvEHMM* hmm );
- obsInfoArray
- 観測構造体へのポインタの配列
- numImg
- その配列の長さ.
- hmm
- HMM.
関数 cvEstimateTransProb
は,
画像観測ベクトルの現在の分割を用いて,
embedded HMM および external HMM に対する遷移確率行列を計算する.
EstimateObsProb
いくつかの画像の各観測ベクトルの遷移確率を計算する
void cvEstimateObsProb( CvImgObsInfo* obsInfo, CvEHMM* hmm );
- obsInfo
- 観測ベクトル構造体.
- hmm
- HMM 構造体.
関数 cvEstimateObsProb
は,
内部 HMM state において生じるための各観測ベクトルのガウシアン確率を計算する.
EViterbi
embedded EMM でビタビアルゴリズムを実行する
float cvEViterbi( CvImgObsInfo* obsInfo, CvEHMM* hmm );
- obsInfo
- 観測ベクトル構造体.
- hmm
- HMM 構造体.
関数 cvEViterbi
は,embedded HMM でビタビアルゴリズムを実行する.
ビタビアルゴリズムは,与えられた画像観測ベクトルと HMM の間の最適一致の尤度を計算し,
HMM state に応じて画像観測ベクトルを分割する.
この分割は,求められた最適一致に基づいて行われる.
MixSegmL2
新しく割り当てられた state の混合コンポーネントにより,すべての学習画像の観測ベクトルを分割する
void cvMixSegmL2( CvImgObsInfo** obsInfoArray, int numImg, CvEHMM* hmm );
- obsInfoArray
- 観測ベクトル構造体へのポインタ配列.
- numImg
- その配列の長さ.
- hmm
- HMM.
関数 cvMixSegmL2
は,
ビタビアルゴリズムにより割り当てられた混合コンポーネントを用いて,
すべての学習画像の観測ベクトルを分割する.
この関数は,ユークリッド距離を用いて,現在の混合中心周りのベクトルをグループ化する.