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 ...
随机推荐
- Qt Quick 与 QML语言(初学笔记1)
Qt Quick Qt Quick是一些新的UI技术的集合,用来帮助开发者创建一种现在越来越多用于手机.多媒体播放器.机顶盒以及其他便携式设备上的直观的.现代的.流畅的用户界面.简单来说,Qt Qui ...
- 读书笔记之 - javascript 设计模式 - 组合模式
组合模式是一种专为创建Web上的动态用户界面而量身定制的模式,使用这种模式,可以用一条命令在对各对象上激发复杂的或递归的行为. 在组合对象的层次体系中有俩种类型对象:叶对象和组合对象.这是一个递归定义 ...
- 用jq 做了一个排序
<ul id="cont"> <li data="5">5</li> <li data="1"&g ...
- phpcms V9 内容模型管理(转)
转自:http://www.cnblogs.com/Braveliu/p/5102627.html [1]理解模型 模型,系统知识的抽象表示.既然抽象了,那就得脑补一下.大家都是面向对象设计的专业人员 ...
- [转]iframe自适应宽度高度
<iframe id="iframe" onLoad="AutoFit();" frameborder="0" scrolling=& ...
- .net软件工程师面试题(参考答案)
一.填空题(每空1分,共12分) 1面向对象的语言具有__封装______性.__继承_______性.__多态______性. 2能用foreach遍历访问的对象需要实现 ____Ienumerab ...
- python django 自定义 装饰器
# -*-coding:utf-8-*- __author__ = "GILANG (pleasurelong@foxmail.com)" """ d ...
- NameNode元数据的管理机制(三)
元数据的管理: 第一步:客户端通过DistributedFilesystem 对象中的creat()方法来创建文件,此时,RPC会 通过一个RPC链接协议来调用namenode,并在命名空间中创建一个 ...
- SharePoint 2013 如何使用TaxonomyWebTaggingControl 控件
在该文章中,我将介绍如何使用TaxonomyWebTaggingControl控件, 首先我相信您已经在SharePoint Managed Metadata Service里定义Term Sets, ...
- 从一到二:利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试
通过从零到一的教程,我们已经得到了通过mnist训练集生成的caffemodel,主要包含下面四个文件: 接下来就可以利用模型进行测试了.关于测试方法按照上篇教程还是选择bat文件,当然python. ...