cvCalcCovarMatrix, cvInvert, cvMahalanobisの合わせ技でマハラノビス距離を求める.

void cvCalcCovarMatrix( CvMat** data, int count, CvMat* result, CvMat* average, int flags);

引数

返り値

double cvMahalanobis( CvMat* reference, CvMat* vector, CvMat* matrix );

引数

返り値

解説

サンプルコード

通常の求め方

#define MAX_DATA 500
#define DEMIENSION 3
int count;             //データの個数
double distance;       //マハラノビス距離
CvMat *data[MAX_DATA]; //クラス
CvMat *result        = cvCreateMat( DIMENSION, DIMENSION, CV_32F); //共分散行列
CvMat *inversecovar  = cvCreateMat( DIMENSION, DIMENSION, CV_32F); //逆共分散行列
CvMat *average       = cvCreateMat( DIMENSION, 1, CV_32F);         //平均ベクトル
CvMat *input         = cvCreateMat( DIMENSION, 1, CV_32F);         //比較するベクトル

//クラスの読み込み
//この場合dataの各要素は高さDIMENSION,幅1のベクトル
count = ReadData( data, MAX_DATA);
ReadInput( input);                                       //↓クラスから共分散行列を計算
cvCalcCovarMatrix( data, count, result, average, CV_COVAR_NORMAL | CV_COVAR_SCALE);
cvInvert( result, inversecovar, CV_SVD);                 //逆行列計算
distance = cvMahalanobis( average, input, inversecovar); //計算した逆共分散行列からマハラノビス距離を計算

CV_COVAR_COLSを使う場合(ROWSも同様)

#define DEMIENSION 3
int count = GetDataLength(); //データの個数
double distance;             //マハラノビス距離
CvMat *data          = cvCreateMat( DIMENSION, count, CV_32F);     //クラス
CvMat *result        = cvCreateMat( DIMENSION, DIMENSION, CV_32F); //共分散行列
CvMat *inversecovar  = cvCreateMat( DIMENSION, DIMENSION, CV_32F); //逆共分散行列
CvMat *average       = cvCreateMat( DIMENSION, 1, CV_32F);         //平均ベクトル
CvMat *input         = cvCreateMat( DIMENSION, 1, CV_32F);         //比較するベクトル

//クラスの読み込み
//この場合dataの要素数は1,dataの幅(列数)だけデータが存在する
ReadData( data);
ReadInput( input);                                       //↓クラスから共分散行列を計算
                                                         //CV_COVAR_COLS(ROWS)を指定しているので,countの指定は無効
cvCalcCovarMatrix( &data, 0, result, average, CV_COVAR_NORMAL | CV_COVAR_SCALE | CV_COVAR_COLS);
cvInvert( result, inversecovar, CV_SVD);                 //逆行列計算
distance = cvMahalanobis( average, input, inversecovar); //計算した逆共分散行列からマハラノビス距離を計算

実体ファイル

:OpenCV:OpenCV 1.1準拠


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-05-27 (木) 11:37:11