Skip to content

Commit

Permalink
ENH: Added support for oriented grid Transform
Browse files Browse the repository at this point in the history
* Added a new class, vtkOrientedGridTransform, which is based on vtkGridTransform but orientation of the grid can be specified as well.
* Added test for vtkOrientedGridTransform to verify its derivative and inverse computation and equivalence with ITK displacement field transform.
* Simplified vtkMRMLGridTransform node: transform parameters are read/written into ITK transform file, no duplicate saving is done in the scene.
* Removed unused vtkITK files: itkDisplacementFieldTransform, itkEncodedTransformFileReader/Writer, as they were not used (and some of them even had the same name as existing ITK files).
* Support reading/writing of grid transform from/to nrrd, nhdr, mha, mhd, nii, nii.gz files

Resolves:
http://www.na-mic.org/Bug/view.php?id=3597
http://www.na-mic.org/Bug/view.php?id=3444
http://na-mic.org/Bug/view.php?id=2273

Partially resolves:
http://www.na-mic.org/Bug/view.php?id=3598


git-svn-id: http://svn.slicer.org/Slicer4/trunk@23185 3bd1e089-480b-0410-8dfb-8563597acbee
  • Loading branch information
lassoan committed May 16, 2014
1 parent 7d06959 commit 979d08b
Show file tree
Hide file tree
Showing 19 changed files with 1,268 additions and 2,043 deletions.
1 change: 1 addition & 0 deletions Libs/MRML/Core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ set(MRMLCore_SRCS
vtkMRMLDoubleArrayStorageNode.cxx
# Classes for transforms computation
vtkOrientedBSplineTransform.cxx
vtkOrientedGridTransform.cxx
# Note: when you add new node types, add
# register code to the vtkMRMLScene constructor
)
Expand Down
1 change: 1 addition & 0 deletions Libs/MRML/Core/Testing/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ create_test_sourcelist(Tests ${KIT}CxxTests.cxx
vtkMRMLdGEMRICProceduralColorNodeTest1.cxx
vtkObserverManagerTest1.cxx
vtkOrientedBSplineTransformTest1.cxx
vtkOrientedGridTransformTest1.cxx
EXTRA_INCLUDE vtkMRMLDebugLeaksMacro.h
)

Expand Down
6 changes: 3 additions & 3 deletions Libs/MRML/Core/Testing/vtkMRMLNonlinearTransformNodeTest1.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#include <itkFactoryRegistration.h>

#include "vtkOrientedBSplineTransform.h"
#include "vtkGridTransform.h"
#include "vtkOrientedGridTransform.h"
#include "vtkMRMLTransformNode.h"
#include "vtkMRMLBSplineTransformNode.h"
#include "vtkMRMLGridTransformNode.h"
Expand Down Expand Up @@ -148,8 +148,8 @@ bool TestGridTransform(const char *filename)
return false;
}

vtkAbstractTransform *xfp = gridTransformNode->GetTransformFromParentAs("vtkGridTransform");
vtkAbstractTransform *xtp = gridTransformNode->GetTransformToParentAs("vtkGridTransform");
vtkAbstractTransform *xfp = gridTransformNode->GetTransformFromParentAs("vtkOrientedGridTransform");
vtkAbstractTransform *xtp = gridTransformNode->GetTransformToParentAs("vtkOrientedGridTransform");

if (xfp == 0 || xtp == 0)
{
Expand Down
9 changes: 6 additions & 3 deletions Libs/MRML/Core/Testing/vtkOrientedBSplineTransformTest1.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@

typedef itk::BSplineDeformableTransform<double,3,3> itkBSplineType;

double DisplacementScale=0.63;

//----------------------------------------------------------------------------
void CreateBSplineVtk(vtkOrientedBSplineTransform* bsplineTransform,
double origin[3], double spacing[3], double direction[3][3], double dims[3],
Expand Down Expand Up @@ -78,6 +80,7 @@ void CreateBSplineVtk(vtkOrientedBSplineTransform* bsplineTransform,
bsplineTransform->SetBulkTransformMatrix(bulkTransform.GetPointer());

bsplineTransform->SetBorderModeToZero();
bsplineTransform->SetDisplacementScale(DisplacementScale);
}

//----------------------------------------------------------------------------
Expand Down Expand Up @@ -166,9 +169,9 @@ void SetBSplineNodeItk(itkBSplineType::Pointer bspline,int nodeIndex[3], double
itkBSplineType::ParametersType parameters = bspline->GetParameters();

const unsigned int numberOfNodes = dims[0] * dims[1] * dims[2];
parameters.SetElement( numberOfNodes*0 + nodeIndex[0] + nodeIndex[1]*dims[0] + nodeIndex[2]*dims[0]*dims[1], nodeValue[0] );
parameters.SetElement( numberOfNodes*1 + nodeIndex[0] + nodeIndex[1]*dims[0] + nodeIndex[2]*dims[0]*dims[1], nodeValue[1] );
parameters.SetElement( numberOfNodes*2 + nodeIndex[0] + nodeIndex[1]*dims[0] + nodeIndex[2]*dims[0]*dims[1], nodeValue[2] );
parameters.SetElement( numberOfNodes*0 + nodeIndex[0] + nodeIndex[1]*dims[0] + nodeIndex[2]*dims[0]*dims[1], DisplacementScale*nodeValue[0] );
parameters.SetElement( numberOfNodes*1 + nodeIndex[0] + nodeIndex[1]*dims[0] + nodeIndex[2]*dims[0]*dims[1], DisplacementScale*nodeValue[1] );
parameters.SetElement( numberOfNodes*2 + nodeIndex[0] + nodeIndex[1]*dims[0] + nodeIndex[2]*dims[0]*dims[1], DisplacementScale*nodeValue[2] );

bspline->SetParameters( parameters );
}
Expand Down

0 comments on commit 979d08b

Please sign in to comment.