Operating system: windows
Slicer version: 4.11
Expected behavior:
Actual behavior:
I had done segmentation of vessel and extract centerline with VMTK tool kit
With centerline metrics, i was able to get diameter of vessel along centerline
(Radius of inscribed sphere). However, clinically, when clinicians plans to do stent insertion, we need to know cross sectional area along to centerline to determine the size of stent.
I have trouble with calculate the cross sectional area perpendicular to center line
Is there any way to automatically calculate perpendicular cross sectional area along centerline ?
At a stenotic point, whether in curved or straight arterial part, the contrasted lumen’s surface area won’t be helpful to measure the vessel’s diameter. It will always be underestimated because, well, it is by definition decreased.
With the Cross-Section Analysis module, you can place a slice view at the point of interest, perpendicular to the centerline, and measure the diameter manually. Calcifications may render this unfeasible, but the diameter downstream and upstream should be useful hints. Centerline Metrics on its own can hint similarly.
Class vtkVmtk/ComputationalGeometry/vtkvmtkPolyDataCenterlineSections.h computes
Area
Min Size
Max Size
Shape
Closed
for a centerline.
This file is not included anywhere, hence it does not seem to be used.
It has an interesting ::RequestData function, this is not public however.
If you can convince VMTK devs to expose these data with the 3 arrays attached to a centerline (Radius, EdgeArray, EdgePCoordArray), that would open a way to show them at every centerline point.
vtkvmtkPolyDataCenterlineSection just gives a value for each centerline section (region between two bifurcations), so it is not very useful for analyzing a single vessel branch.
RequestData is never public, that is called by the VTK filter pipeline executor.
Most recent Slicer versions can now store and visualize scalar arrays associated with centerlines. I’ve now updated “Extract Centerline” module in SlicerVMTK to add radius array to the curve node (it will be available for Slicer Preview Release form tomorrow). This can be used to color the centerline, but it could be also used in Cross-Section analysis module to show “Diameter” in “More” section.
I could not update Cross Section Analysis module to show diameters along a centerline markups curve in the same way as we do for a centerline model.
Radii are available at control points only, with arrayFromMarkupsControlPointData. They are not available at curve points, could not find a function like ‘arrayFromMarkupsCurvePointData’. Control points are fewer than curve points and reslicing is performed along curve points.
Available radii at control points are volatile. If the scene is saved and reloaded, arrayFromMarkupsControlPointData returns None.
More advanced coding might be necessary, its usefulness remains to be seen.
Extract centerline module creates curves with curveNode.SetNumberOfPointsPerInterpolatingSegment(1), which means there is no difference between curve points and control points (if we set a higher number of curve points then markups module can interpolate between the control points to determine values at each curve point, but I’m not sure if this is exposed - we should have a slicer.util.arrayFromMarkupsCurvePointData helper function).
This seems to be a bug in markups module.
@cpinter The issue seems to be that InterpolateControlPointMeasurement is disabled. We should be able to fix this (write its state into the json file) but I’m wondering if we need this at all. Could interpolation be always enabled?
Probably the best would be to remove this variable and always compute the array.
We can improve the performance later. Probably at some point we will need to implement a delayed update mechanism: whenever something is changed then hide measurements, scalar overlays, etc. and request a measurement update; when there are no update requests for X amount of time then perform the measurement update. If really lengthy computations emerge then we may even need to implement manual update mode.
I am trying to measure cross-sectional area of slices perpendicular to the centreline of a tendon that I segmented. When I go to the cross-section analysis module, all the sections are blank and I can’t see any details about the area or other measures. I will include a picture below. How can I fix this problem?
While it’s certainly information of interest, Centerline metrics does not have any knowledge of this area. You may alternatively use ‘Curved planar reformat’ and ‘Segment cross-section area’ modules if surrounding anatomy is not important.
This is just a problem on macOS with the Slicer Stable Release. You can either go to menu → Edit → Application settings → Appearance and set Style → “Light Slicer”; or switch to the Slicer Preview Release, where this problem has been already fixed.
It would fix the display issue. However, SlicerExtension-VMTK is available for VTK8, while Slicer Preview Release is built on top of VTK9. So module ‘Centerline metrics’ won’t be available to @joannecallow. I hope some grant kicks in soon to help porting SlicerExtension-VMTK to VTK9.
You can run VMTK in Slicer Stable Release and load the scene in to Slicer Preview Release. VMTK update for VTK9 is already funded, we just need for @jcfr to be freed up (expected to happen any day now).
The VMTK ”Cross-section analysis’” can compute perpendicular cross-sectional areas along a centerline, but is it possible to extract the data for all voxels comprising a given cross-section (the numerical data)? I have a segmentation of a spiralling tube-like structure and need to compute some statistics on each cross-section along the tube. I can get the centerline control points with slicer.util.arrayFromModelPointData but I need all the data points of the corresponding cross-section, ideally of the original scalar volume that was used for the segmentation.
Many thanks!