OpenCV LDA(Linnear Discriminant analysis)类的使用---OpenCV LDA演示样例
1、OpenCV中LDA类的声明
//contrib.hpp class CV_EXPORTS LDA
{
public:
// Initializes a LDA with num_components (default 0) and specifies how
// samples are aligned (default dataAsRow=true).
LDA(int num_components = 0) :
_num_components(num_components) {}; // Initializes and performs a Discriminant Analysis with Fisher's
// Optimization Criterion on given data in src and corresponding labels
// in labels. If 0 (or less) number of components are given, they are
// automatically determined for given data in computation.
LDA(const Mat& src, vector<int> labels,
int num_components = 0) :
_num_components(num_components)
{
this->compute(src, labels); //! compute eigenvectors and eigenvalues
} // Initializes and performs a Discriminant Analysis with Fisher's
// Optimization Criterion on given data in src and corresponding labels
// in labels. If 0 (or less) number of components are given, they are
// automatically determined for given data in computation.
LDA(InputArrayOfArrays src, InputArray labels,
int num_components = 0) :
_num_components(num_components)
{
this->compute(src, labels); //! compute eigenvectors and eigenvalues
} // Serializes this object to a given filename.
void save(const string& filename) const; // Deserializes this object from a given filename.
void load(const string& filename); // Serializes this object to a given cv::FileStorage.
void save(FileStorage& fs) const; // Deserializes this object from a given cv::FileStorage.
void load(const FileStorage& node); // Destructor.
~LDA() {} //! Compute the discriminants for data in src and labels.
void compute(InputArrayOfArrays src, InputArray labels); // Projects samples into the LDA subspace.
Mat project(InputArray src); // Reconstructs projections from the LDA subspace.
Mat reconstruct(InputArray src); // Returns the eigenvectors of this LDA.
Mat eigenvectors() const { return _eigenvectors; }; // Returns the eigenvalues of this LDA.
Mat eigenvalues() const { return _eigenvalues; } protected:
bool _dataAsRow;
int _num_components;
Mat _eigenvectors;
Mat _eigenvalues; void lda(InputArrayOfArrays src, InputArray labels);
};
2、演示样例
// LDA.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include <contrib\contrib.hpp>
#include <cxcore.hpp>
using namespace cv;
using namespace std; int main(void)
{
//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
vector<int>labels;
for(int i=0;i<mat.rows;i++)
{
if(i<mat.rows/2)
{
labels.push_back(0);
}
else
{
labels.push_back(1);
}
} //do LDA
LDA lda=LDA(mat,labels);
//get the eigenvector
Mat eivector=lda.eigenvectors().clone(); cout<<"The eigenvector is:"<<endl;
for(int i=0;i<eivector.rows;i++)
{
for(int j=0;j<eivector.cols;j++)
{
cout<<eivector.ptr<double>(i)[j]<<" ";
}
cout<<endl;
} //针对两类分类问题,计算两个数据集的中心
int classNum=2;
vector<Mat> classmean(classNum);
vector<int> setNum(classNum); for(int i=0;i<classNum;i++)
{
classmean[i]=Mat::zeros(1,mat.cols,mat.type());
setNum[i]=0;
} Mat instance;
for(int i=0;i<mat.rows;i++)
{
instance=mat.row(i);
if(labels[i]==0)
{
add(classmean[0], instance, classmean[0]);
setNum[0]++;
}
else if(labels[i]==1)
{
add(classmean[1], instance, classmean[1]);
setNum[1]++;
}
else
{}
}
for(int i=0;i<classNum;i++)
{
classmean[i].convertTo(classmean[i],CV_64FC1,1.0/static_cast<double>(setNum[i]));
} vector<Mat> cluster(classNum);
for(int i=0;i<classNum;i++)
{
cluster[i]=Mat::zeros(1,1,mat.type());
multiply(eivector.t(),classmean[i],cluster[i]);
} cout<<"The project cluster center is:"<<endl;
for(int i=0;i<classNum;i++)
{
cout<<cluster[i].at<double>(0)<<endl;
} system("pause");
return 0;
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2pjMjExMzIy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
OpenCV LDA(Linnear Discriminant analysis)类的使用---OpenCV LDA演示样例的更多相关文章
- 多线程本地图片载入演示样例【OpenCV】【Pthread】
Pthread barrier的简单使用演示样例: C++代码例如以下: // ThreadingLoadImages.cpp : 定义控制台应用程序的入口点. // #include "s ...
- Java线程演示样例 - 继承Thread类和实现Runnable接口
进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...
- Java 嵌套类和内部类演示样例<二>
嵌套类(nested class)是一个在还有一个类或接口内部声明的类. 嵌套类分为两种:静态内部类(static inner class)和非静态嵌套类(non-static nested clas ...
- Java 嵌套类和内部类演示样例<三>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-s ...
- Python类的继承演示样例
class Pet: __name = "" def __init__(self, name): self.__name = name def bark(self): return ...
- DM8168 OpenCV尝试与评估(编译ARM版OpenCV)
交叉编译opencv2.3.1,并在DM8168 cortex A8中执行图像处理. 开发环境: PC:ubuntu12.04LTS.Intel Core 2 Duo CPU E7200@2. ...
- 大数据学习day16------第三阶段-----scala04--------1. 模式匹配和样例类 2 Akka通信框架
1. 模式匹配和样例类 Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句.类型检查等.并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配 1.1 模式匹 ...
- 线性判别分析(Linear Discriminant Analysis,LDA)
一.LDA的基本思想 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD) ...
- 线性判别分析(Linear Discriminant Analysis, LDA)算法分析
原文来自:http://blog.csdn.net/xiazhaoqiang/article/details/6585537 LDA算法入门 一. LDA算法概述: 线性判别式分析(Lin ...
随机推荐
- 【POJ2887】【块状链表】Big String
Description You are given a string and supposed to do some string manipulations. Input The first lin ...
- gulp Tips
npm配置相关属性用于寻找全局安装的module npm install --save-dev 本地安装 在gulp.src()里指定取用文件的语法是,在[ ]中以字符串形式填写文件名,用&qu ...
- dedecms织梦二级菜单的实现方法
首先,复制代码: 程序代码 {dede:channelartlist typeid='top' cacheid='channelsonlist'} {dede:channel type='son' n ...
- A Script Pro nginx URL重写规则无法播放MP4解决方法
I am using nginx and I have already add the line location /file/ { rewrite ^/-]+)/([-]+)/([^/]*)/([- ...
- TatukGIS - GisDefs - DateTimeToXMLString 函数
函数名称 DateTimeToXMLString 所在单元 GisDefs 函数原型 function DateTimeToXMLString(_dtm: TDateTime; ...
- Obj-C的hello,world 1
不得不说,Obj-C所谓的中缀表达式真的蛮奇怪的,当无参或者只有一个参数时看起来还不错: //无参数的方法 -(void) say; [employee say]; //只有一个参数的方法 -(voi ...
- ExtJS 4 树
Tree Panel是ExtJS中最多能的组件之一,它非常适合用于展示分层的数据.Tree Panel和Grid Panel继承自相同的基类,所以所有从Grid Panel能获得到的特性.扩展.插件等 ...
- 转:使用 Docker 搭建 Java Web 运行环境
原文来自于:http://www.codeceo.com/article/docker-java-web-runtime.html Docker 是 2014 年最为火爆的技术之一,几乎所有的程序员都 ...
- SharePoint REST api
http://msdn.microsoft.com/en-us/magazine/dn198245.aspx Understanding and Using the SharePoint 2013 R ...
- hdu-2768-Cat vs. Dog(二分图-最大匹配数)
题意: 有猫C个和狗D个,有V个投票人,每个人喜欢猫讨厌狗或则喜欢狗讨厌猫! 求最多能满足多少投票人. 分析: 两个投票者矛盾的话就连一条边,总数减去最大匹配数/2就是要求的答案 // File Na ...