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=TTT S = T T T ,注意到 T的大小为(100∗100,15) T 的 大 小 为 ( 100 ∗ 100 , 15 ) , S将会巨大(100∗100,100∗100) S 将 会 巨 大 ( 100 ∗ 100 , 100 ∗ 100 ) ,为了避免计算大矩阵特征值,特征向量,采用如下方法。
T