我正在使用特征脸来实现人脸识别迷你项目。
我已成功完成计算机并将特征脸保存到文件夹中。使用:
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
})
然后将它们保存到文件中。
下一步应该是什么?我究竟如何减少维度,然后用它来识别给定面孔是否与另一个相似?
答案 0 :(得分:1)
通过移除与最小特征值对应的特征向量来减少维数。您保留多少个特征向量是您必须做出的决定(例如,您可能决定保留足够的特征向量/特征值,使得保留的特征值之和至少为所有特征值之和的99%)。当您收到一个新图像时,可以通过将其投影到保留的特征向量来减小其维数(即,将图像向量的点积与每个保留的特征向量相乘)。
认识到两个面是否相似完全是另一个问题。 PCA仅处理降维 - 它不是分类器。您仍然需要选择一种分类算法,该算法应该基于许多考虑因素(图像的大小和特征,是否有相同人物的多个图像,是否有不同的视角/距离等)。 p>
答案 1 :(得分:0)
给定一个新的人脸图像,你应该把它表示为特征脸的线性组合。线性组合的系数是您的描述符。这就是你如何减少维度。