困在Eigenfaces,PCA

时间:2013-11-06 17:10:15

标签: machine-learning computer-vision face-recognition pca dimensionality-reduction

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

我已成功完成计算机并将特征脸保存到文件夹中。使用:

  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
  })  

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

下一步应该是什么?我究竟如何减少维度,然后用它来识别给定面孔是否与另一个相似?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

给定一个新的人脸图像,你应该把它表示为特征脸的线性组合。线性组合的系数是您的描述符。这就是你如何减少维度。