人脸识别(2D 数组)置信度公式推导

3

置信度 = 1.0f - sqrt(distSq / (float)(nTrainFaces * nEigens)) / 255.0f

  1. 为什么要除以(nTrainFaces * nEigens)?

1
这里涉及到了很高的巫术因素 ;) - berak
我从来没有理解为什么在计算中会出现nTrainFaces。 - berak
这是你提到的教程吗:http://www.shervinemami.info/faceRecognition.html?你能在你的帖子中链接正确的教程,这样我们就能得到正确的上下文。 - Gábor Buella
嗨Buella,是的,那个链接是正确的,我正在引用它的完整代码链接 - Newbiesss
1个回答

1
为什么要除以(nTrainFaces*nEigens)?
如果你只是想找出只有一个训练脸的“测试脸特征向量(或值)”的置信度值,那么你需要执行如下操作。
confidence = 1.0f - (sqrt( least_squared_distance / no_of_eigens ) / 255.0)

然而,由于您正在训练的人脸数据库中查找最近的邻居,因此您希望置信度反映出您的最近邻居在所有已训练面孔中为您训练的数据库中的一个面孔提供了高置信度值。因此,现在的置信度不是针对1个已训练的面孔计算的,而是与所有已训练的面孔一起计算。因此,
confidence = 1.0f - (sqrt( least_squared_distance / no_of_trained_faces * no_of_eigens ) / 255.0)

"leastDistSq=DBL_MAX" DBL_MAX是什么?

least_squared_distance = DBL_MAX基本上是一种安全的方式,表示least_squared_distance = 99999999,因为根据平台、硬件或实现的不同,这可能会导致缓冲区溢出。因此,DBL_MAX是表示最大双精度值的标准库。

这就是它如何找到最小平方距离的方法。

if(distSq < leastDistSq) {
  leastDistSq = distSq;
  iNearest = iTrain;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接