gpt4 book ai didi

opencv - 在 OPENCV v2 API 中执行 PCA 时,如何在 libfacerec 中使用 Mahalanobis 距离?

转载 作者:行者123 更新时间:2023-12-02 17:15:41 26 4
gpt4 key购买 nike

我正在从事人脸识别项目,并且正在使用 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;
}

最佳答案

介绍

首先是这个。根据我的个人经验,我可以告诉你,对于 PCA,距离度量对识别率并没有任何显着影响。我知道有些论文报告了它,但我无法在我的图像数据库中承认它。至于你关于如何计算马氏距离的问题。 PCA 和 Mahalanobis 距离之间存在密切关系,请参阅 http://www.cognotics.com/opencv/servo_2007_series/part_5/page_5.html 上的“改进特征脸” ,这也在[1]中给出。为了完整起见,本文所指的项目位于:https://github.com/bytefish/libfacerec .

代码

没有任何进一步的测试,我会将认知学的东西重写为:

int cv::Eigenfaces::predict(InputArray _src) const {
// get data
Mat src = _src.getMat();
// project into PCA subspace
Mat q = subspace::project(_eigenvectors, _mean, src.reshape(1,1));
double minDist = numeric_limits<double>::max();
int minClass = -1;
for(int sampleIdx = 0; sampleIdx < _projections.size(); sampleIdx++) {
Mat diff0, diff1;
// perform element wise multiplication and division
multiply(q - _projections[sampleIdx], q - _projections[sampleIdx], diff0);
divide(diff0.reshape(1,1), _eigenvalues.reshape(1,1), diff1);
double dist = sum(diff1).val[0];
if(dist < minDist) {
minDist = dist;
minClass = _labels[sampleIdx];
}
}
return minClass;
}

引用

[1] Moghaddam, B. 和 Pentland, A. 模式分析和机器智能中的“对象表示的概率视觉学习”,IEEE Transactions on Vol。 19, No. 7. (1997), pp. 696-710

关于opencv - 在 OPENCV v2 API 中执行 PCA 时,如何在 libfacerec 中使用 Mahalanobis 距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10573364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com