Difference between revisions of "Modules:ResampleDTIVolume-Documentation-3.6"
(16 intermediate revisions by the same user not shown) | |||
Line 32: | Line 32: | ||
* The transform can be passed as an ITK Transform file using the command line, or directly as a transform node in Slicer3. In the latter case, the transform can only be rigid or affine. | * The transform can be passed as an ITK Transform file using the command line, or directly as a transform node in Slicer3. In the latter case, the transform can only be rigid or affine. | ||
* It also allows changing the spacing, the orientation, the size and the origin of the image. In that case, the image will be modified in consequences. | * It also allows changing the spacing, the orientation, the size and the origin of the image. In that case, the image will be modified in consequences. | ||
+ | * '''Be careful''' when applying multiple transforms contained in one file. Pay attention to the order of the transforms in the file. You may also not obtain the same result as other tools would give you. For example, if you register two images using BRAINSFit using an affine and a BSpline transform simultaneously, the output file will contain two transforms. However these two transforms are actually two components of the same transform and should be applied simultaneously. Resample DTI Volume only applies transforms serially. You should therefore not use Resample DTI Volume in this case. | ||
===Quick Tour of Features and Use=== | ===Quick Tour of Features and Use=== | ||
Line 39: | Line 40: | ||
** ''Reference Volume'' (optional) is the volume used to set the sampling parameters (origin, spacing, orientation and dimensions). If it is not set, the input volume will be taken for reference. | ** ''Reference Volume'' (optional) is the volume used to set the sampling parameters (origin, spacing, orientation and dimensions). If it is not set, the input volume will be taken for reference. | ||
** ''Output volume'' is the name of the output. | ** ''Output volume'' is the name of the output. | ||
+ | * '''Deformation Field:''' Allows the user to transform the input image using a deformation field. The deformation field is applied last in the case other transforms are given. | ||
+ | ** ''Displacement or H- field'' sets the type of deformation field. An H-field contains at each voxel the position in space of the transformed point. The displacement field contains at each voxel the displacement vector to apply to this point. | ||
+ | ** ''Deformation Field Volume'' sets the deformation field. It should be a 3-Dimensional vector image. Vectors should be of dimension 3. | ||
* '''Resampling Parameters:''' | * '''Resampling Parameters:''' | ||
** ''Number Of Threads'' sets the number of threads used to perform the resampling. | ** ''Number Of Threads'' sets the number of threads used to perform the resampling. | ||
** ''Correction'' sets if a filter is applied on the resampled image to ensure that every tensor is positive definite symmetric. Three filters are available: set to zero the negative eigen values, take their absolute values or compute their closest positive definite symmetric matrix. | ** ''Correction'' sets if a filter is applied on the resampled image to ensure that every tensor is positive definite symmetric. Three filters are available: set to zero the negative eigen values, take their absolute values or compute their closest positive definite symmetric matrix. | ||
− | * '''Transform Parameters:''' | + | * '''Transform Parameters:''' |
+ | ** ''Transform Node'' contains the transform(s) to apply to the image | ||
+ | ** ''Transforms Order'' allows the user to tell the module in what order the transforms are stored in the node (or file). Transforms should be backward (from output space to input space). However, in Slicer3, the affine and rigid transform nodes are stored as forward transforms and are inverted when passed to the module. | ||
+ | Input Image <- Transform0 <- Transform1 <- ... <- Transform n <- Output Image (input-to-output) | ||
+ | Input Image <- Transform n <- Transform n-1 <- ... <- Transform0 <- Output Image (output-to-input) | ||
* '''Manual Transform:''' if no tranform is set in previous panel, one can enter his own transform | * '''Manual Transform:''' if no tranform is set in previous panel, one can enter his own transform | ||
** ''Transform Matrix:'' a 12-parameter affine transformation manually. The first 9 numbers represent a linear transformation matrix in column-major order (where the column index varies the fastest), the last 3 are a translation. | ** ''Transform Matrix:'' a 12-parameter affine transformation manually. The first 9 numbers represent a linear transformation matrix in column-major order (where the column index varies the fastest), the last 3 are a translation. | ||
Line 51: | Line 59: | ||
** ''Centered Transform:'' sets the center of the transformation to the center of the image. | ** ''Centered Transform:'' sets the center of the transformation to the center of the image. | ||
** ''Inverse ITK Transformation:'' inverses the transformation before applying it to the image. The transform given to the module is from the output image to the input one. If one wants to specify a transform from the input image to the output image, one should use this flag. This option can only be used if the transform is rigid or affine. Be careful: if the file containing the transform contains multiple transforms, only rigid and affine transforms will be inverted. | ** ''Inverse ITK Transformation:'' inverses the transformation before applying it to the image. The transform given to the module is from the output image to the input one. If one wants to specify a transform from the input image to the output image, one should use this flag. This option can only be used if the transform is rigid or affine. Be careful: if the file containing the transform contains multiple transforms, only rigid and affine transforms will be inverted. | ||
− | * '''Affine Transformation Type:''' | + | * '''Affine Transformation Type:''' Uses the Preservation of the Principal Direction (right image) to compute the affine transform. Otherwise, the Finite Strain Method (left image) is used [[#References|[1] ]]. |
{| | {| | ||
Line 79: | Line 87: | ||
===Source code & documentation=== | ===Source code & documentation=== | ||
− | + | Source code: follow this [http://viewvc.slicer.org/viewcvs.cgi/trunk/Applications/CLI/DiffusionApplications/ResampleDTI/ link] | |
− | |||
− | |||
− | |||
− | |||
Doxygen documentation: | Doxygen documentation: | ||
− | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/ | + | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DAbsCorrectionFilter.html DiffusionTensor3DAbsCorrectionFilter ] |
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DAffineTransform.html DiffusionTensor3DAffineTransform ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DBSplineInterpolateImageFunction.html DiffusionTensor3DBSplineInterpolateImageFunction ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DExtended.html DiffusionTensor3DExtended ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DFSAffineTransform.html DiffusionTensor3DFSAffineTransform ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DInterpolateImageFunction.html DiffusionTensor3DInterpolateImageFunction ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DInterpolateImageFunctionReimplementation.html DiffusionTensor3DInterpolateImageFunctionReimplementation ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DLinearInterpolateFunction.html DiffusionTensor3DLinearInterpolateFunction ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DMatrix3x3Transform.html DiffusionTensor3DMatrix3x3Transform ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1Functor_1_1DiffusionTensor3DNearest.html DiffusionTensor3DNearestCorrection ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DNearestNeighborInterpolateFunction.html DiffusionTensor3DNearestNeighborInterpolateFunction ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DNonRigidTransform.html DiffusionTensor3DNonRigidTransform ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DPPDAffineTransform.html DiffusionTensor3DPPDAffineTransform ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DRead.html DiffusionTensor3DRead ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DResample.html DiffusionTensor3DResample ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DRigidTransform.html DiffusionTensor3DRigidTransform ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DTransform.html DiffusionTensor3DTransform ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DWindowedSincInterpolateImageFunction.html DiffusionTensor3DWindowedSincInterpolateImageFunction ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1DiffusionTensor3DWrite.html DiffusionTensor3DWrite ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1Functor_1_1DiffusionTensor3DZero.html DiffusionTensor3DZeroCorrection ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1MatrixExtended.html MatrixExtended ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1TransformDeformationFieldFilter.html TransformDeformationFieldFilter ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1WarpTransform3D.html WarpTransform3D ] | ||
+ | *[http://www.na-mic.org/Slicer/Documentation/Slicer3-doc/html/classitk_1_1HFieldToDeformationFieldImageFilter.html HFieldToDeformationFieldImageFilter ] | ||
== More Information == | == More Information == | ||
+ | |||
+ | ===When Using the module in command line=== | ||
+ | * '''Warning :''' When using this module in Microsoft Windows, the flag -c which centers the transform might cause problems. Please use the long flag --centered_transform instead in that case. | ||
+ | * The Transform can be given through an ITK Transform file. An example is given below. | ||
+ | #Insight Transform File V1.0 | ||
+ | # Transform 0 | ||
+ | Transform: AffineTransform_double_3_3 | ||
+ | Parameters: 1.73205080756880 0.5 0 -0.5 .8660254037844 0 0 0 1.5 15 32 27 | ||
+ | FixedParameters: 40 35 20 | ||
+ | |||
+ | * '''Be Careful :''' The transform file must have an empty line after the fixed parameters | ||
+ | * The Fixed Parameters are the coordinates of the center of rotation | ||
+ | * The Parameters are written in the following format: | ||
+ | ** The first 9 numbers represent a linear transformation matrix in column-major order (where the column index varies the fastest) | ||
+ | ** The last 3 are a translation. | ||
+ | * A transform file may contain multiple transforms. The transforms are all merged together before being applied to the image. Therefore the interpolation operation is performed only once per voxel which improves the quality of the output image compared to applying each transform separatly. | ||
===Acknowledgment=== | ===Acknowledgment=== | ||
− | + | This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149. Information on the National Centers for Biomedical Computing can be obtained from [http://nihroadmap.nih.gov/bioinformatics http://nihroadmap.nih.gov/bioinformatics]. | |
===References=== | ===References=== | ||
− | + | [http://www.itk.org/ItkSoftwareGuide.pdf ITK software guide]. Sections "6.9 Geometric Transformations", "8.8 Transforms" and "8.9 Interpolators". | |
+ | |||
+ | [1] D.C. Alexander, C. Pierpaoli, P.J. Basser, J.C. Gee. Spatial Transformations of Diffusion Tensor Magnetic Resonance Images, IEEE Transactions on medical imaging, vol. 20, No. 11, November 2001 |
Latest revision as of 14:44, 22 December 2010
Home < Modules:ResampleDTIVolume-Documentation-3.6Return to Slicer 3.6 Documentation
ResampleDTIVolume
General Information
Module Type & Category
Type: CLI
Category: Diffusion Tensor
Authors, Collaborators & Contact
- Francois Budin, NIRAL
- Sylvain Bouix, PNL
- Contact: Francois Budin , budin[at]bwh[dot]harvard[dot]edu
Module Description
This module implements Diffusion Tensor Image (DTI) resampling through the use of ITK Transforms. It supports any transform that is implemented in ITK (rigid, affine, non-rigid such as BSpline, etc). 'Resampling' is performed in space coordinates, not pixel/grid coordinates. It is quite important to ensure that image spacing is properly set on the images involved. The interpolator is required since the mapping from one space to the other will often require evaluation of the intensity of the image at non-grid positions.
Usage
Examples, Use Cases & Tutorials
- This module is especially appropriate when one needs to resample an image and already knows the transform to apply to it. Its principal advantages resides in the fact that one can apply any kind of transform supported by ITK (rigid, affine and non-rigid) and can choose between the most commonly used interpolators.
- The transform can be passed as an ITK Transform file using the command line, or directly as a transform node in Slicer3. In the latter case, the transform can only be rigid or affine.
- It also allows changing the spacing, the orientation, the size and the origin of the image. In that case, the image will be modified in consequences.
- Be careful when applying multiple transforms contained in one file. Pay attention to the order of the transforms in the file. You may also not obtain the same result as other tools would give you. For example, if you register two images using BRAINSFit using an affine and a BSpline transform simultaneously, the output file will contain two transforms. However these two transforms are actually two components of the same transform and should be applied simultaneously. Resample DTI Volume only applies transforms serially. You should therefore not use Resample DTI Volume in this case.
Quick Tour of Features and Use
- Input/Output: Defines input and output files.
- Input volume is the volume to resample,
- Reference Volume (optional) is the volume used to set the sampling parameters (origin, spacing, orientation and dimensions). If it is not set, the input volume will be taken for reference.
- Output volume is the name of the output.
- Deformation Field: Allows the user to transform the input image using a deformation field. The deformation field is applied last in the case other transforms are given.
- Displacement or H- field sets the type of deformation field. An H-field contains at each voxel the position in space of the transformed point. The displacement field contains at each voxel the displacement vector to apply to this point.
- Deformation Field Volume sets the deformation field. It should be a 3-Dimensional vector image. Vectors should be of dimension 3.
- Resampling Parameters:
- Number Of Threads sets the number of threads used to perform the resampling.
- Correction sets if a filter is applied on the resampled image to ensure that every tensor is positive definite symmetric. Three filters are available: set to zero the negative eigen values, take their absolute values or compute their closest positive definite symmetric matrix.
- Transform Parameters:
- Transform Node contains the transform(s) to apply to the image
- Transforms Order allows the user to tell the module in what order the transforms are stored in the node (or file). Transforms should be backward (from output space to input space). However, in Slicer3, the affine and rigid transform nodes are stored as forward transforms and are inverted when passed to the module.
Input Image <- Transform0 <- Transform1 <- ... <- Transform n <- Output Image (input-to-output) Input Image <- Transform n <- Transform n-1 <- ... <- Transform0 <- Output Image (output-to-input)
- Manual Transform: if no tranform is set in previous panel, one can enter his own transform
- Transform Matrix: a 12-parameter affine transformation manually. The first 9 numbers represent a linear transformation matrix in column-major order (where the column index varies the fastest), the last 3 are a translation.
- Transform: forces the transform to be of rigid or affine type (affine is default)
- Space: It should normally not be modified when using this module directly in Slicer3 with a transform node. It does not specify whether the matrix is expressed in LPS or RAS coordinate space but rather if everything is expressed in the same coordinate space. LPS means that everything is in the same space and RAS means that it is not the case. This option can be set to RAS if the given transform is in RAS coordinate space (respectively LPS) and the input volume is in LPS coordinate space (respectively RAS). Be careful: When passing manually the transform, the coordinate space modification is directly applied on the given transform. However, when passing the transform through a file or a transform node, it is the input volume coordinate space that is modified and the transform is left unchanged (so that any kind of transform supported by ITK is also supported by this module). If one sets the output volume parameters manually, one has to pay attention to the fact that in that case the given parameters are considered to be in the transform coordinate space!!!
- Rigid/Affine Parameters:
- Rotation Point: uses a fiducial to set a point around which the rotation defined in the transform needs to be performed.
- Centered Transform: sets the center of the transformation to the center of the image.
- Inverse ITK Transformation: inverses the transformation before applying it to the image. The transform given to the module is from the output image to the input one. If one wants to specify a transform from the input image to the output image, one should use this flag. This option can only be used if the transform is rigid or affine. Be careful: if the file containing the transform contains multiple transforms, only rigid and affine transforms will be inverted.
- Affine Transformation Type: Uses the Preservation of the Principal Direction (right image) to compute the affine transform. Otherwise, the Finite Strain Method (left image) is used [1] .
- Interpolation Type: sets the type of interpolation kernel to either linear, nearest neighbor (nn), windowed sinc (ws), or b-spline (bs). The windowed sinc interpolator uses a constant boundary condition whereas the b-spline interpolator uses a mirror boundary condition.
- Windowed Sinc Interpolate Function Parameters: selects the type window function for the sinc interpolation h=hamming, c=cosine, w=welch, l=lanczos, b=blackman. This is only relevant if one selects ws as the interpolation type.
- BSpline Interpolate Function Parameters: The spline order (only relevant if the selected interpolator is bs).
- Output Parameters: One can overwrite the reference volume parameters by setting manually the spacing, size, origin (as a fiducial), and direction matrix (also known as space directions) in column-major order.
Development
Dependencies
None
Known bugs
Follow this link to the Slicer3 bug tracker.
Usability issues
Follow this link to the Slicer3 bug tracker. Please select the usability issue category when browsing or contributing.
Source code & documentation
Source code: follow this link
Doxygen documentation:
- DiffusionTensor3DAbsCorrectionFilter
- DiffusionTensor3DAffineTransform
- DiffusionTensor3DBSplineInterpolateImageFunction
- DiffusionTensor3DExtended
- DiffusionTensor3DFSAffineTransform
- DiffusionTensor3DInterpolateImageFunction
- DiffusionTensor3DInterpolateImageFunctionReimplementation
- DiffusionTensor3DLinearInterpolateFunction
- DiffusionTensor3DMatrix3x3Transform
- DiffusionTensor3DNearestCorrection
- DiffusionTensor3DNearestNeighborInterpolateFunction
- DiffusionTensor3DNonRigidTransform
- DiffusionTensor3DPPDAffineTransform
- DiffusionTensor3DRead
- DiffusionTensor3DResample
- DiffusionTensor3DRigidTransform
- DiffusionTensor3DTransform
- DiffusionTensor3DWindowedSincInterpolateImageFunction
- DiffusionTensor3DWrite
- DiffusionTensor3DZeroCorrection
- MatrixExtended
- TransformDeformationFieldFilter
- WarpTransform3D
- HFieldToDeformationFieldImageFilter
More Information
When Using the module in command line
- Warning : When using this module in Microsoft Windows, the flag -c which centers the transform might cause problems. Please use the long flag --centered_transform instead in that case.
- The Transform can be given through an ITK Transform file. An example is given below.
#Insight Transform File V1.0 # Transform 0 Transform: AffineTransform_double_3_3 Parameters: 1.73205080756880 0.5 0 -0.5 .8660254037844 0 0 0 1.5 15 32 27 FixedParameters: 40 35 20
- Be Careful : The transform file must have an empty line after the fixed parameters
- The Fixed Parameters are the coordinates of the center of rotation
- The Parameters are written in the following format:
- The first 9 numbers represent a linear transformation matrix in column-major order (where the column index varies the fastest)
- The last 3 are a translation.
- A transform file may contain multiple transforms. The transforms are all merged together before being applied to the image. Therefore the interpolation operation is performed only once per voxel which improves the quality of the output image compared to applying each transform separatly.
Acknowledgment
This work is part of the National Alliance for Medical Image Computing (NAMIC), funded by the National Institutes of Health through the NIH Roadmap for Medical Research, Grant U54 EB005149. Information on the National Centers for Biomedical Computing can be obtained from http://nihroadmap.nih.gov/bioinformatics.
References
ITK software guide. Sections "6.9 Geometric Transformations", "8.8 Transforms" and "8.9 Interpolators".
[1] D.C. Alexander, C. Pierpaoli, P.J. Basser, J.C. Gee. Spatial Transformations of Diffusion Tensor Magnetic Resonance Images, IEEE Transactions on medical imaging, vol. 20, No. 11, November 2001