cv2 EigenFace(特征脸)

72 篇文章 6 订阅

本文主要介绍cv2模块中EigenFace(特征脸),EigenFace可用来实现人脸识别。

参考自:https://blog.csdn.net/loveliuzz/article/details/73810334

cv2中face子模块目前支持的算法有:

        (1)主成分分析(PCA)——Eigenfaces(特征脸)——函数:cv2.face.EigenFaceRecognizer_create()

PCA:低维子空间是使用主元分析找到的,找具有最大方差的哪个轴。

缺点:若变化基于外部(光照),最大方差轴不一定包括鉴别信息,不能实行分类。

        (2)线性判别分析(LDA)——Fisherfaces(特征脸)——函数: cv2.face.FisherFaceRecognizer_create()

LDA:线性鉴别的特定类投影方法,目标:实现类内方差最小,类间方差最大。

        (3)局部二值模式(LBP)——LocalBinary Patterns Histograms——函数:cv2.face.LBPHFaceRecognizer_create()

PCA和LDA采用整体方法进行人脸辨别,LBP采用局部特征提取,除此之外,还有的局部特征提取方法为:

<
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PCA(Principal Component Analysis)是一种常用的数据降维方法,而特征脸是PCA在图像处理中的应用。下面是PCA特征脸的Python实现: 1.导入必要的库和数据 ```python import numpy as np import cv2 import os # 读取图像数据 def read_images(path, sz=None): c = 0 X, y = [], [] for dirname, dirnames, filenames in os.walk(path): for subdirname in dirnames: subject_path = os.path.join(dirname, subdirname) for filename in os.listdir(subject_path): try: if not filename.endswith('.pgm'): continue filepath = os.path.join(subject_path, filename) im = cv2.imread(filepath, cv2.IMREAD_GRAYSCALE) if sz is not None: im = cv2.resize(im, sz) X.append(np.asarray(im, dtype=np.uint8)) y.append(c) except IOError as e: print("I/O error({0}): {1}".format(e.errno, e.strerror)) except: print("Unexpected error:", sys.exc_info()[0]) raise c = c+1 return [X,y] ``` 2.计算特征脸 ```python # 计算特征脸 def compute_eigenface(X): # 将图像数据转换为矩阵 X = np.asarray(X) # 计算均值脸 mean_face = X.mean(axis=0) # 将每个样本向量减去均值脸 X = X - mean_face # 计算协方差矩阵 cov = np.dot(X.T, X) # 计算特征值和特征向量 eigenvalues, eigenvectors = np.linalg.eig(cov) # 将特征向量按照特征值从大到小排序 idx = eigenvalues.argsort()[::-1] eigenvectors = eigenvectors[:,idx] # 取前k个特征向量 k = 10 topk_evecs = eigenvectors[:,:k] # 计算特征脸 eigenface = np.dot(X, topk_evecs) return eigenface, topk_evecs, mean_face ``` 3.计算训练样本在特征脸空间的投影 ```python # 计算训练样本在特征脸空间的投影 def compute_eigen_train_sample(normTrainFaceMat, eigenface): eigen_train_sample = np.dot(normTrainFaceMat, eigenface) return eigen_train_sample ``` 4.计算测试样本在特征脸空间的投影 ```python # 计算测试样本在特征脸空间的投影 def compute_eigen_test_sample(normTestFaceMat, eigenface): eigen_test_sample = np.dot(normTestFaceMat, eigenface) return eigen_test_sample ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cchangcs

谢谢你的支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值