subspace_analysis.h
Go to the documentation of this file.
00001 #ifndef SSA_H_
00002 #define SSA_H_
00003 
00004 #include <opencv2/opencv.hpp>
00005 #include <iostream>
00006 #include <fstream>
00007 #include <ostream>
00008 #include <limits>
00009 #include <math.h>
00010 
00011 namespace SubspaceAnalysis
00012 {
00013 
00014 //Baseclass for PCA LDA
00015 class SSA
00016 {
00017 
00018 public:
00019         SSA()
00020         {
00021         }
00022         ;
00023 
00024         virtual ~SSA()
00025         {
00026         }
00027         ;
00028         void calcDataMat(std::vector<cv::Mat>& input_data, cv::Mat& data_mat);
00029         void calcDataMatMean(cv::Mat& data, cv::Mat& mean_row);
00030         void decomposeSVD(cv::Mat& data_mat);
00031         void decomposeSymmetricMatrix(cv::Mat& data_mat);
00032         void decomposeAsymmetricMatrix(cv::Mat& data_mat);
00033         //Interface methods
00034         void retrieve(cv::Mat& proj, cv::Mat& avg, cv::Mat& proj_model_data);
00035 
00036         cv::Mat eigenvals;
00037         cv::Mat eigenvecs;
00038         cv::Mat mean;
00039         int ss_dim_;
00040 };
00041 
00042 class PCA2D: public SSA
00043 {
00044 
00045 public:
00046         PCA2D()
00047         {
00048         }
00049         ;
00050         PCA2D(std::vector<cv::Mat>& input_data, std::vector<int>& input_labels, int& num_classes, int& ss_dim);
00051         virtual ~PCA2D()
00052         {
00053         }
00054         ;
00055 
00056         int num_classes_;
00057         std::vector<int> unique_labels_;
00058 
00059         cv::Mat class_mean_arr;
00060 };
00061 class LDA2D: public SSA
00062 {
00063 
00064 public:
00065         LDA2D()
00066         {
00067         }
00068         ;
00069         LDA2D(std::vector<cv::Mat>& input_data, std::vector<int>& input_labels, int& num_classes, int& ss_dim);
00070         virtual ~LDA2D()
00071         {
00072         }
00073         ;
00074 
00075         int num_classes_;
00076         std::vector<int> unique_labels_;
00077 
00078         cv::Mat class_mean_arr;
00079 };
00080 
00081 class LDA: public SSA
00082 {
00083 
00084 public:
00085         LDA()
00086         {
00087         }
00088         ;
00089         LDA(cv::Mat& input_data, std::vector<int>& input_labels, int& num_classes, int& ss_dim);
00090         virtual ~LDA()
00091         {
00092         }
00093         ;
00094 
00095         void calcClassMean(cv::Mat& data_mat, std::vector<int>& label_vec, cv::Mat& class_mean_arr, int& num_classes);
00096         void calcClassMean(cv::Mat& data_mat, cv::Mat& label_mat, cv::Mat& class_mean_arr, int& num_classes);
00097         virtual void calcProjMatrix(cv::Mat& data_arr, std::vector<int>& label_vec);
00098 
00099         int num_classes_;
00100         std::vector<int> unique_labels_;
00101 
00102         cv::Mat class_mean_arr;
00103 };
00104 
00105 class ILDA: public LDA
00106 {
00107 public:
00108         ILDA()
00109         {
00110         }
00111         ;
00112         ILDA(cv::Mat& input_data, std::vector<int>& input_labels, int& num_classes, int& ss_dim);
00113         virtual ~ILDA()
00114         {
00115         }
00116         ;
00117 
00118         virtual void calcProjMatrix(cv::Mat& data_arr, std::vector<int>& label_vec);
00119 
00120 };
00121 
00122 class PCA: public SSA
00123 {
00124 public:
00125         PCA()
00126         {
00127         }
00128         ;
00129         PCA(cv::Mat& input_data, int& ss_dim);
00130         virtual ~PCA()
00131         {
00132         }
00133         ;
00134         virtual void calcProjMatrix(cv::Mat& data);
00135         void PCA_OpenCv(cv::Mat& input_data, int& ss_dim);
00136 };
00137 
00138 // Base class for SubSpace Analysis(SSA)
00139 //
00140 //
00141 //
00142 //
00143 //
00144 //
00145 void dump_matrix(cv::Mat& mat, std::string filename);
00146 void condense_labels(std::vector<int>& labels);
00147 
00148 void error_prompt(std::string fct, std::string desc);
00149 void unique_elements(std::vector<int> & vec, int& unique_elements, std::vector<int>& distinct_vec);
00150 void unique_elements(cv::Mat & mat, int& unique_elements, std::vector<int>& distinct_vec);
00151 
00152 void mat_info(cv::Mat& mat);
00153 void mat2arr(cv::Mat& src_mat, cv::Mat& dst_mat);
00154 
00155 template<class T>
00156 void process_labels(std::vector<T> src_vec, cv::Mat& dst_labels)
00157 {
00158 
00159         dst_labels = cv::Mat::zeros(1, src_vec.size(), CV_32FC1);
00160         dst_labels -= 1;
00161         bool unique;
00162         for (int i = 0; i < src_vec.size(); ++i)
00163         {
00164                 unique = true;
00165                 for (int j = 0; j < dst_labels.rows; j++)
00166                 {
00167                         if (i == 0)
00168                         {
00169                                 break;
00170                         }
00171                         else if (src_vec[i] == src_vec[j])
00172                         {
00173                                 unique = false;
00174                                 dst_labels.at<float>(i) = dst_labels.at<float>(j);
00175                                 break;
00176                         }
00177                         else
00178                                 continue;
00179                 }
00180                 if (unique == true)
00181                         dst_labels.at<float>(i) = (float)i;
00182         }
00183 
00184 }
00185 
00186 }
00187 ;
00188 #endif


cob_people_detection
Author(s): Richard Bormann , Thomas Zwölfer
autogenerated on Mon May 6 2019 02:32:06