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 ...
随机推荐
- Getopt::Long 模块的简单使用
用法简介 1.带值参数传入程序内部 ※参数类型:整数, 浮点数, 字串 GetOptions( 'tag=s' => \$tag ); ‘=’表示此参数一定要有参数值, 若改用’:'代替表示参数 ...
- 第三篇、调优之路 Apache调优
1. 简介 在第一篇中整合了apache + tomcat ,利用了apache解析静态文件为tomcat解压.但是在测试机上发现两者性能不足,不能充分利用服务器的性能,该篇中将对apache进行性 ...
- C#DateTimePicker设置自定义格式
摘自Microsoft TechNet DateTimePicker.CustomFormat 属性 包含日期和时间分隔符的显示字符串文字或格式字符串,必须在子字符串中使用转义符. 例如,若要显示将日 ...
- ajax验证用户名和找回密码参考
// JavaScript Document function chkname(form){ var user = form.user.value; if(user == ''){ alert('请输 ...
- 百度编辑器ueditor如何配置
完全版: 1.加载 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" ...
- DbUtils组件
DbUtils组件 DbUtils组件, 1. 简化jdbc操作 2. 下载组件,引入jar文件 : commons-dbutils-1.6.jar |-- DbUtils 关闭资源.加载驱动 |-- ...
- CodeChef FNCS
题面:https://www.codechef.com/problems/FNCS 题解: 我们考虑对 n 个函数进行分块,设块的大小为S. 每个块内我们维护当前其所有函数值的和,以及数组中每个元素对 ...
- BZOJ 1263 整数划分
Description 从文件中读入一个正整数\(n\).要求将\(n\)写成若干个正整数之和,并且使这些正整数的乘积最大. 例如,\(n=13\),则当\(n\)表示为\(4+3+3+3\)(或\( ...
- SaaS是个不错的生意模式和创业的选择(独立SAAS厂商的三大优势)
1. 软件独特而又强大,界面绝美2. 数据存在本国3. 数据不留底 4. 可随时寻求卖身或者合作,不受制于人 --------------------------------------------- ...
- Unity NGUI中动态添加和删除sprite
(以后,参考链接和作者将在文章首部给出,转载请保留此部分内容) 参考链接:http://www.narkii.com/club/thread-299977-1.html,作者:纳金网 比巴卜: 参考链 ...