- LDA原理(在低维表示下,相同的类应该紧紧的聚在一起,而不同的类别尽量距离越远)
统计学方法(Fisher)
最大类间方差
最小类内方差
- 过程:
输入数据->减去均值->计算离散矩阵->计算特征值与特征向量->计算前K个最大特征值对应特征向量->投影到子空间->终止
- PCA与LDA差别
PCA:每个主成分轴指向最大方差方向
LDA:最大化主成分轴在不同类之间
Ptr<BasicFaceRecognizer> model = FisherFaceRecognizer::create();
#include <opencv2/opencv.hpp>
#include <opencv2/face.hpp>
#include <iostream>
using namespace std;
using namespace cv;
using namespace cv::face;
int main(int argc, char** argv)
{
String filename = string("face_image.txt");
ifstream file(filename.c_str(), ifstream::in);
if (!file)
{
cout << "could not load label_file" << endl;
return -1;
}
string line, path, classlabel;
vector<Mat> images;
vector<int> labels;
char separator = ';';
while (getline(file, line))
{
stringstream liness(line);
getline(liness, path, separator)