我正在实施一个使用特征脸的人脸识别小项目。
我有成功的计算机,并将特征脸保存到一个文件夹中。使用:
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
})
然后把它们保存到文件中。
我下一步该做什么?我如何降低维度,然后再用它来识别出一张脸是否与另一张相类似?
发布于 2013-11-06 09:37:40
通过删除对应于最小特征值的特征向量来降低维数。保留多少特征向量是您必须做出的决定(例如,您可以决定保留足够的特征向量/特征值,以便保留的特征值之和至少是所有特征值之和的99% )。当你收到一幅新的图像时,你把它的维数投射到保留的特征向量上(即取图像向量的点乘积和每个保留的特征向量)。
如果两张脸是相似的,则完全是另一个问题。PCA只处理降维问题--它不是分类器。您仍然需要选择一个分类算法,它应该基于许多考虑因素(图像的大小和特征、同一人的多幅图像、是否有不同的视角/距离等)。
发布于 2013-11-06 09:14:57
给定一个新的人脸图像,您应该将它表示为特征脸的线性组合。线性组合的系数是你的描述符。这就是你降低维数的方法。
https://stackoverflow.com/questions/19818306
复制