About BBS

サポートされない実験的な関数のリファレンス

cvaux ライブラリにある機能をユーザのアプリケーションで利用するためには, ソースファイルに #include "cvaux.h" を記述し:



ステレオ対応関数(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 配列の個数を変更することはできない. すべてを同時に行う代りに,各カメラを個別にキャリブレーションすることはできる. そのためには,以下のように行う:

  1. この関数が呼ばれる前に,すべての valid フラグをクリアする;
  2. 画像の各組毎にこの間数を呼び出す;
  3. 各関数呼出の後に,すべての 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ビットではない場合 (あるいは,よりシンプルなインタフェースを望むなら),主成分分析のために, cvCalcCovarMatrixcvSVDcvGEMM などを利用すること.


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 パラメータに応じて,直接アクセスモードか,コールバックモードかが決まる. もし,ioFlagsCV_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 でなければならない.

この関数は,平均オブジェクトも計算し,これらは事前に作成される必要がある. 計算された平均オブジェクトは,対応する固有値が降順になるように並べられる.

固有値が必要ない場合は,パラメータ eigValsNULLになるかもしれない.

関数 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 は, ビタビアルゴリズムにより割り当てられた混合コンポーネントを用いて, すべての学習画像の観測ベクトルを分割する. この関数は,ユークリッド距離を用いて,現在の混合中心周りのベクトルをグループ化する.

OpenCV-1.0 リファレンス マニュアル
OpenCV-1.1pre リファレンス マニュアル
OpenCVサンプルコード


CV_ASSERT
CV_CALL
CV_CHECK
CV_CMP
CV_ERROR
CV_FUNCNAME
CV_GET_SEQ_ELEM
CV_GRAPH_EDGE_FIELDS
CV_GRAPH_FIELDS
CV_GRAPH_VERTEX_FIELDS
CV_IABS
CV_IMAGE_ELEM
CV_IMAX
CV_IMIN
CV_NODE_HAS_NAME
CV_NODE_IS_COLLECTION
CV_NODE_IS_EMPTY
CV_NODE_IS_FLOW
CV_NODE_IS_INT
CV_NODE_IS_MAP
CV_NODE_IS_REAL
CV_NODE_IS_SEQ
CV_NODE_IS_STRING
CV_NODE_IS_USER
CV_NODE_SEQ_IS_SIMPLE
CV_QUADEDGE2D_FIELDS
CV_RGB
CV_SEQUENCE_FIELDS
CV_SET_FIELDS
CV_SIGN
CV_SUBDIV2D_FIELDS
CV_SUBDIV2D_POINT_FIELDS
CV_SWAP
CV_TREE_NODE_FIELDS
CV_TURN_ON_IPL_COMPATIBILITY
EXIT
MAX
MIN
OPENCV_ASSERT
OPENCV_CALL
OPENCV_ERRCHK
OPENCV_ERROR
__BEGIN__
__END__

CvANN_MLP
CvANN_MLP_TrainParams
CvANN_MLP::create
CvANN_MLP::train
CvArr
CvAttrList
CvBoost
CvBoostParams
CvBoostTree
CvBoost::get_weak_predictors
CvBoost::predict
CvBoost::prune
CvBoost::train
CvBox2D
CvCapture
CvConDensation
CvConnectedComp
CvConvexityDefect
CvDTree
CvDTreeNode
CvDTreeParams
CvDTreeSplit
CvDTreeTrainData
CvDTree::predict
CvDTree::train
CvEM
CvEMParams
CvEM::train
CvFileNode
CvFileStorage
CvGraph
CvGraphScanner
CvHMM
CvImgObsInfo
CvHaarClassifier
CvHaarClassifierCascade
CvHaarFeature
CvHaarStageClassifier
CvHistogram
CvKNearest
CvKNearest::find_nearest
CvKNearest_train
CvKalman
CvMat
cvMatMul
cvMatMulAdd
CvMatND
CvMemBlock
CvMemStorage
CvMemStoragePos
CvNormalBayesClassifier
CvNormalBayesClassifier::predict
CvNormalBayesClassifier::train
CvPoint
CvPoint2D32f
CvPoint2D64f
CvPoint3D32f
CvPoint3D64f
CvQuadEdge2D
CvRTParams
CvRTrees
CvRTrees::get_proximity
CvRTrees::get_var_importance
CvRTrees::predict
CvRTrees::train
CvRect
CvSVM
CvSVMParams
CvSVM::get_support_vector
CvSVM::train
CvScalar
CvSeq
CvSeqBlock
CvSet
CvSize
CvSize2D32f
CvSlice
CvSparseMat
CvStatModel
CvStatModel::CvStatModel
CvStatModel::clear
CvStatModel::CvStatModel(data)
CvStatModel::~CvStatModel
CvStatModel::load
CvStatModel::predict
CvStatModel::read
CvStatModel::save
CvStatModel::train
CvStatModel::write
CvSubdiv2D
CvSubdiv2DPoint
CvTermCriteria
CvTreeNodeIterator
CvTypeInfo
IplImage
RTreesOOBerror

cv2DRotationMatrix
cv3dTrackerCalibrateCameras
cv3dTrackerLocateObjects
cvAbsDiff
cvAbsDiffS
cvAcc
cvAdaptiveThreshold
cvAdd
cvAddS
cvAddWeighted
cvAlloc
cvAnd
cvAndS
cvApproxChains
cvApproxPoly
cvArcLength
cvAvg
cvAvgSdv
cvBackProjectPCA
cvBoundingRect
cvBoxPoints
cvCalcBackProject
cvCalcBackProjectPatch
cvCalcCovarMatrix
cvCalcCovarMatrixEx
cvCalcDecompCoeff
cvCalcEMD2
cvCalcEigenObjects
cvCalcGlobalOrientation
cvCalcHist
cvCalcImageHomography
cvCalcMotionGradient
cvCalcOpticalFlowBM
cvCalcOpticalFlowHS
cvCalcOpticalFlowLK
cvCalcOpticalFlowPyrLK
cvCalcPCA
cvCalcPGH
cvCalcProbDensity
cvCalcSubdivVoronoi2D
cvCalibrateCamera2
cvCamShift
cvCanny
cvCartToPolar
cvCbrt
cvCheckArr
cvCheckContourConvexity
cvCircle
cvClearGraph
cvClearHist
cvClearMemStorage
cvClearND
cvClearSeq
cvClearSet
cvClearSubdivVoronoi2D
cvClipLine
cvClone
cvCloneGraph
cvCloneImage
cvCloneMat
cvCloneMatND
cvCloneSeq
cvCloneSparseMat
cvCmp
cvCmpS
cvCompareHist
cvComputeCorrespondEpilines
cvConDensInitSampleSet
cvConDensUpdateByTime
cvContourArea
cvContourFromContourTree
cvConvert
cvConvertImage
cvConvertPointsHomogenious
cvConvertScale
cvConvertScaleAbs
cvConvexHull2
cvConvexityDefects
cvCopy
cvCopyHist
cvCopyMakeBorder
cvCornerEigenValsAndVecs
cvCornerHarris
cvCornerMinEigenVal
cvCountNonZero
cvCreate2DHMM
cvCreateCameraCapture
cvCreateChildMemStorage
cvCreateConDensation
cvCreateContourTree
cvCreateData
cvCreateFileCapture
cvCreateGraph
cvCreateGraphScanner
cvCreateHist
cvCreateImage
cvCreateImageHeader
cvCreateKalman
cvCreateMat
cvCreateMatHeader
cvCreateMatND
cvCreateMatNDHeader
cvCreateMemStorage
cvCreateObsInfo
cvCreatePOSITObject
cvCreateSeq
cvCreateSet
cvCreateSparseMat
cvCreateStructuringElementEx
cvCreateSubdivDelaunay2D
cvCreateTrackbar
cvCreateVideoWriter
cvCrossProduct
cvCvtColor
cvCvtScale
cvCvtSeqToArray
cvDCT
cvDFT
cvDecRefData
cvDeleteMoire
cvDestroyAllWindows
cvDestroyWindow
cvDet
cvDilate
cvDistTransform
cvDiv
cvDotProduct
cvDrawChessBoardCorners
cvDrawContours
cvDynamicCorrespondMulti
cvEViterbi
cvEigenDecomposite
cvEigenProjection
cvEigenVV
cvEllipse
cvEllipse2Poly
cvEllipseBox
cvEndFindContours
cvEndWriteSeq
cvEndWriteStruct
cvEqualizeHist
cvErode
cvError
cvErrorStr
cvEstimateHMMStateParams
cvEstimateObsProb
cvEstimateTransProb
cvExp
cvFastArctan
cvFillConvexPoly
cvFillPoly
cvFilter2D
cvFindChessboardCorners
cvFindContours
cvFindCornerSubPix
cvFindExtrinsicCameraParams2
cvFindFundamentalMat
cvFindGraphEdge
cvFindGraphEdgeByPtr
cvFindHomography
cvFindNearestPoint2D
cvFindNextContour
cvFindRuns
cvFindStereoCorrespondence
cvFindType
cvFirstType
cvFitEllipse2
cvFitLine2D
cvFlip
cvFloodFill
cvFlushSeqWriter
cvFree
cvGEMM
cvGet1D
cvGet2D
cvGet3D
cvGetND
cvGetAffineTransform
cvGetCaptureProperty
cvGetCentralMoment
cvGetCol
cvGetCols
cvGetDiag
cvGetDims
cvGetElemType
cvGetErrMode
cvGetErrStatus
cvGetFileNode
cvGetFileNodeByName
cvGetFileNodeName
cvGetGraphVtx
cvGetHashedKey
cvGetHistValue_1D
cvGetHistValue_2D
cvGetHistValue_3D
cvGetHistValue_nD
cvGetHuMoments
cvGetImage
cvGetImageCOI
cvGetImageROI
cvGetMat
cvGetMinMaxHistValue
cvGetModuleInfo
cvGetNextSparseNode
cvGetNormalizedCentralMoment
cvGetNumThreads
cvGetOptimalDFTSize
cvGetPerspectiveTransform
cvGetQuadrangleSubPix
cvGetRawData
cvGetReal1D
cvGetReal2D
cvGetReal3D
cvGetRealND
cvGetRectSubPix
cvGetRootFileNode
cvGetRow
cvGetRows
cvGetSeqElem
cvGetSeqReaderPos
cvGetSetElem
cvGetSize
cvGetSpatialMoment
cvGetSubRect
cvGetTextSize
cvGetThreadNum
cvGetTickCount
cvGetTickFrequency
cvGetTrackbarPos
cvGetWindowHandle
cvGetWindowName
cvGoodFeaturesToTrack
cvGrabFrame
cvGraphAddEdge
cvGraphAddEdgeByPtr
cvGraphAddVtx
cvGraphEdgeIdx
cvGraphRemoveEdge
cvGraphRemoveEdgeByPtr
cvGraphRemoveVtx
cvGraphRemoveVtxByPtr
cvGraphVtxDegree
cvGraphVtxDegreeByPtr
cvGraphVtxIdx
cvGuiBoxReport
cvHaarDetectObjects
cvHoughCircles
cvHoughLines2
cvImgToObs_DCT
cvInRange
cvInRangeS
cvIncRefData
cvInitFont
cvInitImageHeader
cvInitLineIterator
cvInitMatHeader
cvInitMatNDHeader
cvInitMixSegm
cvInitSparseMatIterator
cvInitSystem
cvInitTreeNodeIterator
cvInitUndistortMap
cvInpaint
cvInsertNodeIntoTree
cvIntegral
cvInvSqrt
cvInvert
cvIsInf
cvIsNaN
cvKMeans2
cvKalmanCorrect
cvKalmanPredict
cvLUT
cvLaplace
cvLine
cvLoad
cvLoadHaarClassifierCascade
cvLoadImage
cvLog
cvLogPolar
cvMahalanobis
cvMakeAlphaScanlines
cvMakeHistHeaderForArray
cvMakeScanlines
cvMakeSeqHeaderForArray
cvMat
cvMatchContourTrees
cvMatchShapes
cvMatchTemplate
cvMax
cvMaxRect
cvMaxS
cvMeanShift
cvMemStorageAlloc
cvMemStorageAllocString
cvMerge
cvMin
cvMinAreaRect2
cvMinEnclosingCircle
cvMinMaxLoc
cvMinS
cvMixChannels
cvMixSegmL2
cvMoments
cvMorphEpilinesMulti
cvMorphologyEx
cvMoveWindow
cvMul
cvMulSpectrums
cvMulTransposed
cvMultiplyAcc
cvNamedWindow
cvNextGraphItem
cvNextTreeNode
cvNorm
cvNormalize
cvNormalizeHist
cvNot
cvNulDevReport
cvOpenFileStorage
cvOr
cvOrS
cvPOSIT
cvPerspectiveTransform
cvPointPolygonTest
cvPointSeqFromMat
cvPolarToCart
cvPolyLine
cvPostWarpImage
cvPow
cvPreCornerDetect
cvPrevTreeNode
cvPreWarpImage
cvProjectPCA
cvProjectPoints2
cvPtr1D
cvPtr2D
cvPtr3D
cvPtrND
cvPutText
cvPyrDown
cvPyrMeanShiftFiltering
cvPyrSegmentation
cvPyrUp
cvQueryFrame
cvQueryHistValue_1D
cvQueryHistValue_2D
cvQueryHistValue_3D
cvQueryHistValue_nD
cvRNG
cvRandArr
cvRandInt
cvRandReal
cvRandShuffle
cvRange
cvRead
cvReadByName
cvReadChainPoint
cvReadInt
cvReadIntByName
cvReadRawData
cvReadRawDataSlice
cvReadReal
cvReadRealByName
cvReadString
cvReadStringByName
cvRectangle
cvRedirectError
cvReduce
cvRegisterModule
cvRegisterType
cvRelease
cvRelease2DHMM
cvReleaseCapture
cvReleaseConDensation
cvReleaseData
cvReleaseFileStorage
cvReleaseGraphScanner
cvReleaseHaarClassifierCascade
cvReleaseHist
cvReleaseImage
cvReleaseImageHeader
cvReleaseKalman
cvReleaseMat
cvReleaseMatND
cvReleaseMemStorage
cvReleaseObsInfo
cvReleasePOSITObject
cvReleaseSparseMat
cvReleaseStructuringElement
cvReleaseVideoWriter
cvRemap
cvRemoveNodeFromTree
cvRepeat
cvResetImageROI
cvReshape
cvReshapeMatND
cvResize
cvResizeWindow
cvRestoreMemStoragePos
cvRetrieveFrame
cvRodrigues2
cvRound
cvRunHaarClassifierCascade
cvRunningAvg
cvSVBkSb
cvSVD
cvSampleLine
cvSave
cvSaveImage
cvSaveMemStoragePos
cvScale
cvScaleAdd
cvSegmentMotion
cvSeqElemIdx
cvSeqInsert
cvSeqInsertSlice
cvSeqInvert
cvSeqPartition
cvSeqPop
cvSeqPopFront
cvSeqPopMulti
cvSeqPush
cvSeqPushFront
cvSeqPushMulti
cvSeqRemove
cvSeqRemoveSlice
cvSeqSearch
cvSeqSlice
cvSeqSort
cvSet
cvSet1D
cvSet2D
cvSet3D
cvSetND
cvSetAdd
cvSetCaptureProperty
cvSetData
cvSetErrMode
cvSetErrStatus
cvSetHistBinRanges
cvSetIPLAllocators
cvSetIdentity
cvSetImageCOI
cvSetImageROI
cvSetImagesForHaarClassifierCascade
cvSetMemoryManager
cvSetMouseCallback
cvSetNew
cvSetNumThreads
cvSetReal1D
cvSetReal2D
cvSetReal3D
cvSetRealND
cvSetRemove
cvSetRemoveByPtr
cvSetSeqBlockSize
cvSetSeqReaderPos
cvSetTrackbarPos
cvSetZero
cvShowImage
cvSmooth
cvSnakeImage
cvSobel
cvSolveCubic
cvSplit
cvSqrt
cvSquareAcc
cvStartAppendToSeq
cvStartFindContours
cvStartNextStream
cvStartReadChainPoints
cvStartReadRawData
cvStartReadSeq
cvStartWriteSeq
cvStartWriteStruct
cvStdErrReport
cvSub
cvSubRS
cvSubS
cvSubdiv2DEdgeDst
cvSubdiv2DEdgeOrg
cvSubdiv2DGetEdge
cvSubdiv2DLocate
cvSubdiv2DRotateEdge
cvSubdivDelaunay2DInsert
cvSubstituteContour
cvSum
cvThreshHist
cvThreshold
cvTrace
cvTransform
cvTranspose
cvTreeToNodeSeq
cvTypeOf
cvUndistort2
cvUniformImgSegm
cvUnregisterType
cvUpdateMotionHistory
cvUseOptimized
cvWaitKey
cvWarpAffine
cvWarpPerspective
cvWatershed
cvWrite
cvWriteComment
cvWriteFileNode
cvWriteFrame
cvWriteInt
cvWriteRawData
cvWriteReal
cvWriteString
cvXor
cvXorS
cvmGet
cvmSet
error_handling_sample
error_macros