人脸识别(2)--fisherface
来源:互联网 发布:linux ant 环境变量 编辑:程序博客网 时间:2024/06/10 03:05
Fisherface与Eigenface思路差不多,都是从整体上对图像信息做主成分分析。
不同的是,Fisherface认为同一个人由于光照和角度带来的差异往往要大于不同人之间的差异,而Eigenface单纯的提取主成分可能得到的是一个类别不同光照条件的特征。
因此Fisherface试图最大化类间散度同时最小化类内散度。算法实现上则是首先PCA做初步筛选,然后以类间散度和类内散度为准则做LDA(Linear Discriminant Analysis,线性判别分析)。
线性判别分析(LDA)推导1
(1) 两类的情况
在线性代数中,矩阵的左乘
对第i类
假设存在映射
一个理想的映射
结合上面两个式子,当J(w)取极大值时对应最佳w:
其中
记
那么原始数据的类内散度为
投影后的类内散度为
考虑
由此,得到优化函数的最终表达:
可以用拉格朗日乘数法求解该式取极大值的w,将分母作为限定条件(令
这样有
对w求偏导,取0有
上式两边同乘以
容易看到,欲求的w就是
(2) 多类的情况
与两类的过程一样,但类内散度和类间散度有一点差别。
类内散度:
其中
类间散度:
其中
由此,易得投影后的类内散度和类间散度:
注:
算法实现
OpenCV2.4以上版本封装了Fisherface的实现,这里有C++的官方例程
bytefish有详细的算法解释,并提供了matlab和python的实现
实验发现,对于训练的样本(FERET),测试结果精度就很高,OpenCV提供的接口无论是Eigenface还是Fisherface都能达到95%以上,但对于未被用于训练的样本,识别精度很低(bytefish在40%左右,OpenCV仅有8%)。说明Eigenface和Fisherface的泛化能力较差。
图1. OpenCV的Fisherface接口(a)使用未参加训练的样本分类精度;(b)使用参加训练的样本分类精度
- 人脸识别(2)--fisherface
- 人脸识别之—-FisherFace
- 人脸识别经典算法三:Fisherface(LDA)
- 人脸识别经典算法三:Fisherface(LDA)
- 人脸识别经典算法三:Fisherface(LDA)
- 人脸识别经典算法三:Fisherface(LDA)
- 人脸识别经典算法三:Fisherface(LDA)
- 人脸识别经典算法:Fisherface(LDA)
- 人脸识别经典算法三:Fisherface(LDA)
- FisherFace 进行人脸分裂
- 基于OpenCV的EigenFace FisherFace LBPHFace人脸识别的实现
- 基于OpenCV的EigenFace FisherFace LBPHFace人脸识别的实现
- OpenCV人脸识别实验(二)——特征脸(fisherface)及其重构的源代码详解
- fisherface
- 特征脸EigenFace、Fisher脸FisherFace、LBP直方图LBPHFace
- 语音识别&人脸识别
- 人脸识别(2)--Python3.6+OpenCV3.2识别实例
- opencv人脸识别2
- Linux基础-CP和SCP的学习笔记
- Java 7之基础 - 强引用、弱引用、软引用、虚引用
- 深入理解 vertical-align
- 网络流(草地排水)
- android studio 转为eclipse快捷键后还存在的问题汇总
- 人脸识别(2)--fisherface
- sudo fastboot not found and no permissions
- 达内学习笔记——MFC中数据交换过
- JavaScript中如何给按钮设置隐藏与显示属性
- HDU:2094 产生冠军
- python time\datatime\string直接转换
- 机器学习第一个练手程序 基于决策树的iris数据预测
- Python编码问题
- ActiveMQ的消息过滤器