基于 ORL 人脸库,基于 Fisher 线性分类器实现多类人脸的识别问题。
本次实验相比起之前的二分类人脸识别问题,复杂很多。而且程序的识别效果并不好,应该是程序本身的问题,各位路过的大佬仅当做参考,有不对的地方希望批评指正。
本次实验实现的是基于Fisher线性分类器的人脸四分类问题。
1.图像处理
def Get_img(file_path):
train_set = np.zeros(shape=[1,32*32])
# print(file_path)
for filename in os.listdir(file_path):
img = cv2.imread(file_path+'/'+filename,cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img,(32,32))#调整一下图片的大小,之前图片比较大,后面计算的时候不太方便
n,m = img.shape
res = img.reshape(1,n*m).tolist()
train_set = np.row_stack((train_set,res))
return train_set
2.Fisher函数
四分类的Fisher函数大部分与二分类的Fisher函数相同,但是也有不一样的,具体的可以参考学长的一篇博客,只不过这是Matlab版本的。
def Fisher(w1,w2,w3,w4,W):
w1 = w1.T
w2 = w2.T
w3 = w3.T
w4 = w4.T
W = W.T
sz1 = np.size(w1,1)
sz2 = np.size(w2,1)
sz3 = np.size(w3,1)
sz4 = np.size(w4,1)
#第一步:计算样本均值向量
avg1 = np.mean(w1, axis=