17 #include "itksys/SystemTools.hxx" 47 void onFitEvent(::itk::Object* caller,
const itk::EventObject & event,
void* )
49 itk::ProgressEvent progressEvent;
51 if (progressEvent.CheckEvent(&event))
54 std::cout <<castedReporter->
GetProgress()*100 <<
"% ";
64 parser.
setDescription(
"MiniApp that allows to make a pixel based fitting on the intensity signal over time for a given model function.");
75 "function",
"f",
mitkCommandLineParser::String,
"Model function",
"Function that should be used to fit the intensity signals. Options are: \"Linear\" or \"<Parameter Number>\" (for generic formulas).",
us::Any(std::string(
"Linear")));
85 "Output file template",
86 "where to save the output parameter images. The specified path will be used as template to determine the format (via extension) and the name \"root\". For each parameter a suffix will be added to the name.",
97 "roibased",
"r",
mitkCommandLineParser::Bool,
"Roi based fitting",
"Will compute a mean intesity signal over the ROI before fitting it. If this mode is used a mask must be specified.");
105 if (parsedArgs.size() == 0)
110 if (parsedArgs.count(
"function"))
114 if (parsedArgs.count(
"formular"))
123 if (parsedArgs.count(
"verbose"))
129 if (parsedArgs.count(
"roibased"))
134 if (parsedArgs.count(
"mask"))
148 if (genericParameterizer)
162 fitFunctor->RegisterEvaluationParameter(
"Chi^2", chi2);
166 ::itk::LevenbergMarquardtOptimizer::ScalesType scales;
167 scales.SetSize(refModel->GetNumberOfParameters());
169 fitFunctor->SetScales(scales);
171 fitFunctor->SetDebugParameterMaps(
true);
173 return fitFunctor.GetPointer();
176 template <
typename TParameterizer>
178 , mitk::ParameterFitImageGeneratorBase::Pointer& generator)
180 mitk::PixelBasedParameterFitImageGenerator::Pointer fitGenerator =
183 typename TParameterizer::Pointer modelParameterizer =
184 TParameterizer::New();
192 fitGenerator->SetModelParameterizer(modelParameterizer);
194 fitGenerator->SetMask(mask);
196 fitGenerator->SetDynamicImage(image);
197 fitGenerator->SetFitFunctor(fitFunctor);
199 generator = fitGenerator.GetPointer();
202 template <
typename TParameterizer>
204 mitk::modelFit::ModelFitInfo::Pointer& ,
205 mitk::ParameterFitImageGeneratorBase::Pointer& generator)
207 mitk::ROIBasedParameterFitImageGenerator::Pointer fitGenerator =
210 typename TParameterizer::Pointer modelParameterizer =
211 TParameterizer::New();
216 mitk::MaskedDynamicImageStatisticsGenerator::Pointer signalGenerator =
218 signalGenerator->SetMask(mask);
219 signalGenerator->SetDynamicImage(image);
220 signalGenerator->Generate();
228 fitGenerator->SetModelParameterizer(modelParameterizer);
229 fitGenerator->SetMask(mask);
230 fitGenerator->SetFitFunctor(fitFunctor);
231 fitGenerator->SetSignal(roiSignal);
234 generator = fitGenerator.GetPointer();
239 mitk::ParameterFitImageGeneratorBase::Pointer generator =
nullptr;
240 mitk::modelFit::ModelFitInfo::Pointer fitSession =
nullptr;
242 ::itk::CStyleCommand::Pointer command = ::itk::CStyleCommand::New();
249 std::cout <<
"Model: linear" << std::endl;
252 generateModelFit_PixelBased<mitk::LinearModelParameterizer>(fitSession, generator);
256 generateModelFit_ROIBased<mitk::LinearModelParameterizer>(fitSession, generator);
261 std::cout <<
"Model: generic (2 parameter)" << std::endl;
264 generateModelFit_PixelBased<mitk::GenericParamModelParameterizer>(fitSession, generator);
268 generateModelFit_ROIBased<mitk::GenericParamModelParameterizer>(fitSession, generator);
272 if (generator.IsNotNull() )
274 std::cout <<
"Started fitting process..." << std::endl;
275 generator->AddObserver(::itk::AnyEvent(), command);
276 generator->Generate();
277 std::cout << std::endl <<
"Finished fitting process" << std::endl;
283 mitkThrow() <<
"Fitting error! Could not initalize fitting job.";
287 int main(
int argc,
char* argv[])
294 const std::map<std::string, us::Any>& parsedArgs = parser.
parseArguments(argc, argv);
301 if (parsedArgs.count(
"help") || parsedArgs.count(
"h"))
310 image = mitk::IOUtil::Load<mitk::Image>(
inFilename, &readerFilterFunctor);
311 std::cout <<
"Input: " << inFilename << std::endl;
315 mask = mitk::IOUtil::Load<mitk::Image>(
maskFileName, &readerFilterFunctor);
316 std::cout <<
"Mask: " << maskFileName << std::endl;
320 std::cout <<
"Mask: none" << std::endl;
325 mitkThrow() <<
"Error. Cannot fit. Please specify mask if you select roi based fitting.";
328 std::cout <<
"Style: ";
331 std::cout <<
"ROI based";
335 std::cout <<
"pixel based";
337 std::cout << std::endl;
341 std::cout <<
"Processing finished." << std::endl;
345 catch (
const itk::ExceptionObject& e)
350 catch (
const std::exception& e)
357 MITK_ERROR <<
"Unexpected error encountered.";
Option callback functor with a preference list/ black list option selection strategy.
void generateModelFit_ROIBased(mitk::modelFit::ModelFitInfo::Pointer &, mitk::ParameterFitImageGeneratorBase::Pointer &generator)
virtual void SetFunctionString(mitk::ModelBase::FunctionStringType _arg)
void setContributor(std::string contributor)
ValueType * any_cast(Any *operand)
void addArgument(const std::string &longarg, const std::string &shortarg, Type type, const std::string &argLabel, const std::string &argHelp=std::string(), const us::Any &defaultValue=us::Any(), bool optional=true, bool ignoreRest=false, bool deprecated=false, mitkCommandLineParser::Channel channel=mitkCommandLineParser::Channel::None)
std::map< std::string, us::Any > parseArguments(const StringContainerType &arguments, bool *ok=nullptr)
bool configureApplicationSettings(std::map< std::string, us::Any > parsedArgs)
virtual ModelBasePointer GenerateParameterizedModel(const IndexType ¤tPosition) const =0
int main(int argc, char *argv[])
virtual double GetProgress() const =0
MITKMODELFIT_EXPORT ModelBase::TimeGridType ExtractTimeGrid(const Image *image)
std::string helpText() const
void onFitEvent(::itk::Object *caller, const itk::EventObject &event, void *)
void setCategory(std::string category)
mitk::Image::Pointer image
void setArgumentPrefix(const std::string &longPrefix, const std::string &shortPrefix)
void generateModelFit_PixelBased(mitk::modelFit::ModelFitInfo::Pointer &, mitk::ParameterFitImageGeneratorBase::Pointer &generator)
mitk::ModelFitFunctorBase::Pointer createDefaultFitFunctor(const mitk::ModelParameterizerBase *parameterizer)
void setupParser(mitkCommandLineParser &parser)
void configureInitialParametersOfParameterizer(mitk::ModelParameterizerBase *parameterizer)
MITKMODELFIT_EXPORT void storeModelFitGeneratorResults(const std::string &outputPathTemplate, mitk::ParameterFitImageGeneratorBase *generator, const mitk::modelFit::ModelFitInfo *fitSession)
mitk::Image::Pointer mask
void setTitle(std::string title)
itk::Array< double > ResultType
void setDescription(std::string description)
void beginGroup(const std::string &description)