eigenface实现人脸识别
采用PCA方法,利用YALE的人脸数据库做人脸识别,15个人,165张图片,每张图片大小为100*100
这里yale文件中是源图片,通过changename.py将名字更改,存放到picture文件下
eigenface具体步骤
1.读取训练所需要的图片,这里使用subjectxx.normal.bmp文件,共15张图片,每张图片拉直为一个(1,100*100)的向量,合并成为一个(15,100*100)的大矩阵
import numpy as np
import cv2
import os
def loadImageSet(add):
FaceMat = np.mat(np.zeros((15,100*100)))
j =0
for i in os.listdir(add):
if i.split('.')[1] == 'normal':
try:
img = cv2.imread(os.path.join(add,i),0)
#0表示读取灰度图
except:
print('load %s failed'%i)
#变成一个向量
j += 1
return FaceMat
2.计算平均矩阵avgImg,得到偏差矩阵diffTrain(以下推导中记偏差矩阵为T)
FaceMat = loadImageSet('picture').T
avgImg = np.mean(FaceMat,1)
diffTrain = FaceMat-avgImg
3.计算协方差矩阵S=TTTS=TTT,注意到T的大小为(100∗100,15)T的大小为(100∗100,15),S将会巨大(100∗100,100∗100)S将会巨大(100∗100,100∗100),为了避免计算大矩阵特征值,特征向量,采用如下方法。
T