通过参考前面的post,用于分类的方法是具有最近邻居的欧几里得距离。但是,由于已知数据集和未知数据集的相似度均达到99%,因此获得的结果并不准确。即使与马氏距离也能得到相似的结果。

还有其他用于人脸识别的方法吗?您能给我一些例子/公式吗?

float d_i = projectedTestFace[i] - projectedTrainFaceMat->data.fl[iTrain*nEigens + i];
distSq += d_i*d_i; // Euclidean distance

最佳答案

恕我直言,如果结果不好,请怪罪您的输入,而不是距离公式

无需任何进一步的预处理(对齐,裁剪,均衡),即使是像素上的普通L2范式也比本征面具有更好的结果。 (这里真是可悲)

从2.4.2开始,opencv具有face-recognition out of-the-box。 (还具有替代的fisher和lbph功能)

您可能应该使用它,而不是自己动手(并且请使用c++ api,而不要使用arcane c one)。

如果您确实想使用本征面,则仍可以尝试使用“重建的”(来自本征面)图像和测试图像之间的L2距离作为置信度,例如done here(再次由shervin提出)

关于c++ - 人脸识别分类器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22979610/

10-11 16:51