ANIMA  4.0
animaLowMemNLMeansPatientToGroupComparison.cxx
Go to the documentation of this file.
1 #include <iostream>
2 #include <tclap/CmdLine.h>
3 
5 
6 int main(int argc, char **argv)
7 {
8  TCLAP::CmdLine cmd("INRIA / IRISA - VisAGeS/Empenn Team", ' ',ANIMA_VERSION);
9 
10  TCLAP::ValueArg<std::string> refLTArg("i","input","Test Image",true,"","test image",cmd);
11  TCLAP::ValueArg<std::string> dataLTArg("I","database","Database Image List",true,"","database image list",cmd);
12 
13  TCLAP::ValueArg<std::string> maskArg("m","maskname","Computation mask",true,"","computation mask",cmd);
14  TCLAP::ValueArg<std::string> resArg("o","outputpval","P-values output image",true,"","P-values output image",cmd);
15 
16  TCLAP::ValueArg<std::string> dbMeanDistAveArg("d","dbmeanave","DB average mean distance image",true,"","DB average mean distance image",cmd);
17  TCLAP::ValueArg<std::string> dbMeanDistStdArg("D","dbmeanstd","DB std mean distance image",true,"","DB std mean distance image",cmd);
18  TCLAP::ValueArg<std::string> dbCovDistAveArg("","dbcovave","DB average covariance distance image",true,"","DB average covariance distance image",cmd);
19  TCLAP::ValueArg<std::string> dbCovDistStdArg("","dbcovstd","DB std covariance distance image",true,"","DB std covariance distance image",cmd);
20 
21  TCLAP::ValueArg<std::string> resScoreArg("O","outputscore","Score output image",false,"","Score output image",cmd);
22  TCLAP::ValueArg<std::string> resNumPatchesArg("","outputnpatches","Number of patches output image",false,"","Number of patches output image",cmd);
23 
24  TCLAP::ValueArg<double> weightThrArg("w","weightthr","NL weight threshold: patches around have to be similar enough (default: 0.0)",false,0.0,"NL weight threshold",cmd);
25  TCLAP::ValueArg<double> meanThrArg("M","patchmeanthr","Tolerance for means test (test if meansTest > meanDatabase + M * stdDatabase, default: M=2.5)",false,2.5,"NL mean patch proportion",cmd);
26  TCLAP::ValueArg<double> varThrArg("c","patchcovthr","Tolerance for covariance test (test if covDist > meanDatabase + c * stdDatabase, default: c=2.5)",false,2.5,"NL covariance patch proportion",cmd);
27  TCLAP::ValueArg<double> betaArg("b","beta","Beta parameter for local noise estimation (default: 1)",false,1,"Beta for local noise estimation",cmd);
28 
29  TCLAP::ValueArg<unsigned int> nbpArg("p","numberofthreads","Number of threads to run on (default: all cores)",false,itk::MultiThreaderBase::GetGlobalDefaultNumberOfThreads(),"number of threads",cmd);
30 
31  TCLAP::ValueArg<unsigned int> patchHSArg("","patchhalfsize","Patch half size in each direction (default: 1)",false,1,"patch half size",cmd);
32  TCLAP::ValueArg<unsigned int> patchSSArg("","patchstepsize","Patch step size for searching (default: 1)",false,1,"patch search step size",cmd);
33  TCLAP::ValueArg<unsigned int> patchNeighArg("n","patchneighborhood","Patch half neighborhood size (default: 2)",false,2,"patch search neighborhood size",cmd);
34 
35  TCLAP::ValueArg<unsigned int> splitsArg("s","split","Split image for low memory (default: 2)",false,2,"Number of splits",cmd);
36  TCLAP::ValueArg<int> specSplitArg("S","splittoprocess","Specific split to process (use to run on cluster (default: -1 = all)",false,-1,"Split to process",cmd);
37  TCLAP::SwitchArg genOutputDescroArg("G","generateouputdescription","Generate ouptut description data",cmd,false);
38 
39  try
40  {
41  cmd.parse(argc,argv);
42  }
43  catch (TCLAP::ArgException& e)
44  {
45  std::cerr << "Error: " << e.error() << "for argument " << e.argId() << std::endl;
46  return EXIT_FAILURE;
47  }
48 
49  std::string dataName, maskName;
50  dataName = dataLTArg.getValue();
51  maskName = maskArg.getValue();
52 
53  typedef anima::LowMemoryNLMeansPatientToGroupComparisonBridge NLMeansPatientToGroupComparisonBridgeType;
54 
55  NLMeansPatientToGroupComparisonBridgeType *mainFilter = new NLMeansPatientToGroupComparisonBridgeType;
56  mainFilter->SetComputationMask(maskName);
57  mainFilter->SetNumberOfWorkUnits(nbpArg.getValue());
58 
59  mainFilter->SetPatchHalfSize(patchHSArg.getValue());
60  mainFilter->SetSearchNeighborhood(patchNeighArg.getValue());
61  mainFilter->SetSearchStepSize(patchSSArg.getValue());
62 
63  mainFilter->SetWeightThreshold(weightThrArg.getValue());
64  mainFilter->SetMeanThreshold(meanThrArg.getValue());
65  mainFilter->SetVarianceThreshold(varThrArg.getValue());
66 
67  mainFilter->SetBetaParameter(betaArg.getValue());
68 
69  mainFilter->SetDatabaseNames(dataName);
70  mainFilter->SetTestFileName(refLTArg.getValue());
71 
72  mainFilter->SetDatabaseMeanDistanceAverageFileName(dbMeanDistAveArg.getValue());
73  mainFilter->SetDatabaseMeanDistanceStdFileName(dbMeanDistStdArg.getValue());
74  mainFilter->SetDatabaseCovarianceDistanceAverageFileName(dbCovDistAveArg.getValue());
75  mainFilter->SetDatabaseCovarianceDistanceStdFileName(dbCovDistStdArg.getValue());
76 
77  mainFilter->SetOutputScoreName(resScoreArg.getValue());
78  mainFilter->SetOutputPValName(resArg.getValue());
79  mainFilter->SetOutputNPatchesName(resNumPatchesArg.getValue());
80 
81  mainFilter->SetNbSplits(splitsArg.getValue());
82 
83  try
84  {
85  mainFilter->Update(specSplitArg.getValue(),genOutputDescroArg.getValue());
86  }
87  catch(itk::ExceptionObject &e)
88  {
89  std::cerr << e << std::endl;
90  return EXIT_FAILURE;
91  }
92 
93  delete mainFilter;
94 
95  return EXIT_SUCCESS;
96 }
int main(int argc, char **argv)