ITK/Release 4/Migration Plan/Release Notes: Difference between revisions
(38 intermediate revisions by 7 users not shown) | |||
Line 9: | Line 9: | ||
This release is simply a Git tag that is equivalent to the stable release of ITK 3.2 | This release is simply a Git tag that is equivalent to the stable release of ITK 3.2 | ||
= ITKv4 Alpha-01 = | = ITKv4 Alphas = | ||
== ITKv4 Alpha-01 == | |||
The main changes made in this release are | The main changes made in this release are | ||
== Removal support for Deprecated Compilers == | === Removal support for Deprecated Compilers === | ||
Code that was intended to provide support for several outdated compilers was removed. The compilers that are no longer supported in ITKv4 are | Code that was intended to provide support for several outdated compilers was removed. The compilers that are no longer supported in ITKv4 are | ||
Line 21: | Line 23: | ||
* Visual Studio 7.0 | * Visual Studio 7.0 | ||
* SGI CC compilers | * SGI CC compilers | ||
* Sun CC 5.6 | * Sun CC 5.6 | ||
* Metrowerks | * Metrowerks | ||
== Statistics Framework Updated == | |||
Note: The minimum version of the Sun CC complier that is supported is '''Version 12''' as described in http://public.kitware.com/Bug/view.php?id=11076 | |||
=== Statistics Framework Updated === | |||
The original statistics framework was removed and replaced with the one that was refactored in 2007. | The original statistics framework was removed and replaced with the one that was refactored in 2007. | ||
Line 36: | Line 41: | ||
[[Proposals:Refactoring Statistics Framework 2007 Migration Users Guide | Migration Users Guide ]] | [[Proposals:Refactoring Statistics Framework 2007 Migration Users Guide | Migration Users Guide ]] | ||
== Multi-Threaded Image Registration Metrics Updated == | === Consolidated Morphology === | ||
The Consolidated Morphology classes that were in the ITK/Code/Review directory were moved into the standard ITK directories. | |||
These classes were contributed in the Insight Journal paper | |||
* "Consolidated morphology" | |||
** by Lehmann G., Beare R., INRA | |||
** http://hdl.handle.net/1926/308 | |||
** http://www.insight-journal.org/browse/publication/124 | |||
=== Multi-Threaded Image Registration Metrics Updated === | |||
The multi-threaded image registration metrics that were in the Review directory were moved into the standard ITK directories. | The multi-threaded image registration metrics that were in the Review directory were moved into the standard ITK directories. | ||
Line 57: | Line 74: | ||
will now use the number of threads that you assign them. This will be, by default, equal to the number of cores in your computer. | will now use the number of threads that you assign them. This will be, by default, equal to the number of cores in your computer. | ||
== Some CMake Options Removed == | === Centered Pixel Consistency Enforced === | ||
* The changes that were made to enforce the consistency of pixel coordinates computation are now permanent. | |||
* The code intended for backward compatibility (with the state in which ITK was computing coordinates inconsistently) has been removed. | |||
=== Remove all Deprecated code === | |||
* Source code that was labeled as '''deprecated''' was removed. | |||
=== Some CMake Options Removed === | |||
The following CMake configuration options were removed | The following CMake configuration options were removed | ||
Line 63: | Line 89: | ||
* ITK_USE_REVIEW_STATISTICS | * ITK_USE_REVIEW_STATISTICS | ||
* ITK_USE_OPTIMIZED_REGISTRATION_METHODS | * ITK_USE_OPTIMIZED_REGISTRATION_METHODS | ||
* ITK_USE_CONSOLIDATED_MORPHOLOGY | |||
* ITK_USE_DEPRECATED_LEVELSET_INTERPOLATION | |||
* ITK_USE_CENTERED_PIXEL_COORDINATES_CONSISTENTLY | |||
* ITK_USE_DEPRECATED_FAST_MARCHING | |||
== ITKv4 Alpha-02 == | |||
== Adopted Uncrusty == | === Adopted Uncrusty === | ||
The source code was processed using [http://uncrustify.sourceforge.net/ Uncrustify] in order to reformat the coding style according to the following proposal | The source code was processed using [http://uncrustify.sourceforge.net/ Uncrustify] in order to reformat the coding style according to the following proposal | ||
Line 71: | Line 102: | ||
http://www.itk.org/Wiki/ITKv4_StyleChangeProposal | http://www.itk.org/Wiki/ITKv4_StyleChangeProposal | ||
== Updated openjpeg == | === Updated openjpeg === | ||
The openjpeg library in the Utilities directory was updated to the openjpeg-v2 version of July 2010. | The openjpeg library in the '''ITK/Utilities''' directory was updated to the openjpeg-v2 version of July 2010. | ||
== Updated | === Updated jpeg === | ||
* | * The jpeg library in the '''ITK/Utilities/itkjpeg''' directory was updated to the jpeg version 8b. | ||
* | ** ITK 3.x use to ship a patch 6b (released in 1998) to provide both lossy jpeg and lossless jpeg. | ||
** | ** This library (jpeg 6b) is now within the utilities of gdcm itself. | ||
* This update allows ITK to use system installed ijg and take advantages of the latest updates of this lib. | |||
== Added JPEG2000ImageIO == | * http://www.ijg.org/ | ||
=== Updated to GDCM 2.0 === | |||
* GDCM, the library that provides DICOM support in ITK was updated to GDCM 2.0.16 | |||
* Release notes of GDCM 2.0.16 can be found at | |||
** http://sourceforge.net/apps/mediawiki/gdcm/index.php?title=GDCM_Release_2.0#GDCM_2.0.16_.282010.2F08.2F18.29 | |||
=== Added JPEG2000ImageIO === | |||
An ImageIO class specialized on managing JPEG2000 files was added from the Insight Journal paper | An ImageIO class specialized on managing JPEG2000 files was added from the Insight Journal paper | ||
Line 90: | Line 129: | ||
* http://hdl.handle.net/10380/3187 | * http://hdl.handle.net/10380/3187 | ||
* http://www.insight-journal.org/browse/publication/741 | * http://www.insight-journal.org/browse/publication/741 | ||
=== Changed the License to Apache 2.0 === | |||
* The license was changed from BSD to Apache 2.0 | |||
=== Removed Patented Code === | |||
* In order to abide by the terms of the Apache 2.0 license, patented source code was removed. | |||
=== Moved QuadEdgeMesh out of Review === | |||
* The QuadEdgeMesh and associated filters were moved out of the Review directory | |||
=== CMake === | |||
* FLAGS: The flag that controlled TEMPLATE METAPROGRAMMING for LOOP UNROLLING was removed | |||
* Changed all CMakeLists.txt files to use lowercase commands | |||
=== Statistics Framework === | |||
* MeasurementVectorTraits from the statistics package by migrating the GetLength and SetLength functions to NumericTraits. | |||
== ITKv4 Alpha-03 == | |||
* VNL was updated in the Utilities directory. | |||
== ITKv4 Alpha-04 == | |||
* Fixed the problem that prevented Windows 64 bits machines to manage image larger than 4 Gb. | |||
== ITKv4 Alpha-05 == | |||
* Introduced Real Time Stamps | |||
* Introduced GPU support infrastructure | |||
== ITKv4 Alpha-06 == | |||
* Modularization | |||
== ITKv4 Alpha-07 == | |||
* Suppressed Warnings from Third Party libraries | |||
= ITKv4 Beta = | |||
* The Release will take place on June 15 2011 | |||
== Modularization == | |||
* ITK Has been modularized | |||
** External modules are now supported | |||
== LevelSet Refactoring == | |||
== DICOM Updates == | |||
== Image Registration Refactoring == | |||
The ITK Registration framework is ready for integration with ITKv4. | |||
* efficient implementation of dense transforms w/composite tx framework | |||
* multithreaded framework with multiresolution optimization | |||
* demons & x-corr metrics, preferably also reworked MI metric (shreyas, with michael's help) | |||
* regularized optimizer (e.g. gaussian smoothing) | |||
* multivariate registration tools | |||
* dti warping & metric | |||
* parameter initializers | |||
* basic composite example | |||
* composite affine example | |||
* composite affine + deformable example | |||
* fix to the regular step gradient descent optimizer | |||
== FEM Refactoring == | |||
The ITK FEM framework is ready for integration with ITKv4. | |||
* This will take place the week of June 6. | |||
* The changes to the FEM framework are hosted on [https://github.com/kiranhs/ITKv4FEM-Kiran github] | |||
* Additional testing data for the framework is also hosted on github [https://github.com/vmagnotta/ITKV4FEM-ModularData ITKV4FEM-ModularData] | |||
===Solver=== | |||
*Derive from '''ProcessObject''' and template over '''dimension''' | |||
**template <unsigned int VDimension = 3> class ITK_EXPORT Solver1 : public ProcessObject | |||
*Remove all I/O from Solver | |||
*Use SetInput() and GetOutput() methods to set the FE problem and to get the deformed mesh | |||
*Update() method will execute the Solver | |||
*Retain the following methods | |||
**SetLinearSystemWrapper() | |||
**GetLinearSystemWrapper() | |||
**GetElementAtPoint() | |||
**GetDeformationEnergy() | |||
**SetTimeStep() | |||
**GetSolution() | |||
===FEMObject=== | |||
A new object type was added, '''itk::fem::FEMObject''', that is used to define the FEM problem. The class derives from '''DataObject''' and is templated over dimension. | |||
*template <unsigned int VDimension = 3> class ITK_EXPORT FEMObject : public DataObject | |||
*Class Methods | |||
**GetNumberOfDegreesOfFreedom() | |||
**GetNumberOfMultiFreedomConstraints() | |||
**GetNumberOfNodes | |||
**GetNumberOfElements | |||
**GetNumberOfLoads(void) | |||
**GetNumberOfMaterials(void) | |||
**AddNextElement(Element::Pointer e) | |||
**InsertElement(Element::Pointer e, ElementIdentifier index) | |||
**AddNextNode(Node::Pointer e) | |||
**InsertNode(Node::Pointer e, NodeIdentifier index) | |||
**AddNextMaterial(Material::Pointer mat) | |||
**InsertMaterial(Material::Pointer e, MaterialIdentifier index) | |||
**AddNextLoad(Load::Pointer ld) | |||
**InsertLoad(Load::Pointer ld, LoadIdentifier index) | |||
**GetElement(ElementIdentifier index) | |||
**GetElementWithGlobalNumber(int globalNumber) | |||
**GetNode(NodeIdentifier index) | |||
**GetNodeWithGlobalNumber(int globalNumber) | |||
**GetMaterial(MaterialIdentifier index) | |||
**GetMaterialWithGlobalNumber(int globalNumber) | |||
**GetLoad(LoadIdentifier index) | |||
**GetLoadWithGlobalNumber(int globalNumber) | |||
**RenumberNodeContainer() | |||
**FinalizeMesh() | |||
===FEMSpatialObject=== | |||
This class provides a spatial object wrapper around the FEMObject. This class facilities the I/O which is now supported by the MetaIO library. | |||
===Using FEM Framework=== | |||
const unsigned int Dimension = 3; | |||
typedef itk::SpatialObject<Dimension> SpatialObjectType; | |||
typedef SpatialObjectType::Pointer SpatialObjectPointer; | |||
// Read the FEM Problem | |||
typedef itk::SpatialObjectReader<Dimension> SpatialObjectReaderType; | |||
typedef SpatialObjectReaderType::Pointer SpatialObjectReaderPointer; | |||
SpatialObjectReaderPointer SpatialReader = SpatialObjectReaderType::New(); | |||
SpatialReader->SetFileName( argv[1] ); | |||
SpatialReader->Update(); | |||
typedef itk::FEMObjectSpatialObject<Dimension> FEMObjectSpatialObjectType; | |||
typedef FEMObjectSpatialObjectType::Pointer FEMObjectSpatialObjectPointer; | |||
FEMObjectSpatialObjectType::Pointer femSO = | |||
dynamic_cast<FEMObjectSpatialObjectType*>((*(children->begin())).GetPointer()); | |||
femSO->GetFEMObject()->FinalizeMesh(); | |||
// Solve FEM Problem | |||
typedef itk::fem::Solver1<Dimension> Solver3DType; | |||
Solver3DType::Pointer solver = Solver3DType::New(); | |||
solver->SetInput( femSO->GetFEMObject() ); | |||
solver->Update( ); | |||
// Write the solution - (i.e. deformed mesh) | |||
FEMObjectSpatialObjectType::Pointer femSODef = FEMObjectSpatialObjectType::New(); | |||
femSODef->SetFEMObject(solver->GetOutput()); | |||
typedef itk::SpatialObjectWriter<Dimension> SpatialObjectWriterType; | |||
typedef SpatialObjectWriterType::Pointer SpatialObjectWriterPointer; | |||
SpatialObjectWriterPointer SpatialWriter = SpatialObjectWriterType::New(); | |||
SpatialWriter->SetInput(femSODef); | |||
SpatialWriter->SetFileName( argv[2] ); | |||
SpatialWriter->Update(); | |||
===Ongoing Work=== | |||
*Update FEM Registration | |||
*Further code cleanup and testing | |||
== Simple ITK == | |||
SimpleITK has been progressing. Highlights include: | |||
* [http://www.itk.org/Wiki/ITK_Release_4/Outreach/Conferences/MICCAI_2011/SimpleITK MICCAI 2011 tutorial accepted] | |||
* Infrastructure created to easily add new ITK filters (usually ~5 minutes) | |||
* BasicFilters mostly completed, Algorithms in progress | |||
** Initial Registration framework in place | |||
* Support for Python, Java, Ruby, Tcl, Lua | |||
** C# and R support in beta | |||
* [http://www.cdash.org/CDash/index.php?project=Insight#ITKv4_SimpleITK Dashboard] | |||
* [http://erie.nlm.nih.gov/~blowek1/SimpleITK/annotated.html Doxygen documentation] | |||
== GPU Support == | |||
== Revising == | |||
* The Review directory will be fully processed | |||
** Files in this directory will be assimilated or removed | |||
= ITKv4 Final = | |||
* ITK 4.0 was Released on December 20 2011 | |||
* [[ITK_Release_4/Migration Plan/Release Notes/ITKv4_Final_Release_Notes|Release Notes]] |
Latest revision as of 14:52, 23 December 2011
Release Notes
This page captures release notes for the intermediate releases of ITKv4
ITK 3-20 Git
This release is simply a Git tag that is equivalent to the stable release of ITK 3.2
ITKv4 Alphas
ITKv4 Alpha-01
The main changes made in this release are
Removal support for Deprecated Compilers
Code that was intended to provide support for several outdated compilers was removed. The compilers that are no longer supported in ITKv4 are
- Borland 5.5
- Visual Studio 6.0
- Visual Studio 7.0
- SGI CC compilers
- Sun CC 5.6
- Metrowerks
Note: The minimum version of the Sun CC complier that is supported is Version 12 as described in http://public.kitware.com/Bug/view.php?id=11076
Statistics Framework Updated
The original statistics framework was removed and replaced with the one that was refactored in 2007.
Details on the refactoring process are available at
Refactoring Statistics Framework 2007
and a guide on how to migrate to the new framework is available at
Consolidated Morphology
The Consolidated Morphology classes that were in the ITK/Code/Review directory were moved into the standard ITK directories.
These classes were contributed in the Insight Journal paper
- "Consolidated morphology"
- by Lehmann G., Beare R., INRA
- http://hdl.handle.net/1926/308
- http://www.insight-journal.org/browse/publication/124
Multi-Threaded Image Registration Metrics Updated
The multi-threaded image registration metrics that were in the Review directory were moved into the standard ITK directories.
Details about the features of these metrics are available at
http://www.na-mic.org/Wiki/index.php/ITK_Registration_Optimization
and has been described in the Insight Journal paper
"Optimizing ITK’s Registration Methods for Multi-processor, Shared-Memory Systems" http://hdl.handle.net/1926/566 http://www.insight-journal.org/browse/publication/172
With this change, the metric
- Mean Squares
- Mattes Mutual Information
will now use the number of threads that you assign them. This will be, by default, equal to the number of cores in your computer.
Centered Pixel Consistency Enforced
- The changes that were made to enforce the consistency of pixel coordinates computation are now permanent.
- The code intended for backward compatibility (with the state in which ITK was computing coordinates inconsistently) has been removed.
Remove all Deprecated code
- Source code that was labeled as deprecated was removed.
Some CMake Options Removed
The following CMake configuration options were removed
- ITK_USE_REVIEW_STATISTICS
- ITK_USE_OPTIMIZED_REGISTRATION_METHODS
- ITK_USE_CONSOLIDATED_MORPHOLOGY
- ITK_USE_DEPRECATED_LEVELSET_INTERPOLATION
- ITK_USE_CENTERED_PIXEL_COORDINATES_CONSISTENTLY
- ITK_USE_DEPRECATED_FAST_MARCHING
ITKv4 Alpha-02
Adopted Uncrusty
The source code was processed using Uncrustify in order to reformat the coding style according to the following proposal
http://www.itk.org/Wiki/ITKv4_StyleChangeProposal
Updated openjpeg
The openjpeg library in the ITK/Utilities directory was updated to the openjpeg-v2 version of July 2010.
Updated jpeg
- The jpeg library in the ITK/Utilities/itkjpeg directory was updated to the jpeg version 8b.
- ITK 3.x use to ship a patch 6b (released in 1998) to provide both lossy jpeg and lossless jpeg.
- This library (jpeg 6b) is now within the utilities of gdcm itself.
- This update allows ITK to use system installed ijg and take advantages of the latest updates of this lib.
Updated to GDCM 2.0
- GDCM, the library that provides DICOM support in ITK was updated to GDCM 2.0.16
- Release notes of GDCM 2.0.16 can be found at
Added JPEG2000ImageIO
An ImageIO class specialized on managing JPEG2000 files was added from the Insight Journal paper
- "Support for Streaming the JPEG2000 File Format"
- http://hdl.handle.net/10380/3187
- http://www.insight-journal.org/browse/publication/741
Changed the License to Apache 2.0
- The license was changed from BSD to Apache 2.0
Removed Patented Code
- In order to abide by the terms of the Apache 2.0 license, patented source code was removed.
Moved QuadEdgeMesh out of Review
- The QuadEdgeMesh and associated filters were moved out of the Review directory
CMake
- FLAGS: The flag that controlled TEMPLATE METAPROGRAMMING for LOOP UNROLLING was removed
- Changed all CMakeLists.txt files to use lowercase commands
Statistics Framework
- MeasurementVectorTraits from the statistics package by migrating the GetLength and SetLength functions to NumericTraits.
ITKv4 Alpha-03
- VNL was updated in the Utilities directory.
ITKv4 Alpha-04
- Fixed the problem that prevented Windows 64 bits machines to manage image larger than 4 Gb.
ITKv4 Alpha-05
- Introduced Real Time Stamps
- Introduced GPU support infrastructure
ITKv4 Alpha-06
- Modularization
ITKv4 Alpha-07
- Suppressed Warnings from Third Party libraries
ITKv4 Beta
- The Release will take place on June 15 2011
Modularization
- ITK Has been modularized
- External modules are now supported
LevelSet Refactoring
DICOM Updates
Image Registration Refactoring
The ITK Registration framework is ready for integration with ITKv4.
- efficient implementation of dense transforms w/composite tx framework
- multithreaded framework with multiresolution optimization
- demons & x-corr metrics, preferably also reworked MI metric (shreyas, with michael's help)
- regularized optimizer (e.g. gaussian smoothing)
- multivariate registration tools
- dti warping & metric
- parameter initializers
- basic composite example
- composite affine example
- composite affine + deformable example
- fix to the regular step gradient descent optimizer
FEM Refactoring
The ITK FEM framework is ready for integration with ITKv4.
- This will take place the week of June 6.
- The changes to the FEM framework are hosted on github
- Additional testing data for the framework is also hosted on github ITKV4FEM-ModularData
Solver
- Derive from ProcessObject and template over dimension
- template <unsigned int VDimension = 3> class ITK_EXPORT Solver1 : public ProcessObject
- Remove all I/O from Solver
- Use SetInput() and GetOutput() methods to set the FE problem and to get the deformed mesh
- Update() method will execute the Solver
- Retain the following methods
- SetLinearSystemWrapper()
- GetLinearSystemWrapper()
- GetElementAtPoint()
- GetDeformationEnergy()
- SetTimeStep()
- GetSolution()
FEMObject
A new object type was added, itk::fem::FEMObject, that is used to define the FEM problem. The class derives from DataObject and is templated over dimension.
- template <unsigned int VDimension = 3> class ITK_EXPORT FEMObject : public DataObject
- Class Methods
- GetNumberOfDegreesOfFreedom()
- GetNumberOfMultiFreedomConstraints()
- GetNumberOfNodes
- GetNumberOfElements
- GetNumberOfLoads(void)
- GetNumberOfMaterials(void)
- AddNextElement(Element::Pointer e)
- InsertElement(Element::Pointer e, ElementIdentifier index)
- AddNextNode(Node::Pointer e)
- InsertNode(Node::Pointer e, NodeIdentifier index)
- AddNextMaterial(Material::Pointer mat)
- InsertMaterial(Material::Pointer e, MaterialIdentifier index)
- AddNextLoad(Load::Pointer ld)
- InsertLoad(Load::Pointer ld, LoadIdentifier index)
- GetElement(ElementIdentifier index)
- GetElementWithGlobalNumber(int globalNumber)
- GetNode(NodeIdentifier index)
- GetNodeWithGlobalNumber(int globalNumber)
- GetMaterial(MaterialIdentifier index)
- GetMaterialWithGlobalNumber(int globalNumber)
- GetLoad(LoadIdentifier index)
- GetLoadWithGlobalNumber(int globalNumber)
- RenumberNodeContainer()
- FinalizeMesh()
FEMSpatialObject
This class provides a spatial object wrapper around the FEMObject. This class facilities the I/O which is now supported by the MetaIO library.
Using FEM Framework
const unsigned int Dimension = 3; typedef itk::SpatialObject<Dimension> SpatialObjectType; typedef SpatialObjectType::Pointer SpatialObjectPointer; // Read the FEM Problem typedef itk::SpatialObjectReader<Dimension> SpatialObjectReaderType; typedef SpatialObjectReaderType::Pointer SpatialObjectReaderPointer; SpatialObjectReaderPointer SpatialReader = SpatialObjectReaderType::New(); SpatialReader->SetFileName( argv[1] ); SpatialReader->Update(); typedef itk::FEMObjectSpatialObject<Dimension> FEMObjectSpatialObjectType; typedef FEMObjectSpatialObjectType::Pointer FEMObjectSpatialObjectPointer; FEMObjectSpatialObjectType::Pointer femSO = dynamic_cast<FEMObjectSpatialObjectType*>((*(children->begin())).GetPointer()); femSO->GetFEMObject()->FinalizeMesh(); // Solve FEM Problem typedef itk::fem::Solver1<Dimension> Solver3DType; Solver3DType::Pointer solver = Solver3DType::New(); solver->SetInput( femSO->GetFEMObject() ); solver->Update( ); // Write the solution - (i.e. deformed mesh) FEMObjectSpatialObjectType::Pointer femSODef = FEMObjectSpatialObjectType::New(); femSODef->SetFEMObject(solver->GetOutput()); typedef itk::SpatialObjectWriter<Dimension> SpatialObjectWriterType; typedef SpatialObjectWriterType::Pointer SpatialObjectWriterPointer; SpatialObjectWriterPointer SpatialWriter = SpatialObjectWriterType::New(); SpatialWriter->SetInput(femSODef); SpatialWriter->SetFileName( argv[2] ); SpatialWriter->Update();
Ongoing Work
- Update FEM Registration
- Further code cleanup and testing
Simple ITK
SimpleITK has been progressing. Highlights include:
- MICCAI 2011 tutorial accepted
- Infrastructure created to easily add new ITK filters (usually ~5 minutes)
- BasicFilters mostly completed, Algorithms in progress
- Initial Registration framework in place
- Support for Python, Java, Ruby, Tcl, Lua
- C# and R support in beta
- Dashboard
- Doxygen documentation
GPU Support
Revising
- The Review directory will be fully processed
- Files in this directory will be assimilated or removed
ITKv4 Final
- ITK 4.0 was Released on December 20 2011
- Release Notes