|
@@ -0,0 +1,134 @@
|
|
|
|
+/**
|
|
|
|
+* @file computeLocalFeatures.cpp
|
|
|
|
+* @brief compute some features for training and testing (separate specifications possible)
|
|
|
|
+* @author Alexander Freytag
|
|
|
|
+* @date 14-06-2013
|
|
|
|
+*/
|
|
|
|
+
|
|
|
|
+//STL
|
|
|
|
+#include <iostream>
|
|
|
|
+#include <limits>
|
|
|
|
+
|
|
|
|
+//core -- basic stuff
|
|
|
|
+#include <core/basics/Config.h>
|
|
|
|
+#include <core/basics/ResourceStatistics.h>
|
|
|
|
+#include <core/basics/Timer.h>
|
|
|
|
+#include <core/image/Convert.h>
|
|
|
|
+#include <core/vector/VectorT.h>
|
|
|
|
+
|
|
|
|
+//vislearning -- basic stuff
|
|
|
|
+#include <vislearning/baselib/Globals.h>
|
|
|
|
+#include <vislearning/baselib/ICETools.h>
|
|
|
|
+#include <vislearning/cbaselib/MultiDataset.h>
|
|
|
|
+#include <vislearning/cbaselib/Example.h>
|
|
|
|
+#include <vislearning/cbaselib/ClassificationResult.h>
|
|
|
|
+#include <vislearning/cbaselib/ClassificationResults.h>
|
|
|
|
+// vislearning -- local features
|
|
|
|
+#include <vislearning/features/localfeatures/GenericLFSelection.h>
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+using namespace std;
|
|
|
|
+using namespace NICE;
|
|
|
|
+using namespace OBJREC;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ a complete BoW pipeline
|
|
|
|
+
|
|
|
|
+ possibly, we can make use of objrec/progs/testClassifier.cpp
|
|
|
|
+*/
|
|
|
|
+int main( int argc, char **argv )
|
|
|
|
+{
|
|
|
|
+ std::set_terminate( __gnu_cxx::__verbose_terminate_handler );
|
|
|
|
+
|
|
|
|
+ NICE::Config * conf = new NICE::Config ( argc, argv );
|
|
|
|
+
|
|
|
|
+ const std::string resultsfile = conf->gS( "main", "resultsfile", "/tmp/results.txt" );
|
|
|
|
+
|
|
|
|
+ ResourceStatistics rs;
|
|
|
|
+
|
|
|
|
+ // ========================================================================
|
|
|
|
+ // TRAINING STEP
|
|
|
|
+ // ========================================================================
|
|
|
|
+
|
|
|
|
+ MultiDataset md( conf );
|
|
|
|
+ const LabeledSet *trainFiles = md["train"];
|
|
|
|
+
|
|
|
|
+ //**********************************************
|
|
|
|
+ //
|
|
|
|
+ // FEATURE EXTRACTION FOR TRAINING IMAGES
|
|
|
|
+ //
|
|
|
|
+ //**********************************************
|
|
|
|
+
|
|
|
|
+ std::cerr << "FEATURE EXTRACTION FOR TRAINING IMAGES" << std::endl;
|
|
|
|
+
|
|
|
|
+ OBJREC::LocalFeatureRepresentation * featureExtractor = OBJREC::GenericLFSelection::selectLocalFeatureRep ( conf, "features", OBJREC::GenericLFSelection::TRAINING );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //TODO replace the nasty makro by a suitable for-loop to make it omp-ready (parallelization)
|
|
|
|
+ int imgCnt ( 0 );
|
|
|
|
+
|
|
|
|
+ // the corresponding nasty makro: LOOP_ALL_S( *trainFiles )
|
|
|
|
+ for(LabeledSet::const_iterator classIt = trainFiles->begin() ; classIt != trainFiles->end() ; classIt++)
|
|
|
|
+ {
|
|
|
|
+ for ( std::vector<ImageInfo *>::const_iterator imgIt = classIt->second.begin();
|
|
|
|
+ imgIt != classIt->second.end();
|
|
|
|
+ imgIt++, imgCnt++
|
|
|
|
+ )
|
|
|
|
+ {
|
|
|
|
+ // the corresponding nasty makro: EACH_INFO( classno, info );
|
|
|
|
+ int classno ( classIt->first );
|
|
|
|
+ const ImageInfo imgInfo = *(*imgIt);
|
|
|
|
+
|
|
|
|
+ std::string filename = imgInfo.img();
|
|
|
|
+
|
|
|
|
+ NICE::ColorImage img( filename );
|
|
|
|
+
|
|
|
|
+ //compute features
|
|
|
|
+
|
|
|
|
+ //variables to store feature information
|
|
|
|
+ NICE::VVector features;
|
|
|
|
+ NICE::VVector positions;
|
|
|
|
+
|
|
|
|
+ Globals::setCurrentImgFN ( filename );
|
|
|
|
+ featureExtractor->extractFeatures ( img, features, positions );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ // ========================================================================
|
|
|
|
+ // TEST STEP
|
|
|
|
+ // ========================================================================
|
|
|
|
+
|
|
|
|
+ const LabeledSet *testFiles = md["test"];
|
|
|
|
+
|
|
|
|
+ delete featureExtractor;
|
|
|
|
+ featureExtractor = OBJREC::GenericLFSelection::selectLocalFeatureRep ( conf, "features", OBJREC::GenericLFSelection::TESTING );
|
|
|
|
+
|
|
|
|
+ LOOP_ALL_S( *testFiles )
|
|
|
|
+ {
|
|
|
|
+ EACH_INFO( classno, info );
|
|
|
|
+ std::string filename = info.img();
|
|
|
|
+
|
|
|
|
+ //**********************************************
|
|
|
|
+ //
|
|
|
|
+ // FEATURE EXTRACTION FOR TEST IMAGES
|
|
|
|
+ //
|
|
|
|
+ //**********************************************
|
|
|
|
+
|
|
|
|
+ NICE::ColorImage img( filename );
|
|
|
|
+
|
|
|
|
+ //compute features
|
|
|
|
+
|
|
|
|
+ //variables to store feature information
|
|
|
|
+ NICE::VVector features;
|
|
|
|
+ NICE::VVector positions;
|
|
|
|
+
|
|
|
|
+ Globals::setCurrentImgFN ( filename );
|
|
|
|
+ featureExtractor->extractFeatures ( img, features, positions );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|