图像组训练过程的PCA和LDA应用方法

前言

       在图像的训练中,通常会把图像的每一个像素看做是一个变量,所以在图形训练的时候,变量的个数非常多,继而出现比较大的问题是变量之间往往有很多存在相关性,变量间的相关性会造成信息的重叠和分析的复杂性,所以使用主成分分析(Principal Componen Analys,简称“PCA”)进行降维是一个基本的方法。

       当使用了PCA进行降维后,我们介绍一个简单的分类器:线性判别方法(Linear Discriminant Analysis,简称“LDA”),虽然说这两个分析算法都是很基础的算法,但是在实际使用中效果还是很突出的,特别是如果待分类的数据本身是有一定的规则转化而来的,例如,通过旋转而产生的不同角度的数据,等等。

       这两个算法的数学解释就不在这里讨论了,详细可以参考本文参考内容里面的书籍,非常详细的讲解了这两个算法,我也是通过研读该书籍来学习的。

 

PCA操作方法

1. 将所有待分析的图像标准化后放到src的图像数组(vector类型也可以)中。

for(int i = 1; i <= 15; i++)
    {
        stringstream ss;
        string num;
        ss<>num;//将字符串流中的数据传入num,这2句代码即把数字转换成字符
        string image_name = ("./images/" + num + ".pgm");//需要读取的图片全名
        src.push_back(imread(image_name, 0));
    }
    total= src[0].rows*src[0].cols;

 

2.mat数组用来存放读取进来的所有图片的数据,其中mat的每一列对应1张图片。

Mat mat(total, src.size(), CV_32FC1);
    for(int i = 0; i < src.size(); i++)
    {
        Mat col_tmp = mat.col(i);
        src[i].reshape(1, total).col(0).convertTo(col_tmp, CV_32FC1, 1/255.);
    }


3.使用PCA构造函数。

int number_principal_compent = 12;//保留最大的主成分数
    //构造pca数据结构
    PCA pca(mat, Mat(), CV_PCA_DATA_AS_COL, number_principal_compent);

其中,pca.eigenvectors中的每一行代表输入数据协方差矩阵一个特征向量

 

4.将原始数据通过PCA方向投影,即通过特征向量的前面几个作用后的数据。

dst = pca.project(mat);

 

5.如果要还原某张图的主成分图,可用以下方法:

//将Mat内的内容归一化到0~255,归一化后的类型为但通道整型
Mat PCA::normalize(const Mat& src) {
    Mat srcnorm;
    cv::normalize(src, srcnorm, 0, 255, NORM_MINMAX, CV_8UC1);
    return srcnorm;
}
pca_img = normalize(pca.eigenvectors.row(0)).reshape(1, src[0].rows);//第一张训练图的主成分图



 

LDA操作方法

1. LDA使用样例:

//sampledata  
    double sampledata[6][2]={{0,1},{0,2},{2,4},{8,0},{8,2},{9,4}};  
    Mat mat=Mat(6,2,CV_64FC1,sampledata);  
    //labels  
    vectorlabels;  
    for(int i=0;i(i)[j]<<" ";  
        }  
        cout< classmean(classNum);  
    vector setNum(classNum);  
  
    for(int i=0;i(setNum[i]));  
    }  
  
    vector cluster(classNum);  
    for(int i=0;i(0)<

 

2. 只要把PCA得到的dst调整为LDA的输入数据,添加Label数据,即可进行分析。

参考书籍

1.《应用多远统计分析》高惠璇

2. 《统计学习基础 The Elements of Statistical Learning》

 

转载请注明出处:http://blog.csdn.net/luoyun614/article/details/42726405

你可能感兴趣的:(【算法设计】,opencv,图像处理)