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 ...
随机推荐
- 【BZOJ3673】【可持久化并查集】可持久化并查集 by zky
Description n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的状态(查询算作操作)3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n ...
- Linux下ln链接命令详解
ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件. 当我们需要在不同的目录,用到相同的 ...
- windows7 64 位 mysql 5.6.12 安装
1.修改 my-default.ini 改名为 my.ini 内容修改为 [mysqld] loose-default-character-set = utf8 basedir = D:/mys ...
- YZOI回忆录&&YZOI3.0介绍&&某些资源的分享
“那段时光就像块透明的琉璃,美得那么虚幻.飘渺.可是它毕竟在我生命里闪现,哪怕如萤光一样微弱,却照亮了我整个心房.”1.前序伴随着yzoi2.0版本离我而去的是我半年的OI生涯,在这半年内我步入了一个 ...
- ThinkPHP 自动验证与自动填充无效可能的原因
原文链接:http://www.5idev.com/p-thinkphp_validate_auto_Invalid.shtml 自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇 ...
- QTP10破解
1. 下载QTP10.0版本 http://h30302.www3.hp.com/prdownloads/T6510-15063.zip?ordernumber=380454070&itemi ...
- 使用Echarts的五个步骤
_liuz 2015-07-22 09:35:53 参考网址:http://echarts.baidu.com/doc/start.html 一.制作一个图表容器<div id="m ...
- JSP语法
第3章 JSP语法 [本章专家知识导学] JSP是建立在Java语言基础上的一种Web程序设计语言,具有自己特有的用法和指令.本章首先介绍JSP页面的程序结构,然后讲述JSP程序中经常用到基本的面向 ...
- GO:格式化代码
http://www.ituring.com.cn/article/39380 Go 开发团队不想要 Go 语言像许多其它语言那样总是在为代码风格而引发无休止的争论,浪费大量宝贵的开发时间,因此他们制 ...
- 【MySQL】SQL语法,between and 使用注意事项
业务代码中有条查询学生姓名的sql: select stu_name from stu_info where stu_id between id_1 and id_2; 估计当时一时恍惚,拼接sql时 ...