25 m_ParameterInputMap.insert(std::make_pair(parameterIndex,parameterImage));
35 template <
typename TPixel,
unsigned int VDim>
39 m_InternalMask =
dynamic_cast<InternalMaskType*
>(
image);
41 if (m_InternalMask.IsNull())
43 MITK_INFO <<
"Parameter Fit Generator. Need to cast mask for parameter fit.";
45 typedef itk::CastImageFilter< InputImageType, InternalMaskType > CastFilterType;
46 typename CastFilterType::Pointer spImageCaster = CastFilterType::New();
48 spImageCaster->SetInput(image);
50 m_InternalMask = spImageCaster->GetOutput();
51 spImageCaster->Update();
55 void mitk::ModelSignalImageGenerator::SortParameterImages()
60 for (ParameterMapType::const_iterator pos = m_ParameterInputMap.begin(); pos != m_ParameterInputMap.end(); ++pos)
64 inputImages[i] = pos->second;
67 this->m_InputParameterImages = inputImages;
74 SortParameterImages();
76 if(this->m_Mask.IsNotNull())
82 this->m_InternalMask =
nullptr;
92 typedef itk::Image<double, 3> InputFrameImageType;
93 typedef itk::Image<double, 3> OutputImageType;
96 FilterType::Pointer filter = FilterType::New();
98 for(
unsigned int i=0; i<this->m_ParameterInputMap.size(); ++i)
100 InputFrameImageType::Pointer frameImage = InputFrameImageType::New();
104 filter->SetInput(i,frameImage);
108 generationFunctor->SetModelParameterizer(m_Parameterizer);
112 filter->SetFunctor(functor);
113 if (this->m_InternalMask.IsNotNull())
115 filter->SetMask(this->m_InternalMask);
119 if (filter->GetNumberOfOutputs() != generationFunctor->GetGrid().GetSize())
121 itkExceptionMacro(
"Error. Number of computed output Images does not match Grid size!");
135 DynamicITKImageType::Pointer dynamicITKImage = DynamicITKImageType::New();
136 DynamicITKImageType::RegionType dynamicITKRegion;
137 DynamicITKImageType::PointType dynamicITKOrigin;
138 DynamicITKImageType::IndexType dynamicITKIndex;
139 DynamicITKImageType::SpacingType dynamicITKSpacing;
141 dynamicITKSpacing[0] = tempImage->GetGeometry()->GetSpacing()[0];
142 dynamicITKSpacing[1] = tempImage->GetGeometry()->GetSpacing()[1];
143 dynamicITKSpacing[2] = tempImage->GetGeometry()->GetSpacing()[2];
144 dynamicITKSpacing[3] = 3.0;
146 dynamicITKIndex[0] = 0;
147 dynamicITKIndex[1] = 0;
148 dynamicITKIndex[2] = 0;
149 dynamicITKIndex[3] = 0;
151 dynamicITKRegion.SetSize( 0,tempImage->GetDimension(0));
152 dynamicITKRegion.SetSize( 1,tempImage->GetDimension(1));
153 dynamicITKRegion.SetSize( 2,tempImage->GetDimension(2));
154 dynamicITKRegion.SetSize(3, filter->GetNumberOfOutputs());
156 dynamicITKRegion.SetIndex( dynamicITKIndex );
158 dynamicITKOrigin[0]=tempImage->GetGeometry()->GetOrigin()[0];
159 dynamicITKOrigin[1]=tempImage->GetGeometry()->GetOrigin()[1];
160 dynamicITKOrigin[2]=tempImage->GetGeometry()->GetOrigin()[2];
162 dynamicITKImage->SetOrigin(dynamicITKOrigin);
163 dynamicITKImage->SetSpacing(dynamicITKSpacing);
164 dynamicITKImage->SetRegions( dynamicITKRegion);
165 dynamicITKImage->Allocate();
166 dynamicITKImage->FillBuffer(0);
174 timeGeometry->ClearAllGeometries();
176 auto nrOfOutputs = filter->GetNumberOfOutputs();
177 auto grid = generationFunctor->GetGrid();
178 for (
unsigned int i = 0; i<nrOfOutputs; ++i)
182 dynamicImage->SetVolume(accessor.
GetData(), i);
185 if (i<(nrOfOutputs - 1))
187 tmax = grid[i + 1] * 1000;
191 tmax = grid[i] * 1000;
193 timeGeometry->AppendNewTimeStepClone(frame->GetGeometry(), grid[i] * 1000, tmax);
196 dynamicImage->SetTimeGeometry(timeGeometry);
198 this->m_ResultImage = dynamicImage->Clone();
void DoPrepareMask(itk::Image< TPixel, VDim > *image)
#define AccessFixedDimensionByItk(mitkImage, itkImageTypeFunction, dimension)
Access a mitk-image with known dimension by an itk-image.
unsigned int ParametersIndexType
::mitk::Image InputImageType
std::vector< ParameterImageType > ParameterVectorType
Perform a generic pixel-wise operation on N images and produces m output images.
void SetFunctor(const mitk::SimpleFunctorBase *functor)
Image::Pointer ImportItkImage(const itk::SmartPointer< ItkOutputImageType > &itkimage, const BaseGeometry *geometry=nullptr, bool update=true)
Imports an itk::Image (with a specific type) as an mitk::Image.Instantiates instance of ITKImageImpor...
ResultImageType GetGeneratedImage()
mitk::Image::Pointer image
void SetParameterInputImage(const ParametersIndexType index, ParameterImageType inputParameterImage)
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.
itk::Image< double, 4 > DynamicITKImageType
ImageReadAccessor class to get locked read access for a particular image part.
const void * GetData() const
Gives const access to the data.