如何使用opencv-python获得最佳特征面



我正在使用此链接: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)

但我不知道如何获得像这张图片中的顶部本征面示例顶部本征面的

源代码github

特征面在特征向量中从上到下排序。(按特征值,从大到小(。所以,只需要找出前N个本征面。通常为了显示,我们需要将平均脸添加到特征脸上,并显示生成的图像。

真正的特征面是人脸图像空间中的ND轴,平均面是原点,特征值与沿某一轴设置的输入面(特征面(的色散成比例。首先(在您的情况下为"最佳"(是具有最大方差的轴。

因此,如果在面空间中思考,面是特征空间中的一个点,你可以将任何面视为通常的点

面(C1,C2,..,CN(=平均面+C1*特征面1+C2*特征面2+。。。CN*特征面

你可以把任何一个面投影到本征空间,得到它的C1,C2,。。。,CN坐标。

使用这些坐标可以找到面之间的"距离",通常用于比较面。

最新更新