ITK v4 Migration Guide
With the MITK 2013.06 release, MITK migrated from ITK 3 to ITK 4. Developers using MITK should read through the official ITK migration guide and the MITK specific changes listed below.
- 1 Histogram Initialization
- 2 Get/Set Output
- 3 Subclasses of itk::ImageSource
- 4 mitk::PixelType
- 5 Rigid3DTransform
- 6 Remove WeakPointer Workaround
- 7 Deformation vs. Displacement
- 8 BaseProcess vs. BaseDataSource or "cannot allocate an object of abstract type"
- 9 Clone() const' cannot be overloaded
- 10 itk::PointSet does not have a boundingbox anymore
MeasurementVectorSize and histogramSize has to be set explicitly when initializing a histogram
Old: <syntaxhighlight lang="cpp"> m_EmptyHistogram = HistogramType::New();
HistogramType::SizeType histogramSize; histogramSize.Fill( 256 ); m_EmptyHistogram->Initialize( histogramSize );
New: <syntaxhighlight lang="cpp"> m_EmptyHistogram = HistogramType::New(); m_EmptyHistogram->SetMeasurementVectorSize(2); HistogramType::SizeType histogramSize(2); histogramSize.Fill( 256 ); m_EmptyHistogram->Initialize( histogramSize ); </syntaxhighlight>
- SetOutput(0,output) does not work since it expects a string as identifier --> use SetPrimaryOutput(output) instead!
Subclasses of itk::ImageSource
- The method signature of itk::ImageSource::ThreadedGenerateData changed: The thread id is now of type unsigned int instead of int. Use the new ThreadIdType typedef to correctly overload the virtual ThreadedGenerateData method.
The mitk::PixelType class was adapted to changes in itk::ImageIOBase and its interface was cleaned up.
|itk::ImageIOBase::IOPixelType GetPixelTypeId()||itk::ImageIOBase::IOPixelType GetPixelType()||Renamed|
|const std::type_info& GetTypeId()||int GetComponentType()||To compare the component type, use either the itk::ImageIOBase::IOComponentType enum directly or use mitk::MapPixelComponentType<T>::value to map a pixel component type to an integer value (this will also work for user component types not known to the itk::ImageIOBase class|
|std::string GetItkTypeAsString()||std::string GetPixelTypeAsString()||Renamed|
- This transform-class is deprecated and made unusable in the itk4 release: http://itk-insight-users.2283740.n2.nabble.com/Rigid3DTransform-make-error-td7160305.html
- Alternatives can be found in the legacy documentation of itkv3Rigid3DTransform (most likely the itkVersorRigidTransformation)
- Used in IGTFilters: mitkNavigationDataLandmarkTransformFilter
- mitkRigidRegistrationPreset (removed in bf88544ebacc9ea31fb9f922172fb82eea900b4c)
Remove WeakPointer Workaround
- remove all MITK_WEAKPOINTER_PROBLEM_WORKAROUND_ENABLED
- remove m_SmartSourcePointer from mitkBaseData
Deformation vs. Displacement
- Deformation is renamed into Displacement, see http://itk.org/migrationv4/index.php?action=artikel&cat=3&id=90&artlang=en&highlight=itkInverseDeformationFieldImageFilter
BaseProcess vs. BaseDataSource or "cannot allocate an object of abstract type"
- Due to changes in the ITK Filterpipeline we decided to mark mitk::BaseProcess as deprecated.
- The new class mitk::BaseDataSource should be used by now
- mitk::BaseDataSource has some pure virtual functions (actually the MakeOutput(..) functions)
- These functions must be implemented by each subclass
Clone() const' cannot be overloaded
- ITK 4 implements various new clone() methods which we used to implement in MITK in the past resulting in the error mentioned above.
- Most of the time, the Clone() method in MITK can just be removed.
- If there is anything happening except for the call to InternalClone() this code should be moved to the InternalClone() method.
itk::PointSet does not have a boundingbox anymore
- itk::PointSet::GetBoundingBox() is not available anymore. Whenever you need the bounding box, you must create it on your own and fill it the pointset points.
- an example is given here: http://itk.org/ITKExamples/Examples/Core/Common/BoundingBoxOfAPointSet/BoundingBoxOfAPointSet.html