私は顔認識プロジェクトに取り組んでおり、libfacerecを使用しています。ラベルを予測する際、ライブラリは絶対差を計算するnorm()を使用します。マハラノビス距離を使用して精度を向上させるにはどうすればよいですか?OpenCV2には次の機能があります。
double Mahalanobis(InputArray vec1, InputArray vec2, InputArray icovar)
これを使用してicovarを計算する必要があります
void calcCovarMatrix(InputArray samples, OutputArray covar, OutputArray mean, int flags, int ctype=CV_64F)
ただし、この関数は、サンプルが個別の行列として、または単一の行列の行/列として格納されることを想定しています。この関数にデータを提供する方法、つまり、サンプルを個別の行列にする方法、または単一の行列の行として作成する方法がわかりません。助けてください。次のコードを変更したい:
int Eigenfaces::predict(InputArray _src) const {
// get data
Mat src = _src.getMat();
// project into PCA subspace
Mat q = project(_eigenvectors, _mean, src.reshape(1,1));
double minDist = numeric_limits<double>::max();
int minClass = -1;
for(unsigned int sampleIdx = 0; sampleIdx < _projections.size(); sampleIdx++) {
//Change Here------------------------------------------------
Mat icovar;
Mat mean;
calcCovarMatrix(Mat(),icovar,mean,CV_COVAR_SCRAMBLED);
double dist = Mahalanobis(q, sampleIdx, icovar);
//-----------------------------------------------------------
//double dist = norm(_projections[sampleIdx], q, NORM_L2);
if(dist < minDist) {
minDist = dist;
minClass = _labels[sampleIdx];
}
}
return minClass;
}