python - 如何使用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
解决方案
特征面在 eigenVector 中从上到下排序。(按特征值,从大到小)。因此,只需输出前 N 个特征面。通常为了显示我们需要将平均脸添加到特征脸并显示结果图像。
真正的特征面是人脸图像空间中的 ND 轴,平均人脸是原点,特征值与沿某个轴(特征面)设置的输入面的离散度成正比。首先(在您的情况下为“最佳”)是具有最大方差的轴。
因此,如果在人脸空间中思考,人脸是本征空间中的一个点,您可以像往常一样对任何人脸进行合成
人脸(C1,C2,..,CN)=mean_face+ C1*eigen_face1+C2*eigen_face2+...CN*eigen_faceN
您也可以将任何面投影到特征空间并获得它的 C1,C2,...,CN 坐标。
使用这些坐标,您可以找到人脸之间的“距离”,它通常用于比较人脸。
推荐阅读
- android - 错误 MSB4094:如何归档我的项目?
- python - ImportError:没有名为 geoip2.database 的模块
- express - nodemailer 总是发送相同的响应, res.send() 不起作用
- html - 如何使 Bootstrap Columns 具有相同的高度?
- python - 从电报频道获取信号并使用 Python 将它们放入 MT4
- xslt - XSLT 转换:将节点的内容移动到一个节点
- git - 从远程强制删除 Git 分支
- c# - 在获得同意时,系统会提示我登录我的开发者帐户(但我可以跳过这个吗?)
- visual-studio-code - 有没有办法抑制 Julia REPL 中伴随错误的堆栈跟踪?
- flutter - 处理 CustomPainter - Flutter 上的点击