VMTK generated centerline curves missing structure hierarchy

Hi,

I am using the Extract Centerline module of VMTK extension to generate network and centerline curves for the network and centerline models. The problem is that the network curve generated is missing the hierarchical structure, while the centerline cuve only consists of a single curve. What could be causing this?


Network does not have a hierarchical structure. It is an arbitrary graph structure. You can traverse the lines and determine branching points by finding points that are used in multiple lines.

Centerline curve is not a single curve. It is a single model (polydata) that contains lots of polylines. It is a hierarchical structure (it is a “forest” topology) and you can use VMTK filters to identify branches (see for example how the Slicer module creates a curve from each branch).

I have a Centerline model shown in the subject hierarchy tab above, which is a polydata object with multiple lines, which is fine and is drawn in the 3d view in green in the first image. The problem is with the Centerline curve (0) which is obtained from the createCurveTreeFromCenterline function (it should be called when I add a new curve in the ‘Centerline curve’ field as shown in the image below in the Extract Centerline module) and it should be heirarchical structure with tree topology.

I have tried this on a different vessel tree centerline and this approach gives me the hierarchical structure but for this lung airway which is clearly a tree structure it fails and I only get a single curve Centerline curve (0) shown in the second image in my original post. The result on a different tree is shown in the image below, and you can see in the Subject hierarchy tab that the Centerline curve (0) has a tree topology with children nodes.

I know I can write a custom function to find where the centerline model branches and create a tree myself, but I was wondering why this function does not work for this airway tree.

In the second image of the top post (where there is only a single short curve) the centerline extraction seems to have failed in some unexpected way. You may see in the application log some hints of what happened. If you share the input segmentation then I can have a look.

I get the following warnings when running the Extract Centerline Module.

[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 240
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Degenerate descent detected. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.

There are also some other errors that I always get during startup, but they don’t seem to affect the centerline extraction normally. The whole output is as following.

Python 3.9.10 (main, Apr  5 2024, 04:28:47) 
[GCC 7.3.1 20180303 (Red Hat 7.3.1-5)] on linux2
>>> 
Failed to load vtkSlicerStenosisMeasurement3DModuleLogicPython: No module named vtkSlicerShapeModuleMRMLPython
Failed to load vtkSlicerCrossSectionAnalysisModuleLogicPython: No module named vtkSlicerShapeModuleMRMLPython
[Qt]   Error(s):
[Qt]     CLI executable: /home/roman/Slicer-5.6.2/slicer.org/Extensions-32448/SlicerVMTK/lib/Slicer-5.6/qt-loadable-modules/vtkvmtk.py
[Qt]     The process failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program.
[Qt] Fail to instantiate module  "vtkvmtk"
[Qt] The following modules failed to be instantiated:
[Qt]    vtkvmtk
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 240
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Degenerate descent detected. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.
[VTK] Warning: In vtkvmtkSteepestDescentLineTracer.cxx, line 213
[VTK] vtkvmtkSteepestDescentLineTracer (0x192f00d0): Can't find a steepest descent edge. Target not reached.

It seems to fail at the first bifurcation point.



I get the full centerline curve after grow the segmentation mask.

1 Like