ITK v4 Migration Guide

Revision as of 15:30, 1 December 2014 by JasminMetzger (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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.

Histogram Initialization

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>

Get/Set Output

  • 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.

Old New Comment
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


Remove WeakPointer Workaround

  • remove m_SmartSourcePointer from mitkBaseData

Deformation vs. Displacement

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