两张脸比较

时间:2012-03-31 22:04:40

标签: c# c++ opencv face-recognition eigen

我试图比较两张脸并获得他们的相似度 - 他们匹配多少得分。 我搜索互联网寻求解决方案,但我只能找到一组训练图像的人脸识别,我无法找到有人对这个问题进行研究 - 我有2个未知面孔,我想知道它是否是同一个人。 你能告诉我任何可以帮助我的任何线索和资源吗? 如果有任何实现,如果它是 - C#,C ++会很棒 我试图使用openCV-检测面部,识别面对某些数据库(获得本征距离)并比较euklidean距离,但我收到了不好的结果。(也许我的方法是错误的,我不完全理解特征脸和euklid距离)

非常感谢!

2 个答案:

答案 0 :(得分:1)

首先,请注意,这远非一个已解决的问题。事实上,它是计算机视觉研究的一个相对领域。请查看Labeled Faces in the Wild dataset,它正好使用您正在谈论的任务,比较两个面孔。您特别感兴趣的是results section,其中包含哪些算法(以及相应的论文)效果最好的报告。

然而,似乎所有这些都可能相当先进。您似乎对机器学习和/或计算机视觉不太熟悉,在这种情况下,您可能希望查看这些领域的教科书。

无论哪种方式,基本的是这样的:你不想使用像素来比较面部,因为它们随着光线和姿势的变化而变化很大。 (你应该尝试一下!)所以你必须以一种方式转换像素,这种方式使同一个人的面孔相似,不同人的面孔也不同。这是特征提取,它可以说是人脸识别中最难和最重要的部分。你怎么知道改造它们的最佳方法是哪种?这就是训练数据集的用武之地。例如,如果你使用特征脸(顺便说一下,它的性能应该很差),你可以使用训练数据来获得最能代表这些数据的特征向量。然后,两个比较两个面,将每个面投影到特征向量上,并使用欧几里德距离。 (这与使用Mahalonobis距离相同)。

答案 1 :(得分:0)

看来你打算做的是找到两个面孔之间的相似性。 OpenCV在两个图像之间提供基本的模板匹配功能。 Here这是一个很好的解释和完整的C代码。

如此处所解释的,存储图像中每个点的匹配输出。 this教程中显示了从那里获得的匹配,包括使用的各种规范化。

使用后来的C ++接口快速模板匹配时遇到了这个link,但是没有亲自使用它。

如果你的脸只是马克杯,旋转,透视等方面几乎没有变化,那么这个基本方法应该足以满足你的需求。