第二种人脸识别的经典算法是Fsiher算法,也称之为线性判别分析,我最先看到这个算法是在周志华老师的《机器学习》中,没想到在人脸识别上也有应用。
这个算法的思路和PCA差不太多,都是着眼于图像全局考虑,PCA考虑的是如何确定一组正交基可以使数据降维,线性判别分析则是考虑如何确定一组投影向量可以让数据集在投影钟尽可能大的相互区分。直观上看,区分为非就是类与类之间的差别应该更大,而类内的数据应该更加聚合。这两个指标需要在数学上定义一定的指标来衡量,从而求解出最好的投影向量。
继续做搬运工。。。。
http://blog.csdn.net/smartempire/article/details/23377385,这篇博客LDA的理论和实现讲得非常透彻了,一篇就够了!看完这篇博客你就会发现LDA的理论推导确实有些复杂,涉及的数学知识也比较多,但是它落地不难,因为你可以不看中间的推导过程,直接抓住他最后的公式编码,这不影响你做出最后结果。
程序中因为涉及到了类内的均值向量的计算,因此在组织数据的时候与PCA有不同。
代码如下:
#encoding=utf-8
import numpy as np
import cv2
import os
class FisherFace(object):
def __init__(self,threshold,k,dsize):
self.threshold = threshold # 阈值,暂未使用
self.k = k # 指定投影w的个数
self.dsize = dsize # 统一尺寸大小
def loadImg(self,fileName,dsize):