Import 2017-06-07 23:51:09: master 7b3acfa7

Author Committer Branch Timestamp Parent
lassoan lassoan master 2014-05-12 12:42:00 master faaa5b9e
Changeset

ENH: Replaced vtkITKBSplineTransform by vtkOrientedBSplineTransform

Problem:
vtkITKBSplineTransform incorrectly computed the 1. forward derivatives, 2. inverse displacement when there was a bulk transform component and rotated bspline grid, 3. the inverse displacement.

Analysis:
In the ITK bspline transform no inverse computation is available and in the current ITK bspline version no additive bulk transform is supported (therefore it is not backward-compatible with the old ITK bspline transform), ITK's transform support is very limited (compared to the powerful transform pipelines in VTK), and Slicer already uses VTK transforms (vtkGridTransform), therefore the ITK bspline is not usable in Slicer as is.
A bspline transform implementation is available in VTK, which is is efficient and well-tested (and equivalence with ITK's bspline implementation can be proven by testing).

Solution:
Replaced vtkITKBSplineTransform it with a vtkBSplineTransform-based transform, vtkOrientedBSplineTransform, which extends the original VTK class to handle arbitrarily oriented b-spline grids and supports an additive bulk transform.
Added test that verifies the vtkOrientedBSplineTransform's equivalence with the ITK BSpline transform implementation in the whole bspline grid (the differences are less than 1e-10).
Added test that verifies the correctness of the inverse and derivative computation.

Fixes:
http://www.na-mic.org/Bug/view.php?id=3664
http://www.na-mic.org/Bug/view.php?id=3659
http://www.na-mic.org/Bug/view.php?id=3614

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23148 3bd1e089-480b-0410-8dfb-8563597acbee

mod - Libs/MRML/Core/CMakeLists.txt Diff File
mod - Libs/MRML/Core/Testing/CMakeLists.txt Diff File
mod - Libs/MRML/Core/Testing/vtkMRMLNonlinearTransformNodeTest1.cxx Diff File
mod - Libs/MRML/Core/vtkMRMLBSplineTransformNode.cxx Diff File
mod - Libs/MRML/Core/vtkMRMLTransformNode.cxx Diff File
mod - Libs/MRML/Core/vtkMRMLTransformNode.h Diff File
mod - Libs/MRML/Core/vtkMRMLTransformStorageNode.cxx Diff File
mod - Libs/vtkITK/CMakeLists.txt Diff File
mod - Libs/vtkITK/Testing/CMakeLists.txt Diff File
rm - Libs/vtkITK/Testing/VTKITKBSplineTransform.cxx Diff File
rm - Libs/vtkITK/vtkITKBSplineTransform.cxx Diff File
rm - Libs/vtkITK/vtkITKBSplineTransform.h Diff File
mod - Modules/Loadable/Transforms/Widgets/qMRMLTransformInfoWidget.cxx Diff File