Branch order from vmtk-centerline


Is there any way I can get branch order information from the centerline computed by VMTK?


The “branch order information” is hard to understand.

If you use the logic class of BranchClipper module from SlicerVMTK extension, you can get the number of branches from the input centerline using the ::GetNumberOfBranches() function. You can get each branch with ::GetBranch(). Perhaps these information may suit your context.

I need the " the topological distance (number of nodes to cross) downwards to the farthest terminal branch . For example, as in the images attached below. And along with the branch order for each branch, also the associated diameter, curvature, etc.

I hope this makes sense. Would you know of a method to get this data?



This does not entirely solve your problem, it’s rather a hint to build up a solution. I didn’t get further than exploring a bit further the too many functions offered by the VMTK libs.

The basic idea is to identify all parts of a centerline beyond a selected bifurcation, and annotate them in some way according to the levels in your diagram. The bifurcating parts of a branched centerline can be identified by a ‘blankingArrayName’ after due processing.

From vtkvmtkComputationalGeometry, you can use vtkvmtkCenterlineBranchExtractor() that produces a polydata tagged with many scalar arrays, on which is the ‘blankingArrayName’ that you pass in, typically ‘Blanking’. You can find an example in the ‘Extract centerline’ module’s implementation. Use this polydata output onwards.

Then exploring vtkvmtkCenterlineUtilities() in vtkvmtkComputationalGeometry is very informative. It exposes many functions, 2 of which are GetBlankedGroupsIdList() and FindAdjacentCenterlineGroupIds(). These, and some of the other functions also, may help you identify individual branches at each bifurcation. Then your code should tag them relative to a trunk as reference.

If you get a working solution, please share it here.