Class Skeleton3D
java.lang.Object
gov.nih.mipav.view.renderer.flythroughview.Skeleton3D
Implementation of the 3D skeletonization of a binary volume based on the paper "Penalized-distance volumetric
skeleton algorithm"; I. Bitter, A. Kaufman, M. Sato; IEEE Transactions on Visualization and Computer Graphics, Vol.
7, No. 3, pp. 195-206, July-September 2001.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final booleanSet this flag to allow the output of volume file which result as part of the computation.private float[]Array of Euclidean distances to the nearest boundary for each inside voluem sample.private short[]Volume of bitmasked values associated with each sample.private floatDOCUMENT ME!private intThis the linear array index for the sample from which all computed paths will originate.private ModelImageContains the image being skeletonized.private ModelImage3DLayoutDescribes the organization of the volume data in a linear array.private static final shortDOCUMENT ME!private static final shortDOCUMENT ME!private static final shortThese are bit masks used in the result volume which identifies how samples were classified at different steps during the processing.private static final shortDOCUMENT ME!private static final shortDOCUMENT ME!private static final shortDOCUMENT ME! -
Constructor Summary
ConstructorsConstructorDescriptionSkeleton3D(ModelImage kImage, ModelImage3DLayout kVolumeLayout) Create a 3D skeletonization of the specified binary volume of data. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidcomputeVolumeBoundaryDist(WildMagic.LibFoundation.Mathematics.Vector3f[] akVolumeBoundaryDistGradient) Compute the Euclidean distance from each sample "inside" the volume to the nearest point on the surface surrounding the volume.voiddispose()Called to free up resources.voidfinalize()Called by the garbage collector.floatAccess the maximum distance of any "inside" point to the boundary.getPathGraph(int iMaxBranches, float fMinBranchLength) Given previously determined starting point, compute the tree-structured skeleton path through the volume where no branch is shorter than the specified amount.short[]getSkeletonizedArray(int iMaxBranches, float fMinBranchLength) Given previously determined starting point, compute the tree-structured skeleton path through the volume where no branch is shorter than the specified amount.private voidmarkPossibleSkeletonSamples(WildMagic.LibFoundation.Mathematics.Vector3f[] akVolumeBoundaryDistGradient) Mark all inside samples that have nonuniform boundary distance gradients and then "connect" such samples by following the gradient.private voidmarkSkeletonPoint(int iIndex, float fNeighborRadius) Mark the specified volume sample as being part of the skeleton and mark all the connected samples within the specified radius of the specified sample as being neighbors.private voidsaveVolume(String kFilename, int iFileType, short[] asVolumeData) Write the specified volume to the file of the specified name.
-
Field Details
-
DEBUG
private static final boolean DEBUGSet this flag to allow the output of volume file which result as part of the computation.- See Also:
-
RESULT_MASK_INSIDE
private static final short RESULT_MASK_INSIDEThese are bit masks used in the result volume which identifies how samples were classified at different steps during the processing. RESULT_MASK_INSIDE - subset of all samples; those that are inside RESULT_MASK_NONUNIFORM_GRADIENT - subset of samples marked with RESULT_MASK_INSIDE that have nonuniform boundary distance gradients RESULT_MASK_FLAGGED - subset of samples marked with RESULT_MASK_INSIDE and including all samples marked with RESULT_MASK_NONUNIFORM_GRADIENT are those samples that connected those samples marked with RESULT_MASK_NONUNIFORM_GRADIENT RESULT_MASK_CONNECTED - subset of samples marked with RESULT_MASK_FLAGGED that are largest 26-connected collection of samples marked with RESULT_MASK_FLAGGED RESULT_MASK_SKELETON - subset of samples marked with RESULT_MASK_CONNECTED that are the samples which make up the the skeleton of the binary volume RESULT_MASK_SKELETON_NEIGHBOR - the subset of samples marked RESULT_MARK_CONNECTED that within a certain radius of samples marked as RESULT_MARK_SKELETON.- See Also:
-
RESULT_MASK_NONUNIFORM_GRADIENT
private static final short RESULT_MASK_NONUNIFORM_GRADIENTDOCUMENT ME!- See Also:
-
RESULT_MASK_FLAGGED
private static final short RESULT_MASK_FLAGGEDDOCUMENT ME!- See Also:
-
RESULT_MASK_CONNECTED
private static final short RESULT_MASK_CONNECTEDDOCUMENT ME!- See Also:
-
RESULT_MASK_SKELETON_NEIGHBOR
private static final short RESULT_MASK_SKELETON_NEIGHBORDOCUMENT ME!- See Also:
-
RESULT_MASK_SKELETON
private static final short RESULT_MASK_SKELETONDOCUMENT ME!- See Also:
-
m_afBoundarySampleDistMin
private float[] m_afBoundarySampleDistMinArray of Euclidean distances to the nearest boundary for each inside voluem sample. Distances are in sample coordinates. Also compute the maximum of these values. -
m_asVolumeData
private short[] m_asVolumeDataVolume of bitmasked values associated with each sample. The bitmask values are used to classify each sample during the various stages of the skeletonization process. -
m_fMaxBoundarySampleDistMin
private float m_fMaxBoundarySampleDistMinDOCUMENT ME! -
m_iIndexPathStart
private int m_iIndexPathStartThis the linear array index for the sample from which all computed paths will originate. -
m_kImage
Contains the image being skeletonized. -
m_kVolumeLayout
Describes the organization of the volume data in a linear array.
-
-
Constructor Details
-
Skeleton3D
Create a 3D skeletonization of the specified binary volume of data.- Parameters:
kImage- ModelImage contains the volume layout and its datakVolumeLayout- ModelImage3DLayout Contains the mapping between sample coordiantes and real coordinates for the input volume.- Throws:
IllegalArgumentException- DOCUMENT ME!
-
-
Method Details
-
dispose
public void dispose()Called to free up resources. -
finalize
public void finalize()Called by the garbage collector. -
getMaxBoundaryDistance
public float getMaxBoundaryDistance()Access the maximum distance of any "inside" point to the boundary.- Returns:
- float Maximum of distances.
-
getPathGraph
Given previously determined starting point, compute the tree-structured skeleton path through the volume where no branch is shorter than the specified amount.- Parameters:
iMaxBranches- int Maximum number of branches to extract.fMinBranchLength- float All branches must be longer than this length.- Returns:
- FlyPathGraphSamples A tree-structured skeleton path where each path is represented by its samples.
-
getSkeletonizedArray
public short[] getSkeletonizedArray(int iMaxBranches, float fMinBranchLength) Given previously determined starting point, compute the tree-structured skeleton path through the volume where no branch is shorter than the specified amount.- Parameters:
iMaxBranches- int Maximum number of branches to extract.fMinBranchLength- float All branches must be longer than this length.- Returns:
- FlyPathGraphSamples A tree-structured skeleton path where each path is represented by its samples.
-
computeVolumeBoundaryDist
private void computeVolumeBoundaryDist(WildMagic.LibFoundation.Mathematics.Vector3f[] akVolumeBoundaryDistGradient) Compute the Euclidean distance from each sample "inside" the volume to the nearest point on the surface surrounding the volume. Based on the algorithm described in "New algorithms for Euclidean distance transformation of an n-dimensional digitized picture with applications", by T. Saito and J. Toriwaki, Pattern Recognition, Vol. 27, No. 11, pp. 1551-1565, 1994. Fills in the m_afBoundarySampleDistMin linear array of floating point values with the Euclidean distance measures; zero values will be stored in the array corresponding to samples outside the surface. Compute the penalty value associated with each sample based on its relative distance to the boundary. Compute the gradient of the distance field at each sample inside the surface (indicated by a positive distance measure).- Parameters:
akVolumeBoundaryDistGradient- Vector3f[] Array of normalized boundary distance gradients computed at each sample. The input array is assumed to have all entries null. Upon return, only those samples that are inside the volume will have a gradient value stored.
-
markPossibleSkeletonSamples
private void markPossibleSkeletonSamples(WildMagic.LibFoundation.Mathematics.Vector3f[] akVolumeBoundaryDistGradient) Mark all inside samples that have nonuniform boundary distance gradients and then "connect" such samples by following the gradient. Updates the m_asVolumeData linear array of 16-bit signed bit mask values representing the state of each sample in the skeletonziation algorithm. The RESULT_MASK_* constant bit masks are OR'ed into this field. Any sample having nonuniform gradients will be marked with the RESULT_MASK_NONUNIFORM_GRADIENT bit mask and the RESULT_MASK_FLAGGED bit mask. Any sample along the gradient path of connecting the nonuniform gradient samples will be marked only with the RESULT_MASK_FLAGGED bit mask. This array has values already set upon input and only OR's in additional bit masks.- Parameters:
akVolumeBoundaryDistGradient- linear array of Vector3f instances representing the (unnormalized) boundary distance gradient vectors for inside samples. The null reference will be stored for outside samples.
-
markSkeletonPoint
private void markSkeletonPoint(int iIndex, float fNeighborRadius) Mark the specified volume sample as being part of the skeleton and mark all the connected samples within the specified radius of the specified sample as being neighbors.- Parameters:
iIndex- int Identifies the sample in the volume to be markes as being on the skeleton path.fNeighborRadius- float Radius of connected neighbors to mark as being skeleton neighbors.
-
saveVolume
Write the specified volume to the file of the specified name.- Parameters:
kFilename- name of the file for storing the volumeiFileType- type of file selected from one of the constants defined in FileBase class.asVolumeData- linear array of signed 16-bit values containing the volume data at each sample where the samples are identified by the specified volume layout
-