置信度= 1.0f - sqrt(distSq /(float)(nTrainFaces * nEigens))/ 255.0f
答案 0 :(得分:1)
为何除以(nTrainFaces * nEigens)?
那么,如果你只是试图找到'测试面特征向量(或值?)'的置信度值只有1而且只有经过训练的面部,那么你会做类似的事情
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基本上是一种安全的方式,因为它取决于可能导致缓冲区溢出的平台,硬件或实现,因此可以说是minimal_squared_distance = 99999999。所以DBL_MAX是标准库,代表最大的双值。
这就是它找到最小平方距离的方式
if(distSq < leastDistSq) {
leastDistSq = distSq;
iNearest = iTrain;
}