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. Qt Quick 与 QML语言(初学笔记1)

    Qt Quick Qt Quick是一些新的UI技术的集合,用来帮助开发者创建一种现在越来越多用于手机.多媒体播放器.机顶盒以及其他便携式设备上的直观的.现代的.流畅的用户界面.简单来说,Qt Qui ...

  2. 读书笔记之 - javascript 设计模式 - 组合模式

    组合模式是一种专为创建Web上的动态用户界面而量身定制的模式,使用这种模式,可以用一条命令在对各对象上激发复杂的或递归的行为. 在组合对象的层次体系中有俩种类型对象:叶对象和组合对象.这是一个递归定义 ...

  3. 用jq 做了一个排序

    <ul id="cont"> <li data="5">5</li> <li data="1"&g ...

  4. phpcms V9 内容模型管理(转)

    转自:http://www.cnblogs.com/Braveliu/p/5102627.html [1]理解模型 模型,系统知识的抽象表示.既然抽象了,那就得脑补一下.大家都是面向对象设计的专业人员 ...

  5. [转]iframe自适应宽度高度

    <iframe id="iframe" onLoad="AutoFit();" frameborder="0" scrolling=& ...

  6. .net软件工程师面试题(参考答案)

    一.填空题(每空1分,共12分) 1面向对象的语言具有__封装______性.__继承_______性.__多态______性. 2能用foreach遍历访问的对象需要实现 ____Ienumerab ...

  7. python django 自定义 装饰器

    # -*-coding:utf-8-*- __author__ = "GILANG (pleasurelong@foxmail.com)" """ d ...

  8. NameNode元数据的管理机制(三)

    元数据的管理: 第一步:客户端通过DistributedFilesystem 对象中的creat()方法来创建文件,此时,RPC会 通过一个RPC链接协议来调用namenode,并在命名空间中创建一个 ...

  9. SharePoint 2013 如何使用TaxonomyWebTaggingControl 控件

    在该文章中,我将介绍如何使用TaxonomyWebTaggingControl控件, 首先我相信您已经在SharePoint Managed Metadata Service里定义Term Sets, ...

  10. 从一到二:利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试

    通过从零到一的教程,我们已经得到了通过mnist训练集生成的caffemodel,主要包含下面四个文件: 接下来就可以利用模型进行测试了.关于测试方法按照上篇教程还是选择bat文件,当然python. ...