1、OpenCV中LDA类的声明

  1. //contrib.hpp
  2.  
  3. class CV_EXPORTS LDA
  4. {
  5. public:
  6. // Initializes a LDA with num_components (default 0) and specifies how
  7. // samples are aligned (default dataAsRow=true).
  8. LDA(int num_components = 0) :
  9. _num_components(num_components) {};
  10.  
  11. // Initializes and performs a Discriminant Analysis with Fisher's
  12. // Optimization Criterion on given data in src and corresponding labels
  13. // in labels. If 0 (or less) number of components are given, they are
  14. // automatically determined for given data in computation.
  15. LDA(const Mat& src, vector<int> labels,
  16. int num_components = 0) :
  17. _num_components(num_components)
  18. {
  19. this->compute(src, labels); //! compute eigenvectors and eigenvalues
  20. }
  21.  
  22. // Initializes and performs a Discriminant Analysis with Fisher's
  23. // Optimization Criterion on given data in src and corresponding labels
  24. // in labels. If 0 (or less) number of components are given, they are
  25. // automatically determined for given data in computation.
  26. LDA(InputArrayOfArrays src, InputArray labels,
  27. int num_components = 0) :
  28. _num_components(num_components)
  29. {
  30. this->compute(src, labels); //! compute eigenvectors and eigenvalues
  31. }
  32.  
  33. // Serializes this object to a given filename.
  34. void save(const string& filename) const;
  35.  
  36. // Deserializes this object from a given filename.
  37. void load(const string& filename);
  38.  
  39. // Serializes this object to a given cv::FileStorage.
  40. void save(FileStorage& fs) const;
  41.  
  42. // Deserializes this object from a given cv::FileStorage.
  43. void load(const FileStorage& node);
  44.  
  45. // Destructor.
  46. ~LDA() {}
  47.  
  48. //! Compute the discriminants for data in src and labels.
  49. void compute(InputArrayOfArrays src, InputArray labels);
  50.  
  51. // Projects samples into the LDA subspace.
  52. Mat project(InputArray src);
  53.  
  54. // Reconstructs projections from the LDA subspace.
  55. Mat reconstruct(InputArray src);
  56.  
  57. // Returns the eigenvectors of this LDA.
  58. Mat eigenvectors() const { return _eigenvectors; };
  59.  
  60. // Returns the eigenvalues of this LDA.
  61. Mat eigenvalues() const { return _eigenvalues; }
  62.  
  63. protected:
  64. bool _dataAsRow;
  65. int _num_components;
  66. Mat _eigenvectors;
  67. Mat _eigenvalues;
  68.  
  69. void lda(InputArrayOfArrays src, InputArray labels);
  70. };

2、演示样例

  1. // LDA.cpp : 定义控制台应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <contrib\contrib.hpp>
  7. #include <cxcore.hpp>
  8. using namespace cv;
  9. using namespace std;
  10.  
  11. int main(void)
  12. {
  13. //sampledata
  14. double sampledata[6][2]={{0,1},{0,2},{2,4},{8,0},{8,2},{9,4}};
  15. Mat mat=Mat(6,2,CV_64FC1,sampledata);
  16. //labels
  17. vector<int>labels;
  18. for(int i=0;i<mat.rows;i++)
  19. {
  20. if(i<mat.rows/2)
  21. {
  22. labels.push_back(0);
  23. }
  24. else
  25. {
  26. labels.push_back(1);
  27. }
  28. }
  29.  
  30. //do LDA
  31. LDA lda=LDA(mat,labels);
  32. //get the eigenvector
  33. Mat eivector=lda.eigenvectors().clone();
  34.  
  35. cout<<"The eigenvector is:"<<endl;
  36. for(int i=0;i<eivector.rows;i++)
  37. {
  38. for(int j=0;j<eivector.cols;j++)
  39. {
  40. cout<<eivector.ptr<double>(i)[j]<<" ";
  41. }
  42. cout<<endl;
  43. }
  44.  
  45. //针对两类分类问题,计算两个数据集的中心
  46. int classNum=2;
  47. vector<Mat> classmean(classNum);
  48. vector<int> setNum(classNum);
  49.  
  50. for(int i=0;i<classNum;i++)
  51. {
  52. classmean[i]=Mat::zeros(1,mat.cols,mat.type());
  53. setNum[i]=0;
  54. }
  55.  
  56. Mat instance;
  57. for(int i=0;i<mat.rows;i++)
  58. {
  59. instance=mat.row(i);
  60. if(labels[i]==0)
  61. {
  62. add(classmean[0], instance, classmean[0]);
  63. setNum[0]++;
  64. }
  65. else if(labels[i]==1)
  66. {
  67. add(classmean[1], instance, classmean[1]);
  68. setNum[1]++;
  69. }
  70. else
  71. {}
  72. }
  73. for(int i=0;i<classNum;i++)
  74. {
  75. classmean[i].convertTo(classmean[i],CV_64FC1,1.0/static_cast<double>(setNum[i]));
  76. }
  77.  
  78. vector<Mat> cluster(classNum);
  79. for(int i=0;i<classNum;i++)
  80. {
  81. cluster[i]=Mat::zeros(1,1,mat.type());
  82. multiply(eivector.t(),classmean[i],cluster[i]);
  83. }
  84.  
  85. cout<<"The project cluster center is:"<<endl;
  86. for(int i=0;i<classNum;i++)
  87. {
  88. cout<<cluster[i].at<double>(0)<<endl;
  89. }
  90.  
  91. system("pause");
  92. return 0;
  93. }

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2pjMjExMzIy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

OpenCV LDA(Linnear Discriminant analysis)类的使用---OpenCV LDA演示样例的更多相关文章

  1. 多线程本地图片载入演示样例【OpenCV】【Pthread】

    Pthread barrier的简单使用演示样例: C++代码例如以下: // ThreadingLoadImages.cpp : 定义控制台应用程序的入口点. // #include "s ...

  2. Java线程演示样例 - 继承Thread类和实现Runnable接口

    进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...

  3. Java 嵌套类和内部类演示样例&lt;二&gt;

    嵌套类(nested class)是一个在还有一个类或接口内部声明的类. 嵌套类分为两种:静态内部类(static inner class)和非静态嵌套类(non-static nested clas ...

  4. Java 嵌套类和内部类演示样例&lt;三&gt;

    <span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-s ...

  5. Python类的继承演示样例

    class Pet: __name = "" def __init__(self, name): self.__name = name def bark(self): return ...

  6. DM8168 OpenCV尝试与评估(编译ARM版OpenCV)

     交叉编译opencv2.3.1,并在DM8168 cortex A8中执行图像处理. 开发环境: PC:ubuntu12.04LTS.Intel Core 2 Duo CPU  E7200@2. ...

  7. 大数据学习day16------第三阶段-----scala04--------1. 模式匹配和样例类 2 Akka通信框架

    1. 模式匹配和样例类 Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句.类型检查等.并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配 1.1 模式匹 ...

  8. 线性判别分析(Linear Discriminant Analysis,LDA)

    一.LDA的基本思想 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD) ...

  9. 线性判别分析(Linear Discriminant Analysis, LDA)算法分析

    原文来自:http://blog.csdn.net/xiazhaoqiang/article/details/6585537 LDA算法入门 一. LDA算法概述:       线性判别式分析(Lin ...

随机推荐

  1. 【BZOJ3673】【可持久化并查集】可持久化并查集 by zky

    Description n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的状态(查询算作操作)3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n ...

  2. Linux下ln链接命令详解

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个不同的链接,这个命令最常用的参数是-s,具体用法是:ln –s 源文件 目标文件. 当我们需要在不同的目录,用到相同的 ...

  3. windows7 64 位 mysql 5.6.12 安装

    1.修改 my-default.ini 改名为 my.ini 内容修改为 [mysqld] loose-default-character-set = utf8    basedir = D:/mys ...

  4. YZOI回忆录&&YZOI3.0介绍&&某些资源的分享

    “那段时光就像块透明的琉璃,美得那么虚幻.飘渺.可是它毕竟在我生命里闪现,哪怕如萤光一样微弱,却照亮了我整个心房.”1.前序伴随着yzoi2.0版本离我而去的是我半年的OI生涯,在这半年内我步入了一个 ...

  5. ThinkPHP 自动验证与自动填充无效可能的原因

    原文链接:http://www.5idev.com/p-thinkphp_validate_auto_Invalid.shtml 自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇 ...

  6. QTP10破解

    1. 下载QTP10.0版本 http://h30302.www3.hp.com/prdownloads/T6510-15063.zip?ordernumber=380454070&itemi ...

  7. 使用Echarts的五个步骤

     _liuz 2015-07-22 09:35:53 参考网址:http://echarts.baidu.com/doc/start.html 一.制作一个图表容器<div id="m ...

  8. JSP语法

    第3章  JSP语法 [本章专家知识导学] JSP是建立在Java语言基础上的一种Web程序设计语言,具有自己特有的用法和指令.本章首先介绍JSP页面的程序结构,然后讲述JSP程序中经常用到基本的面向 ...

  9. GO:格式化代码

    http://www.ituring.com.cn/article/39380 Go 开发团队不想要 Go 语言像许多其它语言那样总是在为代码风格而引发无休止的争论,浪费大量宝贵的开发时间,因此他们制 ...

  10. 【MySQL】SQL语法,between and 使用注意事项

    业务代码中有条查询学生姓名的sql: select stu_name from stu_info where stu_id between id_1 and id_2; 估计当时一时恍惚,拼接sql时 ...