13 #include "itkCommand.h" 27 this->InvokeEvent(::itk::ProgressEvent());
29 itk::ProcessObject* process =
dynamic_cast<itk::ProcessObject*
>(caller);
32 this->m_Progress = process->GetProgress();
36 template <
typename TPixel,
unsigned int VDim>
40 m_InternalMask =
dynamic_cast<InternalMaskType*
>(
image);
42 if (m_InternalMask.IsNull())
44 MITK_INFO <<
"Parameter Fit Generator. Need to cast mask for parameter fit.";
46 typedef itk::CastImageFilter< InputImageType, InternalMaskType > CastFilterType;
47 typename CastFilterType::Pointer spImageCaster = CastFilterType::New();
49 spImageCaster->SetInput(image);
51 m_InternalMask = spImageCaster->GetOutput();
52 spImageCaster->Update();
56 template<
typename TImage>
59 if (source->GetNumberOfOutputs() != paramNames.size())
61 mitkThrow() <<
"Error while generating fitted parameter images. Number of sources does not match expected parameter number. Output size: " << source->GetNumberOfOutputs() <<
"; number of param names: " << paramNames.size();
65 for (mitk::CurveParameterFunctor::ParameterNamesType::size_type j = 0; j < paramNames.size(); ++j)
68 typename TImage::ConstPointer outputImg = source->GetOutput(j);
71 result.insert(std::make_pair(paramNames[j],paramImage));
77 template <
typename TPixel,
unsigned int VDim>
81 typedef itk::Image<TPixel, VDim-1> InputFrameImageType;
86 typename DescriptorFilterType::Pointer descFilter = DescriptorFilterType::New();
88 typename ::itk::MemberCommand<Self>::Pointer spProgressCommand = ::itk::MemberCommand<Self>::New();
89 spProgressCommand->SetCallbackFunction(
this, &Self::onFitProgressEvent);
90 descFilter->AddObserver(::itk::ProgressEvent(), spProgressCommand);
93 std::vector<Image::Pointer> frameCache;
94 for (
unsigned int i = 0; i < this->m_DynamicImage->GetTimeSteps(); ++i)
96 typename InputFrameImageType::Pointer frameImage;
98 imageTimeSelector->SetInput(this->m_DynamicImage);
99 imageTimeSelector->SetTimeNr(i);
100 imageTimeSelector->UpdateLargestPossibleRegion();
103 frameCache.push_back(frameMITKImage);
105 descFilter->SetInput(i,frameImage);
112 descFilter->SetFunctor(functor);
113 if (this->m_InternalMask.IsNotNull())
115 descFilter->SetMask(this->m_InternalMask);
119 descFilter->Update();
124 if (descFilter->GetNumberOfOutputs() != (paramNames.size()))
126 mitkThrow() <<
"Error while generating fitted parameter images. Fit filter output size does not match expected parameter number. Output size: "<< descFilter->GetNumberOfOutputs();
129 this->m_TempResultMap = StoreResultImages<ParameterImageType>(paramNames,descFilter);
135 bool result = Superclass::HasOutdatedResult();
137 if (m_DynamicImage.IsNotNull())
145 if (m_Mask.IsNotNull())
160 Superclass::CheckValidInputs();
162 if (m_DynamicImage.IsNull())
164 mitkThrow() <<
"Cannot generate fitted parameter images. Input dynamic image is not set.";
171 this->m_Progress = 0;
173 if(this->m_Mask.IsNotNull())
179 this->m_InternalMask =
nullptr;
184 parameterImages = this->m_TempResultMap;
void CheckValidInputs() const override
itk::TimeStamp m_GenerationTimeStamp
#define AccessFixedDimensionByItk(mitkImage, itkImageTypeFunction, dimension)
Access a mitk-image with known dimension by an itk-image.
::mitk::Image InputImageType
void DoPrepareMask(itk::Image< TPixel, VDim > *image)
void onFitProgressEvent(::itk::Object *caller, const ::itk::EventObject &eventObject)
Perform a generic pixel-wise operation on N images and produces m output images.
void DoParameterCalculation(itk::Image< TPixel, VDim > *image)
void SetFunctor(const mitk::SimpleFunctorBase *functor)
void DoParameterCalculationAndGetResults(ParameterImageMapType ¶meterImages) override
DescriptionParameterImageGeneratorBase::ParameterImageMapType ParameterImageMapType
bool HasOutdatedResult() const override
mitk::Image::Pointer image
std::map< ParameterNameType, Image::Pointer > ParameterImageMapType
CurveDescriptionParameterBase::DescriptionParameterNamesType ParameterNamesType
mitk::PixelBasedDescriptionParameterImageGenerator::ParameterImageMapType StoreResultImages(const mitk::CurveParameterFunctor::ParameterNamesType ¶mNames, itk::ImageSource< TImage > *source)
void CastToMitkImage(const itk::SmartPointer< ItkOutputImageType > &itkimage, itk::SmartPointer< mitk::Image > &mitkoutputimage)
Cast an itk::Image (with a specific type) to an mitk::Image.
void MITKCORE_EXPORT CastToItkImage(const mitk::Image *mitkImage, itk::SmartPointer< ItkOutputImageType > &itkOutputImage)
Cast an mitk::Image to an itk::Image with a specific type.
double GetProgress() const override