我正在使用此链接:https://www.learnopencv.com/eigenface-using-opencv-c-python/以获取图像和特征脸的平均脸。
# Compute the eigenvectors from the stack of images created
print("Calculating PCA ", end="...")
mean, eigenVectors = cv2.PCACompute(data, mean=None, maxComponents=NUM_EIGEN_FACES)
print ("DONE")
averageFace = mean.reshape(sz)
eigenFaces = [];
for eigenVector in eigenVectors:
eigenFace = eigenVector.reshape(sz)
eigenFaces.append(eigenFace)
但是我不知道如何获得像这张照片一样的顶级特征脸image example top eigenfaces
源代码github
特征脸在特征向量中从上到下排序。 (按特征值,从最大到最小)。所以刚出第一张N本征脸。通常,为了显示,我们需要在特征脸上添加均值脸并显示结果图像。
真正的特征脸是脸部图像空间中的ND轴,平均脸部是原点,特征值与沿特定轴(特征脸部)设置的输入脸部的离散度成比例。首先(在您的情况下为“最佳”)是方差最大的轴。
因此,如果在脸部空间中思考,则脸部是本征空间中的一个点,您可以将任何脸部作为通常的点进行合成
face(C1,C2,..,CN)= mean_face + C1 * eigen_face1 + C2 * eigen_face2 + ... CN * eigen_faceN
您也可以将任何人脸投影到特征空间并获得C1,C2,...,CN坐标。
使用这些坐标,您可以找到面孔之间的“距离”,通常用于比较面孔。