我正在从事人脸识别项目,并且正在使用 libfacerec。在预测标签时,库使用计算绝对差的 norm()。如何使用 Mahalanobis 距离来提高准确性?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;
}