1

我正在使用特征脸实现人脸识别迷你项目。

我成功地拥有了计算机并将特征脸保存到一个文件夹中。使用:

  Matrix<-readInImagesAndLinearize()
  avg_face<-as.vector(colMeans(Matrix, na.rm = FALSE, dims = 1))
  A <- t(Matrix) - matrix(avg_face, ncol=dim(Matrix)[1], nrow=dim(Matrix)[2])
  L <- t(A) %*% A
  V <- eigen(L)

  eigenValues <<- V[['values']]
  eigenFaces <<- apply((A %*% V[['vectors']]), 2, function(x) {
  # normalize and scale to 1
  y <- x/sqrt(sum(x^2))
  y <- x - min(x)
  (1/max(y)) * y
  })  

然后将它们保存到文件中。

我的下一步应该是什么?我究竟如何降低维数,然后用它来识别给定的脸是否与另一个相似?

4

2 回答 2

1

您可以通过删除与最小特征值对应的特征向量来降低维数。保留多少特征向量是您必须做出的决定(例如,您可能决定保留足够的特征向量/特征值,以使保留的特征值之和至少为所有特征值之和的 99%)。当您收到一张新图像时,您可以通过将其投影到保留的特征向量上来降低其维度(即,将图像向量与每个保留的特征向量进行点积)。

识别两张脸是否相似完全是另一个问题。PCA 只处理降维 - 它不是分类器。您仍然需要选择一种分类算法,该算法应基于多种考虑(图像的大小和特征,是否有同一个人的多张图像,是否有不同的视角/距离等)

于 2013-11-06T17:37:40.207 回答
0

给定一张新的人脸图像,您应该将其表示为特征脸的线性组合。线性组合的系数是您的描述符。这就是降低维度的方式。

于 2013-11-06T17:14:57.153 回答