NifTK
16.4.1 - 0798f20
CMIC's Translational Medical Imaging Platform
|
This filter integrates a time varying velocity field, using fourth order Runge-Kutta. This filter is basically a tidied up version of that in ANTS: http://www.picsl.upenn.edu/ANTS/ However, ANTS has the four timepoints back to front. I don't know if this is intentional. More...
Public Member Functions | |
virtual const char * | GetClassName () const |
itkStaticConstMacro (Dimension, unsigned int, NDimensions) | |
virtual void | SetStartTime (float _arg) |
virtual float | GetStartTime () |
virtual void | SetFinishTime (float _arg) |
virtual float | GetFinishTime () |
virtual void | SetDeltaTime (float _arg) |
virtual float | GetDeltaTime () |
virtual void | SetCalculateThickness (bool _arg) |
virtual bool | GetCalculateThickness () |
virtual float | GetMaxThickness () |
virtual float | GetMaxDisplacement () |
virtual float | GetFieldEnergy () |
void | SetVoxelsToIntegrateMaskImage (MaskImageType *image) |
void | SetMaxDistanceMaskImage (ThicknessImageType *maxDistance) |
void | SetGreyWhiteInterfaceMaskImage (MaskImageType *greyWhiteInterface) |
ThicknessImageType * | GetCalculatedThicknessImage () |
Static Public Member Functions | |
static Pointer | New () |
Protected Member Functions | |
FourthOrderRungeKuttaVelocityFieldIntegrationFilter () | |
~FourthOrderRungeKuttaVelocityFieldIntegrationFilter () | |
void | PrintSelf (std::ostream &os, Indent indent) const |
virtual void | BeforeThreadedGenerateData () |
virtual void | ThreadedGenerateData (const DisplacementImageRegionType ®ionForThread, ThreadIdType threadId) |
virtual void | AfterThreadedGenerateData () |
This filter integrates a time varying velocity field, using fourth order Runge-Kutta. This filter is basically a tidied up version of that in ANTS: http://www.picsl.upenn.edu/ANTS/ However, ANTS has the four timepoints back to front. I don't know if this is intentional.
Also note, that I was reading Numerical Recipes in C, page 711, the bit on fourth-order Runge-Kutta method. If you are reading this, bear in mind that we are integrating through time. This means that for a 3D image, with x,y,z ordinates, and a time ordinate, that it is the time ordinate (index 3) that corresponds to x_n in Numerical Recipes. So, for a small shift in time, given by DeltaTime in this class, and h in Numerical Recipes, we calculate a new point location (x,y,z), analagous to y_n in Numerical Recipes.
Note also that we have start time and end time, normally, 0 and 1 respectively. If you reverse these you are integrating backwards, which computes the inverse. Also delta time controls the size of the step. We essentially start at start time (0), and at each step we add delta time (0.1 say) until we exceed end time (1). So, in effect this can be independent of the size of the time dimension of your velocity field. You could have delta time = 0.1, and have the size of your time dimension = 3.
The mask image, set using SetMaskImage, determines which voxels are integrated. Any value in this mask apart from zero, will cause that voxel to be integrated. It is assumed that this is the same size, as the input image (but obviously, only 1 time dimension).
The max distance mask is used to stop the integration if the Euclidean distance of a point has gone above that in the mask.
Once this class has integrated all the points in the mask, it is possible to compute a thickness image, as described in Das et. al. NeuroImage 2009 doi:10.1016/j.neuroimage.2008.12.016. To do this, a mask is set, currently called the SetGreyWhiteInterfaceMask method. For each of these voxels, the computed thickness value, is propogated through the velocity field. This could be done in another filter, with a small amount of refactoring, but it is in here for now. The result can be obtained by setting CalculateThickness to true, calling an Update and then GetCalculatedThicknessImage after the update.
typedef SmartPointer<const Self> itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::ConstPointer |
typedef DisplacementImageType::DirectionType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::DisplacementImageDirectionType |
typedef DisplacementImageType::IndexType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::DisplacementImageIndexType |
typedef DisplacementImageType::PointType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::DisplacementImagePointType |
typedef DisplacementImageType::RegionType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::DisplacementImageRegionType |
typedef DisplacementImageType::SizeType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::DisplacementImageSizeType |
typedef DisplacementImageType::SpacingType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::DisplacementImageSpacingType |
typedef Image< DisplacementPixelType, NDimensions> itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::DisplacementImageType |
typedef Vector< TScalarType, NDimensions > itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::DisplacementPixelType |
typedef MaskImageType::IndexType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::MaskImageIndexType |
typedef MaskImageType::Pointer itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::MaskImagePointer |
typedef MaskImageType::PointType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::MaskImagePointType |
typedef Image< MaskPixelType, NDimensions> itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::MaskImageType |
typedef TScalarType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::MaskPixelType |
typedef SmartPointer<Self> itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::Pointer |
typedef FourthOrderRungeKuttaVelocityFieldIntegrationFilter itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::Self |
Standard ITK "Self" typedefs.
typedef ImageToImageFilter<Image< Vector<TScalarType, NDimensions>, NDimensions + 1>, Image< Vector<TScalarType, NDimensions>, NDimensions> > itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::Superclass |
typedef ThicknessImageInterpolatorType::Pointer itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::ThicknessImageInterpolatorPointer |
typedef NearestNeighborInterpolateImageFunction<ThicknessImageType, TScalarType> itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::ThicknessImageInterpolatorType |
typedef ThicknessImageType::PixelType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::ThicknessImagePixelType |
typedef ThicknessImageType::Pointer itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::ThicknessImagePointer |
typedef Image<TScalarType, NDimensions> itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::ThicknessImageType |
typedef Point<TScalarType, NDimensions + 1> itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::TimeVaryingPointType |
typedef TimeVaryingVelocityImageType::DirectionType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::TimeVaryingVelocityDirectionType |
typedef TimeVaryingVelocityFieldInterpolatorType::Pointer itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::TimeVaryingVelocityFieldInterpolatorPointer |
typedef VectorLinearInterpolateImageFunction< TimeVaryingVelocityImageType, TScalarType > itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::TimeVaryingVelocityFieldInterpolatorType |
typedef Image< TimeVaryingVelocityPixelType, NDimensions + 1 > itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::TimeVaryingVelocityImageType |
typedef TimeVaryingVelocityImageType::IndexType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::TimeVaryingVelocityIndexType |
typedef Vector< TScalarType, NDimensions > itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::TimeVaryingVelocityPixelType |
Standard typedefs.
typedef TimeVaryingVelocityImageType::PointType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::TimeVaryingVelocityPointType |
typedef TimeVaryingVelocityImageType::RegionType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::TimeVaryingVelocityRegionType |
typedef TimeVaryingVelocityImageType::SizeType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::TimeVaryingVelocitySizeType |
typedef TimeVaryingVelocityImageType::SpacingType itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::TimeVaryingVelocitySpacingType |
|
protected |
|
inlineprotected |
|
protectedvirtual |
|
protectedvirtual |
|
inline |
Get the calculated thickness image.
|
virtual |
|
virtual |
Run-time type information (and related methods).
|
virtual |
|
virtual |
Get the field energy, the sum of the Euclidean norm of each velocity vector.
|
virtual |
|
virtual |
Get the maximum displacement after the last update.
|
virtual |
Get the maximum thickness after the last update.
|
virtual |
itk::FourthOrderRungeKuttaVelocityFieldIntegrationFilter< TScalarType, NDimensions >::itkStaticConstMacro | ( | Dimension | , |
unsigned | int, | ||
NDimensions | |||
) |
Get the number of dimensions we are working in.
|
static |
Method for creation through the object factory.
|
protected |
|
virtual |
Flag to control thickness calculation. Default false=off.
|
virtual |
Delta time.
|
virtual |
Finish time.
|
inline |
Set the grey white interface mask. The grey white interface mask memory is managed externally to this class.
|
inline |
Set a distance mask, which is used to stop integrating if euclidean distance is greater than this mask value. The mask image memory is managed externally to this class.
|
virtual |
Start time.
|
inline |
Set a binary mask such that only voxels within mask are integrated. The mask image memory is managed externally to this class.
|
protectedvirtual |