13 #include "itkChangeInformationImageFilter.h" 23 this->InvokeEvent(::itk::ProgressEvent());
25 itk::ProcessObject* process =
dynamic_cast<itk::ProcessObject*
>(caller);
29 this->m_Progress = process->GetProgress();
33 template <
typename TPixel,
unsigned int VDim>
38 typedef itk::Image<TPixel, VDim> MaskType;
39 typedef itk::Image<ScalarType, VDim> ParameterImageType;
41 typedef itk::ChangeInformationImageFilter< ParameterImageType > OutputImageInformationFilterType;
42 typename OutputImageInformationFilterType::Pointer copyGeoInfoFilter =
43 OutputImageInformationFilterType::New();
45 typename ParameterImageType::Pointer paramImg = ParameterImageType::New();
47 copyGeoInfoFilter->ChangeDirectionOn();
48 copyGeoInfoFilter->SetOutputDirection(image->GetDirection());
49 copyGeoInfoFilter->ChangeOriginOn();
50 copyGeoInfoFilter->SetOutputOrigin(image->GetOrigin());
51 copyGeoInfoFilter->ChangeSpacingOn();
52 copyGeoInfoFilter->SetOutputSpacing(image->GetSpacing());
53 copyGeoInfoFilter->SetInput(paramImg);
54 copyGeoInfoFilter->Update();
56 paramImg = copyGeoInfoFilter->GetOutput();
57 paramImg->SetRegions(image->GetLargestPossibleRegion());
59 paramImg->FillBuffer(0.0);
61 typedef itk::ImageRegionConstIterator<MaskType> MaskIteratorType;
62 typedef itk::ImageRegionIterator<ParameterImageType> ImageIteratorType;
64 MaskIteratorType maskItr(image, image->GetLargestPossibleRegion());
65 ImageIteratorType imgItr(paramImg, image->GetLargestPossibleRegion());
68 while (!maskItr.IsAtEnd())
70 if (maskItr.Get() > 0.0)
86 bool result = Superclass::HasOutdatedResult();
88 if (m_ModelParameterizer.IsNotNull())
96 if (m_Mask.IsNotNull())
104 if (m_FitFunctor.IsNotNull())
118 Superclass::CheckValidInputs();
122 mitkThrow() <<
"Cannot generate fitted parameter images. Input mask is not set.";
125 if (m_Signal.Size() != m_TimeGrid.Size())
127 mitkThrow() <<
"Cannot generate fitted parameter images. Signal and TimeGrid do not match.";
136 this->m_Progress = 0;
141 this->m_ModelParameterizer->SetDefaultTimeGrid(m_TimeGrid);
143 m_ModelParameterizer->GenerateParameterizedModel(index);
145 m_ModelParameterizer->GetInitialParameterization(index);
149 for (SignalType::const_iterator pos = m_Signal.begin(); pos != m_Signal.end(); ++pos)
151 inputValues.push_back(*pos);
155 parameterizedModel, initialParameters);
165 parameterizedModel->GetDerivedParameterNames();
168 this->m_FitFunctor->GetEvaluationParameterNames();
171 if (fitResult.size() != (paramNames.size() + derivedParamNames.size() + criterionNames.size() +
172 evaluationParamNames.size() + debugParamNames.size()))
175 "Error while generating fitted parameter images. Fit functor output size does not match expected parameter number. Output size: " 179 for (ModelFitFunctorBase::ParameterNamesType::size_type j = 0; j < paramNames.size(); ++j)
181 ModelFitFunctorBase::OutputPixelArrayType::value_type value = fitResult[j];
183 tempResultMap.insert(std::make_pair(paramNames[j], m_TempResultImage));
186 ModelFitFunctorBase::ParameterNamesType::size_type
offset = paramNames.size();
187 for (ModelFitFunctorBase::ParameterNamesType::size_type j = 0; j < derivedParamNames.size(); ++j)
189 ModelFitFunctorBase::OutputPixelArrayType::value_type value = fitResult[j +
offset];
191 tempDerivedResultMap.insert(std::make_pair(derivedParamNames[j], m_TempResultImage));
194 offset += derivedParamNames.size();
195 for (ModelFitFunctorBase::ParameterNamesType::size_type j = 0; j < criterionNames.size(); ++j)
197 ModelFitFunctorBase::OutputPixelArrayType::value_type value = fitResult[j +
offset];
199 tempCriterionResultMap.insert(std::make_pair(criterionNames[j], m_TempResultImage));
202 offset += criterionNames.size();
203 for (ModelFitFunctorBase::ParameterNamesType::size_type j = 0; j < evaluationParamNames.size(); ++j)
205 ModelFitFunctorBase::OutputPixelArrayType::value_type value = fitResult[j +
offset];
207 tempEvaluationResultMap.insert(std::make_pair(evaluationParamNames[j], m_TempResultImage));
210 offset += evaluationParamNames.size();
211 for (ModelFitFunctorBase::ParameterNamesType::size_type j = 0; j < debugParamNames.size(); ++j)
213 ModelFitFunctorBase::OutputPixelArrayType::value_type value = fitResult[j +
offset];
215 tempEvaluationResultMap.insert(std::make_pair(debugParamNames[j], m_TempResultImage));
218 parameterImages = tempResultMap;
219 derivedParameterImages = tempDerivedResultMap;
220 criterionImages = tempCriterionResultMap;
221 evaluationParameterImages = tempEvaluationResultMap;
235 m_ModelParameterizer->GenerateParameterizedModel();
237 return parameterizedModel->GetParameterNames();
244 m_ModelParameterizer->GenerateParameterizedModel();
246 return parameterizedModel->GetDerivedParameterNames();
252 return this->m_FitFunctor->GetCriterionNames();
258 auto evals = this->m_FitFunctor->GetEvaluationParameterNames();
259 auto debugs = this->m_FitFunctor->GetDebugParameterNames();
261 evals.insert(evals.end(), debugs.begin(), debugs.end());
ParameterNamesType GetCriterionNames() const override
void onFitProgressEvent(::itk::Object *caller, const ::itk::EventObject &eventObject)
ParameterNamesType GetParameterNames() const override
std::vector< ParameterImagePixelType > InputPixelArrayType
ModelBaseType::ParameterNamesType ParameterNamesType
ModelBase::ParameterNamesType ParameterNamesType
#define AccessByItk_n(mitkImage, itkImageTypeFunction, va_tuple)
Access a MITK image by an ITK image with one or more parameters.
ParameterNamesType GetEvaluationParameterNames() const override
bool HasOutdatedResult() const override
itk::TimeStamp m_GenerationTimeStamp
ParameterNamesType GetDerivedParameterNames() const override
double GetProgress() const override
void DoFitAndGetResults(ParameterImageMapType ¶meterImages, ParameterImageMapType &derivedParameterImages, ParameterImageMapType &criterionImages, ParameterImageMapType &evaluationParameterImages) override
std::vector< ParameterImagePixelType > OutputPixelArrayType
std::map< ParameterNameType, Image::Pointer > ParameterImageMapType
mitk::Image::Pointer image
void DoImageGeneration(itk::Image< TPixel, VDim > *image, double value)
void CastToMitkImage(const itk::SmartPointer< ItkOutputImageType > &itkimage, itk::SmartPointer< mitk::Image > &mitkoutputimage)
Cast an itk::Image (with a specific type) to an mitk::Image.
ModelBaseType::ParametersType ParametersType
void CheckValidInputs() const override