Slicer
4.11
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
|
Interpolates contours between slices. Based on a paper by Albu et al. More...
#include <Libs/vtkITK/itkMorphologicalContourInterpolator.h>
Public Types | |
using | LabeledSlicesType = itksys::hash_map< typename TImage::PixelType, SliceSetType > |
using | Pointer = SmartPointer< Self > |
using | Self = MorphologicalContourInterpolator |
using | SliceIndicesType = std::vector< LabeledSlicesType > |
using | SliceSetType = std::set< typename TImage::IndexValueType > |
using | SliceType = Image< typename TImage::PixelType, TImage::ImageDimension - 1 > |
using | Superclass = ImageToImageFilter< TImage, TImage > |
Public Member Functions | |
void | ClearLabeledSliceIndices () |
void | DetermineSliceOrientations () |
SliceSetType | GetLabeledSliceIndices (unsigned int axis, typename TImage::PixelType label) |
SliceIndicesType | GetLabeledSliceIndices () |
ITK_DISALLOW_COPY_AND_ASSIGN (MorphologicalContourInterpolator) | |
itkGetConstMacro (Label, typename TImage::PixelType) | |
itkGetConstMacro (Axis, int) | |
itkGetConstMacro (HeuristicAlignment, bool) | |
itkGetConstMacro (UseDistanceTransform, bool) | |
itkGetConstMacro (UseCustomSlicePositions, bool) | |
itkGetConstMacro (UseBallStructuringElement, bool) | |
itkGetMacro (Label, typename TImage::PixelType) | |
itkGetMacro (Axis, int) | |
itkGetMacro (HeuristicAlignment, bool) | |
itkGetMacro (UseDistanceTransform, bool) | |
itkGetMacro (UseCustomSlicePositions, bool) | |
itkGetMacro (UseBallStructuringElement, bool) | |
itkNewMacro (Self) | |
itkSetMacro (Label, typename TImage::PixelType) | |
itkSetMacro (Axis, int) | |
itkSetMacro (HeuristicAlignment, bool) | |
itkSetMacro (UseDistanceTransform, bool) | |
itkSetMacro (UseCustomSlicePositions, bool) | |
itkTypeMacro (MorphologicalContourInterpolator, ImageToImageFilter) | |
void | SetLabeledSliceIndices (unsigned int axis, typename TImage::PixelType label, const std::vector< typename TImage::IndexValueType > &indices) |
void | SetLabeledSliceIndices (unsigned int axis, typename TImage::PixelType label, const SliceSetType &indices) |
void | SetUseBallStructuringElement (bool useBall) |
Protected Types | |
using | BinarizerType = BinaryThresholdImageFilter< SliceType, BoolSliceType > |
using | BoolImageType = Image< bool, TImage::ImageDimension > |
using | BoolSliceType = Image< bool, TImage::ImageDimension - 1 > |
using | BoundingBoxesType = itksys::hash_map< typename TImage::PixelType, typename TImage::RegionType > |
using | ConnectedComponentsType = ConnectedComponentImageFilter< BoolSliceType, SliceType > |
using | FloatSliceType = Image< float, TImage::ImageDimension - 1 > |
using | PixelList = std::vector< typename TImage::PixelType > |
using | RoiType = ExtractImageFilter< TImage, SliceType > |
Protected Member Functions | |
SliceType::IndexType | Align (typename SliceType::Pointer &iConn, typename TImage::PixelType iRegionId, typename SliceType::Pointer &jConn, const PixelList &jRegionIds) |
void | AllocateOutputs () override |
SliceType::RegionType | BoundingBox (itk::SmartPointer< SliceType > image) |
IdentifierType | CardinalSymmetricDifference (typename BoolSliceType::Pointer &shape1, typename BoolSliceType::Pointer &shape2) |
SliceType::IndexType | Centroid (typename SliceType::Pointer &conn, const PixelList ®ionIds) |
BoolSliceType::Pointer | Dilate1 (typename BoolSliceType::Pointer &seed, typename BoolSliceType::Pointer &mask) |
template<typename T2 > | |
void | ExpandRegion (typename T2::RegionType ®ion, const typename T2::IndexType &index) |
void | Extrapolate (int axis, TImage *out, typename TImage::PixelType label, typename TImage::IndexValueType i, typename TImage::IndexValueType j, typename SliceType::Pointer &iConn, typename TImage::PixelType iRegionId) |
BoolSliceType::Pointer | FindMedianImageDilations (typename BoolSliceType::Pointer &intersection, typename BoolSliceType::Pointer &iMask, typename BoolSliceType::Pointer &jMask) |
BoolSliceType::Pointer | FindMedianImageDistances (typename BoolSliceType::Pointer &intersection, typename BoolSliceType::Pointer &iMask, typename BoolSliceType::Pointer &jMask) |
void | GenerateData () override |
std::vector< typename BoolSliceType::Pointer > | GenerateDilationSequence (typename BoolSliceType::Pointer &begin, typename BoolSliceType::Pointer &end) |
bool | ImagesEqual (typename BoolSliceType::Pointer &a, typename BoolSliceType::Pointer &b) |
void | Interpolate1to1 (int axis, TImage *out, typename TImage::PixelType label, typename TImage::IndexValueType i, typename TImage::IndexValueType j, typename SliceType::Pointer &iConn, typename TImage::PixelType iRegionId, typename SliceType::Pointer &jConn, typename TImage::PixelType jRegionId, const typename SliceType::IndexType &translation, bool recursive) |
void | Interpolate1toN (int axis, TImage *out, typename TImage::PixelType label, typename TImage::IndexValueType i, typename TImage::IndexValueType j, typename SliceType::Pointer &iConn, typename TImage::PixelType iRegionId, typename SliceType::Pointer &jConn, const PixelList &jRegionIds, const typename SliceType::IndexType &translation) |
void | InterpolateAlong (int axis, TImage *out, float startProgress, float endProgress) |
void | InterpolateBetweenTwo (int axis, TImage *out, typename TImage::PixelType label, typename TImage::IndexValueType i, typename TImage::IndexValueType j, typename SliceType::Pointer &iconn, typename SliceType::Pointer &jconn) |
IdentifierType | Intersection (typename SliceType::Pointer &iConn, typename TImage::PixelType iRegionId, typename SliceType::Pointer &jConn, const PixelList &jRegionIds, const typename SliceType::IndexType &translation) |
void | IntersectionRegions (const typename SliceType::IndexType &translation, typename SliceType::RegionType &iRegion, typename SliceType::RegionType &jRegion) |
FloatSliceType::Pointer | MaurerDM (typename BoolSliceType::Pointer &inImage) |
MorphologicalContourInterpolator () | |
SliceType::Pointer | RegionedConnectedComponents (const typename TImage::RegionType ®ion, typename TImage::PixelType label, IdentifierType &objectCount) |
SliceType::Pointer | TranslateImage (typename SliceType::Pointer &image, const typename SliceType::IndexType &translation, typename SliceType::RegionType newRegion) |
~MorphologicalContourInterpolator () override=default | |
Protected Attributes | |
int | m_Axis { -1 } |
BinarizerType::Pointer | m_Binarizer |
BoundingBoxesType | m_BoundingBoxes |
ConnectedComponentsType::Pointer | m_ConnectedComponents |
bool | m_HeuristicAlignment { true } |
TImage::PixelType | m_Label |
SliceIndicesType | m_LabeledSlices |
IdentifierType | m_MaxAlignIters |
IdentifierType | m_MinAlignIters |
RoiType::Pointer | m_RoI |
IdentifierType | m_ThreadCount |
bool | m_UseBallStructuringElement { false } |
bool | m_UseCustomSlicePositions { false } |
bool | m_UseDistanceTransform { true } |
Friends | |
template<typename T > | |
class | MorphologicalContourInterpolatorParallelInvoker |
Interpolates contours between slices. Based on a paper by Albu et al.
Filter can be restricted to run along only one axis, and/or to interpolate just one label.
Since optimal alignment between slices would require exhaustive search, the default is to use heuristic (breadth first search starting from centroid).
There is also an alternative algorithm based on distance transform approach. It is slightly faster, but it can jump across a twisty shape (not geodesic).
Reference: Albu AB, Beugeling T, Laurendeau D. "A morphology-based approach for interslice interpolation of anatomical slices from volumetric images." IEEE Trans Biomed Eng. 2008 Aug;55(8):2022-38. DOI:10.1109/TBME.2008.921158
Acknowledgement: This work is supported by NIH grant R01 EB014346, "Continued development and maintenance of the ITK-SNAP 3D image segmentation software."
Definition at line 65 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 394 of file itkMorphologicalContourInterpolator.h.
|
protected |
Derived image type alias.
Definition at line 235 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 237 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 367 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 397 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 236 of file itkMorphologicalContourInterpolator.h.
using itk::MorphologicalContourInterpolator< TImage >::LabeledSlicesType = itksys::hash_map< typename TImage::PixelType, SliceSetType > |
Definition at line 210 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 311 of file itkMorphologicalContourInterpolator.h.
using itk::MorphologicalContourInterpolator< TImage >::Pointer = SmartPointer< Self > |
Definition at line 77 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 391 of file itkMorphologicalContourInterpolator.h.
using itk::MorphologicalContourInterpolator< TImage >::Self = MorphologicalContourInterpolator |
Standard class type alias.
Definition at line 75 of file itkMorphologicalContourInterpolator.h.
using itk::MorphologicalContourInterpolator< TImage >::SliceIndicesType = std::vector< LabeledSlicesType > |
Definition at line 211 of file itkMorphologicalContourInterpolator.h.
using itk::MorphologicalContourInterpolator< TImage >::SliceSetType = std::set< typename TImage::IndexValueType > |
An std::set of slice indices which need to be interpolated.
Definition at line 169 of file itkMorphologicalContourInterpolator.h.
using itk::MorphologicalContourInterpolator< TImage >::SliceType = Image< typename TImage::PixelType, TImage::ImageDimension - 1 > |
Definition at line 78 of file itkMorphologicalContourInterpolator.h.
using itk::MorphologicalContourInterpolator< TImage >::Superclass = ImageToImageFilter< TImage, TImage > |
Definition at line 76 of file itkMorphologicalContourInterpolator.h.
|
protected |
|
overrideprotecteddefault |
|
protected |
How much j needs to be translated to best align with i
|
overrideprotected |
Copied from ImageSource and changed to allocate a cleared buffer.
|
protected |
Calculates a bounding box of non-zero pixels.
|
protected |
The returns cardingal of the symmetric distance between images. The images must cover the same region.
|
protected |
Returns the centroid of given regions
|
inline |
Clears all custom slice positions.
Definition at line 173 of file itkMorphologicalContourInterpolator.h.
void itk::MorphologicalContourInterpolator< TImage >::DetermineSliceOrientations | ( | ) |
If there is a pixel whose all 4-way neighbors belong the the same label except along one axis, and along that axis its neighbors are 0 (background), then that axis should be interpolated along. Interpolation is possible along more than one axis. Updates LabeledSliceIndices.
|
protected |
Seed and mask must cover the same region (size and index the same).
|
protected |
Expands a region to incorporate the provided index. Assumes both a valid region and a valid index. It can be invoked with 2D or 3D region, hence the additional template parameter.
|
protected |
Slice i has a region, slice j does not
|
protected |
Finds an interpolating mask for these two aligned masks
|
protected |
Finds an interpolating mask for these two aligned masks
|
overrideprotected |
Does the real work.
|
protected |
A sequence of conditional dilations starting with begin and reaching end. begin and end must cover the same region (size and index the same)
|
inline |
Slice indices between which interpolation is done.
Definition at line 204 of file itkMorphologicalContourInterpolator.h.
|
inline |
Slice indices between which interpolation is done.
Definition at line 215 of file itkMorphologicalContourInterpolator.h.
|
protected |
Are these two slices equal?
|
protected |
Build transition sequence and pick the median
|
protected |
Splits the bigger region and does N 1-to-1 interpolations
|
protected |
If interpolation is done along more than one axis, the interpolations are merged using a modified "or" rule: -if all interpolated images have 0 for a given pixel, the output is 0 -if just one image has a non-zero label, then that label is chosen -if more than one image has a non-zero label, last written label is chosen
|
protected |
Determines correspondances between two slices and calls apropriate methods.
|
protected |
Returns number of intersecting pixels
|
protected |
Calculates maximum intersection region for both slices given a translation. Both inputs are modified so that jRegion is a translated version of iRegion.
itk::MorphologicalContourInterpolator< TImage >::ITK_DISALLOW_COPY_AND_ASSIGN | ( | MorphologicalContourInterpolator< TImage > | ) |
itk::MorphologicalContourInterpolator< TImage >::itkGetConstMacro | ( | Label | , |
typename TImage::PixelType | |||
) |
Which label is interpolated. 0 means all labels (default).
itk::MorphologicalContourInterpolator< TImage >::itkGetConstMacro | ( | Axis | , |
int | |||
) |
Axis of interpolation. -1 means interpolation along all axes (default).
itk::MorphologicalContourInterpolator< TImage >::itkGetConstMacro | ( | HeuristicAlignment | , |
bool | |||
) |
Heuristic alignment of regions for interpolation is faster than optimal alignment. Default is heuristic.
itk::MorphologicalContourInterpolator< TImage >::itkGetConstMacro | ( | UseDistanceTransform | , |
bool | |||
) |
Using distance transform instead of repeated dilations to calculate the median contour is slightly faster, but produces lower quality interpolations. Default is OFF (that is, use repeated dilations).
itk::MorphologicalContourInterpolator< TImage >::itkGetConstMacro | ( | UseCustomSlicePositions | , |
bool | |||
) |
Use custom slice positions (not slice auto-detection). SetLabeledSliceIndices has to be called prior to Update().
itk::MorphologicalContourInterpolator< TImage >::itkGetConstMacro | ( | UseBallStructuringElement | , |
bool | |||
) |
Use ball instead of default cross structuring element for repeated dilations.
itk::MorphologicalContourInterpolator< TImage >::itkGetMacro | ( | Label | , |
typename TImage::PixelType | |||
) |
Which label is interpolated. 0 means all labels (default).
itk::MorphologicalContourInterpolator< TImage >::itkGetMacro | ( | Axis | , |
int | |||
) |
Axis of interpolation. -1 means interpolation along all axes (default).
itk::MorphologicalContourInterpolator< TImage >::itkGetMacro | ( | HeuristicAlignment | , |
bool | |||
) |
Heuristic alignment of regions for interpolation is faster than optimal alignment. Default is heuristic.
itk::MorphologicalContourInterpolator< TImage >::itkGetMacro | ( | UseDistanceTransform | , |
bool | |||
) |
Using distance transform instead of repeated dilations to calculate the median contour is slightly faster, but produces lower quality interpolations. Default is OFF (that is, use repeated dilations).
itk::MorphologicalContourInterpolator< TImage >::itkGetMacro | ( | UseCustomSlicePositions | , |
bool | |||
) |
Use custom slice positions (not slice auto-detection). SetLabeledSliceIndices has to be called prior to Update().
itk::MorphologicalContourInterpolator< TImage >::itkGetMacro | ( | UseBallStructuringElement | , |
bool | |||
) |
Use ball instead of default cross structuring element for repeated dilations.
itk::MorphologicalContourInterpolator< TImage >::itkNewMacro | ( | Self | ) |
Method for creation through the object factory.
itk::MorphologicalContourInterpolator< TImage >::itkSetMacro | ( | Label | , |
typename TImage::PixelType | |||
) |
Interpolate only this label. Interpolates all labels if set to 0 (default).
itk::MorphologicalContourInterpolator< TImage >::itkSetMacro | ( | Axis | , |
int | |||
) |
Interpolate only along this axis. Interpolates along all axes if set to -1 (default).
itk::MorphologicalContourInterpolator< TImage >::itkSetMacro | ( | HeuristicAlignment | , |
bool | |||
) |
Heuristic alignment of regions for interpolation is faster than optimal alignment. Default is heuristic.
itk::MorphologicalContourInterpolator< TImage >::itkSetMacro | ( | UseDistanceTransform | , |
bool | |||
) |
Using distance transform instead of repeated dilations to calculate the median contour is slightly faster, but produces lower quality interpolations. Default is OFF (that is, use repeated dilations).
itk::MorphologicalContourInterpolator< TImage >::itkSetMacro | ( | UseCustomSlicePositions | , |
bool | |||
) |
Use custom slice positions (not slice auto-detection). SetLabeledSliceIndices has to be called prior to Update().
itk::MorphologicalContourInterpolator< TImage >::itkTypeMacro | ( | MorphologicalContourInterpolator< TImage > | , |
ImageToImageFilter | |||
) |
Run-time type information (and related methods).
|
protected |
Creates a signed distance field image.
|
protected |
Connected components of a specified region.
|
inline |
If default slice detection is not wanted, slice indices between which interpolation is done can be set using this method.
Definition at line 183 of file itkMorphologicalContourInterpolator.h.
|
inline |
If default slice detection is not wanted, slice indices between which interpolation is done can be set using this method.
Definition at line 196 of file itkMorphologicalContourInterpolator.h.
|
inline |
Use ball instead of default cross structuring element for repeated dilations.
Definition at line 145 of file itkMorphologicalContourInterpolator.h.
|
protected |
Crates a translated copy of part of the image which fits in the newRegion.
|
friend |
Definition at line 69 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 224 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 395 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 368 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 398 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 225 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 223 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 232 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 230 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 229 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 392 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 231 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 227 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 228 of file itkMorphologicalContourInterpolator.h.
|
protected |
Definition at line 226 of file itkMorphologicalContourInterpolator.h.