3

先生,

我是 Emgu CV 的新手。我正在制作人脸识别软件。我能够使用 HaarCascade xml 分类器检测人脸。但我坚持下一步如何识别人脸。请告诉我如何使用 MatchTemplate功能...

我在网上找到了这段代码

Image<Gray, Byte> templateImage = new Image<Gray, Byte>(bmpSnip);
Image<Gray, float> resultImage = sourceImage.MatchTemplate(templateImage,Emgu.CV.CvEnum.TM_TYPE.CV_TM_CCOEFF_NORMED);

float[,,] matches = resultImage.Data;
for (int x = 0; x < matches.GetLength(1); x++)
{
for (int y = 0; y < matches.GetLength(0); y++)
{
double matchScore = matches[y, x, 0];
if (matchScore > 0.75)
{
Rectangle rect = new Rectangle(new Point(x,y), new Size(1, 1));
imgSource.Draw(rect, new Bgr(Color.Blue), 1);
}
}

我不明白这段代码……首先,这段代码不起作用……其次,如果有人知道如何正确执行……请发布代码……

4

1 回答 1

3

MatchTemplate 方法最初设计用于匹配具有定义特征的对象。一张脸,而对于您和我来说,可能对 MatchTemplate 中使用的 FFT 方法具有定义特征,但定义特征根本不足以进行人脸识别。Surya 是正确的,因为比较会很有趣,我建议最好的方法是将模板面部图像的区域与相机识别的面部进行匹配。因此,例如,您将获取眼睛的位置并将 MatchTemplate 应用到同一位置,然后对匹配这些特征进行平均以估计整体准确度。

但是,您固有的重大问题是执行时间。使用大型人脸数据库,MatchTemplate 不会显着减少数据集以允许实时处理。

特征识别器是一种更安全、更有效的方法。它比创建自己的算法更可靠,速度也更快。请在此处查看我的文章,了解如何实现它:

http://www.codeproject.com/Articles/261550/EMGU-Multiple-Face-Recognition-using-PCA-and-Paral

希望这可以帮助,

干杯,

克里斯

于 2012-02-22T12:23:41.067 回答