Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

int Impala::Application::mainConstructCodebook ( int  argc,
char *  argv[] 
)

Definition at line 30 of file mainConstructCodebook.cpp.

References Impala::Core::Table::TableTem< Col1T, Col2T, Col3T, Col4T, Col5T, Col6T, Col7T, Col8T, Col9T >::Add(), Impala::CmdOptions::AddOption(), Impala::atoi(), Impala::FileNamePath(), Impala::CmdOptions::GetArg(), Impala::Core::Database::RawDataSet::GetDatabase(), Impala::Core::Database::RawDataSet::GetFilePath(), Impala::CmdOptions::GetInstance(), Impala::Core::Database::RawDataSet::GetQuidClass(), Impala::Core::Database::RawDataSet::GetSetId(), Impala::CmdOptions::GetString(), ILOG_INFO, ILOG_VAR, ILOG_WARN, Impala::CmdOptions::Initialise(), Impala::Core::Matrix::KmeansClustering(), Impala::Core::Database::RawDataSet::MakeDir(), Impala::Core::Feature::FeatureTable::MakeFromDataSet(), Impala::MakeQuidCodebook(), Impala::Core::Database::MakeRawDataSet(), Impala::MakeString(), Impala::Core::Matrix::MatE(), Impala::Core::Matrix::MatNrCol(), Impala::Core::Matrix::MatNrRow(), Impala::CmdOptions::ParseArgs(), Impala::Core::Array::ReadRaw(), and Impala::Util::Write().

Referenced by main().

00031 {
00032     CmdOptions& options = CmdOptions::GetInstance();
00033     options.Initialise(false, false, true);
00034     options.AddOption(0, "rawFile", "filename", "", 0, true);
00035 
00036     ILOG_VAR(Sandbox.koen.mainConstructCodebook);
00037 
00038     if (! options.ParseArgs(argc, argv, "dataset featurename codebookoutputname k", 4))
00039         return 1;
00040 
00041     Core::Database::RawDataSet* dataset = Core::Database::MakeRawDataSet(options.GetArg(0));
00042     if(!dataset)
00043     {
00044         ILOG_INFO_HEADNODE("failed to open dataset " << options.GetArg(0));
00045         return 0;
00046     }
00047 
00048     String feature = options.GetArg(1);
00049     String outputFilename = options.GetArg(2);
00050     int k = atoi(options.GetArg(3));
00051 
00052     String outputCheck = dataset->GetFilePath("", outputFilename, false, true);
00053     if(!outputCheck.empty())
00054     {
00055         ILOG_WARN("Output codebook file already exists: " << outputFilename << "; skipping...");
00056         return 0;
00057     }
00058 
00059     ILOG_INFO("Clustering from dataset: " << options.GetArg(0));
00060     ILOG_INFO("Feature: " << feature);
00061     ILOG_INFO("Output filename: " << outputFilename);
00062     ILOG_INFO("Clusters requested: " << k);
00063 
00064     Mat* codebook = 0;
00065     if(options.GetString("rawFile").empty())
00066     {
00067         Core::Feature::FeatureTable* clusterInput = 
00068                                     Core::Feature::FeatureTable::MakeFromDataSet(dataset, 
00069                                     Core::Feature::FeatureDefinition(feature),
00070                                     "Keyframes"); // always do keyframes for video sets
00071         ILOG_INFO("Clustering on: " << clusterInput->Size() << " points");
00072         codebook = KmeansClustering(clusterInput->GetColumn2()->GetStorage(), k);
00073         delete clusterInput;
00074     }
00075     else
00076     {
00077         String rawFilename = options.GetString("rawFile");
00078         rawFilename = dataset->GetFilePath("", rawFilename, false, false);
00079         Mat* rawData = 0;
00080         ReadRaw(rawData, rawFilename, dataset->GetDatabase());
00081         codebook = KmeansClustering(rawData, k);
00082         delete rawData;
00083     }
00084 
00085     Core::Feature::FeatureTable* codebookTable = new Core::Feature::FeatureTable(
00086                                String("kmeans-clustering_k_") + MakeString(k), k, 
00087                                MatNrCol(codebook));
00088     for(int i = 0; i < MatNrRow(codebook); i++)
00089     {
00090         Quid descr = MakeQuidCodebook(dataset->GetQuidClass(), dataset->GetSetId(), i);
00091         Core::Vector::VectorTem<Real64> v(MatNrCol(codebook));
00092         for(int j = 0; j < MatNrCol(codebook); j++)
00093         {
00094             v[j] = *MatE(codebook, i, j);
00095         }
00096         codebookTable->Add(descr, v);
00097     }
00098     delete codebook;
00099 
00100     dataset->MakeDir(FileNamePath(outputFilename));
00101     String output2 = dataset->GetFilePath("", outputFilename, true, false);
00102     Core::Table::Write(codebookTable, output2, dataset->GetDatabase(), true);
00103     delete codebookTable;
00104     
00105     return 0;
00106 }

Here is the call graph for this function:


Generated on Thu Jan 13 09:14:07 2011 for ImpalaSrc by  doxygen 1.5.1