Difference between revisions of "ITK v4 Migration Guide"
Jump to navigation
Jump to search
(username removed) |
SaschaZelzer (talk | contribs) (Make it viewable for the public) |
||
Line 1: | Line 1: | ||
__NOTOC__ | __NOTOC__ | ||
− | internal/ITKv4/MigrationGuide | + | <!-- ## page was renamed from internal/ITKv4/ITKv4_MigrationGuide --> |
+ | <!-- ## page was renamed from internal/ITKv4/MigrationGuide --> | ||
+ | = Migration Guide = | ||
+ | == Histogram Initialization == | ||
+ | [[MeasurementVectorSize]] and histogramSize has to be set explicitly when initializing a histogram | ||
+ | |||
+ | '''Old:''' | ||
+ | |||
+ | |||
+ | <pre><nowiki> | ||
+ | m_EmptyHistogram = HistogramType::New(); | ||
+ | HistogramType::SizeType histogramSize; | ||
+ | histogramSize.Fill( 256 ); | ||
+ | m_EmptyHistogram->Initialize( histogramSize ); | ||
+ | </nowiki></pre> | ||
+ | |||
+ | '''New:''' | ||
+ | |||
+ | |||
+ | <pre><nowiki> | ||
+ | m_EmptyHistogram = HistogramType::New(); | ||
+ | m_EmptyHistogram->SetMeasurementVectorSize(2); | ||
+ | HistogramType::SizeType histogramSize(2); | ||
+ | histogramSize.Fill( 256 ); | ||
+ | m_EmptyHistogram->Initialize( histogramSize ); | ||
+ | </nowiki></pre> | ||
+ | |||
+ | == get/Set Output == | ||
+ | * [[SetOutput]](0,output) does not work since it expects a string as identifier --> use [[SetNthOutput|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. | ||
+ | |||
+ | == mitk::[[PixelType]] == | ||
+ | The mitk::[[PixelType]] class was adapted to changes in itk::ImageIOBase and its interface was cleaned up. | ||
+ | {| border="1" cellpadding="2" cellspacing="0" | ||
+ | | 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 | ||
+ | |} | ||
+ | |||
+ | == Rigid3DTransform == | ||
+ | * 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 [http://www.itk.org/Doxygen43/html/classitkv3_1_1Rigid3DTransform.html 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 rename 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 |
Revision as of 15:44, 26 June 2013
Migration Guide
Histogram Initialization
MeasurementVectorSize and histogramSize has to be set explicitly when initializing a histogram
Old:
m_EmptyHistogram = HistogramType::New(); HistogramType::SizeType histogramSize; histogramSize.Fill( 256 ); m_EmptyHistogram->Initialize( histogramSize );
New:
m_EmptyHistogram = HistogramType::New(); m_EmptyHistogram->SetMeasurementVectorSize(2); HistogramType::SizeType histogramSize(2); histogramSize.Fill( 256 ); m_EmptyHistogram->Initialize( histogramSize );
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.
mitk::PixelType
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 |
Rigid3DTransform
- 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 rename 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