level 1
CC盟
楼主
本人初学者,参考网络的pca人脸识别代码,发现有个问题,即用一张新的人脸图去识别,即使训练库中没有此人,也会识别一个最接近的的值
int findNearestNeighbor(float* projectedTestFace)
{
double leastDistSq = DBL_MAX; //定义最小距离,并初始化为无穷大
int i, iTrain, iNearest = 0;
for(iTrain=0; iTrain < nTrainFaces; iTrain++)
{
double distSq=0;
for(i=0; i<nEigens; i++)
{
float d_i = projectedTestFace[i] - projectedTrainFaceMat->data.fl[
iTrain*nEigens + i];
distSq += d_i*d_i / eigenValMat->data.fl[i]; // Mahalanobis
算法计算的距离
// distSq += d_i*d_i; // Euclidean算法计算的距离
}
if(distSq < leastDistSq)
//此处判断,无论训练库中是否有此人,都会有结果返回,怎么判断识别的人是否在训练?
庵校浚?
{
leastDistSq = distSq;
iNearest = iTrain;
}
}
return iNearest;
}
问怎么判断识别的人脸是否在训练库中???有看到网上说对leastDistSq 设置一个阀值,那么如何设置这个阀值呢,要根据什么来设?
请各位大牛指点一二,
2013年06月13日 13点06分
1
int findNearestNeighbor(float* projectedTestFace)
{
double leastDistSq = DBL_MAX; //定义最小距离,并初始化为无穷大
int i, iTrain, iNearest = 0;
for(iTrain=0; iTrain < nTrainFaces; iTrain++)
{
double distSq=0;
for(i=0; i<nEigens; i++)
{
float d_i = projectedTestFace[i] - projectedTrainFaceMat->data.fl[
iTrain*nEigens + i];
distSq += d_i*d_i / eigenValMat->data.fl[i]; // Mahalanobis
算法计算的距离
// distSq += d_i*d_i; // Euclidean算法计算的距离
}
if(distSq < leastDistSq)
//此处判断,无论训练库中是否有此人,都会有结果返回,怎么判断识别的人是否在训练?
庵校浚?
{
leastDistSq = distSq;
iNearest = iTrain;
}
}
return iNearest;
}
问怎么判断识别的人脸是否在训练库中???有看到网上说对leastDistSq 设置一个阀值,那么如何设置这个阀值呢,要根据什么来设?
请各位大牛指点一二,