123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458 |
- #include <math.h>
- #include <matrix.h>
- #include <mex.h>
- #include <core/basics/Config.h>
- #include <core/basics/Timer.h>
- #include <core/vector/MatrixT.h>
- #include <core/vector/VectorT.h>
- #include "vislearning/features/simplefeatures/CodebookRandomForest.h"
- #include "vislearning/features/fpfeatures/VectorFeature.h"
- #include "gp-hik-core/matlab/classHandleMtoC.h"
- #include "gp-hik-core/matlab/ConverterMatlabToNICE.h"
- #include "gp-hik-core/matlab/ConverterNICEToMatlab.h"
- #include "HelperDataConversionMex.h"
- using namespace std;
- using namespace NICE;
- NICE::Config parseParametersERC(const mxArray *prhs[], int nrhs)
- {
- NICE::Config conf;
-
-
-
-
- int i_start ( 0 );
- std::string variable = MatlabConversion::convertMatlabToString(prhs[i_start]);
- if(variable == "conf")
- {
- conf = NICE::Config ( MatlabConversion::convertMatlabToString( prhs[i_start+1] ) );
- i_start = i_start+2;
- }
-
-
-
- for( int i=i_start; i < nrhs; i+=2 )
- {
- std::string variable = MatlabConversion::convertMatlabToString(prhs[i]);
-
-
-
-
- if( variable == "number_of_trees")
- {
- if ( mxIsInt32( prhs[i+1] ) )
- {
- int value = MatlabConversion::convertMatlabToInt32(prhs[i+1]);
- conf.sI("FPCRandomForests", variable, value);
- }
- else
- {
- std::string errorMsg = "Unexpected parameter value for \'" + variable + "\'. Int32 expected.";
- mexErrMsgIdAndTxt( "mexnice:error", errorMsg.c_str() );
- }
- }
- }
- return conf;
- }
- void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
- {
-
- if (nrhs < 1)
- mexErrMsgTxt("No commands and options passed... Aborting!");
-
- if( !mxIsChar( prhs[0] ) )
- mexErrMsgTxt("First argument needs to be the command, ie.e, the class method to call... Aborting!");
-
- std::string cmd = MatlabConversion::convertMatlabToString( prhs[0] );
-
-
-
- if ( !strcmp("new", cmd.c_str() ) )
- {
-
- if (nlhs != 1)
- mexErrMsgTxt("New: One output expected.");
-
-
-
- int nMaxDepth = 10;
-
- OBJREC::CodebookRandomForest *pRandomForest = new OBJREC::CodebookRandomForest(nMaxDepth);
-
-
- plhs[0] = MatlabConversion::convertPtr2Mat<OBJREC::CodebookRandomForest>( pRandomForest );
- return;
- }
-
-
-
- if (nrhs < 2)
- mexErrMsgTxt("Second input should be a class instance handle.");
-
-
- if ( !strcmp("delete", cmd.c_str() ) )
- {
-
- MatlabConversion::destroyObject<OBJREC::CodebookRandomForest>(prhs[1]);
- return;
- }
-
-
-
- OBJREC::CodebookRandomForest *pCodebookClusterer = MatlabConversion::convertMat2Ptr<OBJREC::CodebookRandomForest>(prhs[1]);
-
-
-
-
-
-
-
-
- if (!strcmp("train", cmd.c_str() ))
- {
-
- if (nlhs < 0 || nrhs < 4)
- {
- mexErrMsgTxt("Train: Unexpected arguments.");
- }
-
-
- if (nrhs != 4)
- {
- mexErrMsgTxt("needs 2 matrix inputs, first the training features, second the sample labels");
- return;
- }
- const mxArray *t_pArrTrainData = prhs[2];
- const mxArray *t_pArrTrainLabels = prhs[3];
-
- int iNumFeatureDimension = mxGetM( t_pArrTrainData );
- OBJREC::Examples examplesTrain;
- bool bRet = MatlabConversion::convertDoubleRawPointersToExamples( t_pArrTrainData, t_pArrTrainLabels, examplesTrain);
- if( ~bRet )
- {
- mexErrMsgTxt("Train: Error creating Examples from raw feature matrix and labels.");
- }
-
-
- OBJREC::FeaturePool fp;
- OBJREC::VectorFeature *pVecFeature = new OBJREC::VectorFeature(iNumFeatureDimension);
- pVecFeature->explode(fp);
- NICE::Config conf = parseParametersERC(prhs+1,nrhs-1);
- OBJREC::FPCRandomForests *pRandForest = new OBJREC::FPCRandomForests(&conf,"FPCRandomForests");
- pRandForest->train(fp, examplesTrain);
- pCodebookClusterer->setClusterForest( pRandForest );
-
- delete pVecFeature;
- pVecFeature = NULL;
-
- fp.destroy();
-
- for(int i=0;i<examplesTrain.size(); i++)
- {
- if ( examplesTrain[i].second.vec != NULL )
- {
- delete examplesTrain[i].second.vec;
- examplesTrain[i].second.vec = NULL;
- }
- }
-
- return;
- }
-
-
-
- std::string errorMsg (cmd.c_str() );
- errorMsg += " -- command not recognized.";
- mexErrMsgTxt( errorMsg.c_str() );
- }
|