The Figure below describes our pipeline for extracting the Reduced Graph representation from the 3D model of an organelle. We start with a 3D voxel representation of an organelle, and use an off-the-shelf implementation of the algorithm proposed by Kalman (2014)1 to extract its 3D skeleton (shown in panel (b) in the Figure below). The skeletonization algorithm can be intuitively thought of as chipping away with a chisel at the 3D voxel representation until the "thickness" is just one voxel, at the same time ensuring that the number of connected components in the shape does not change.
Now this Extracted Skeleton itself can be thought of as a grpahical representation of the shape with each voxel representing a node in the graph, with edges between adjacent voxels of length 1 unit. However the issue with using this as a descriptor is that:
To overcome these issues, we proposed the Reduced Graph representation (panel (c) in the Figure), which I will discuss in detail below.
Pipeline for extraction of Reduced Graph from a 3D voxelized model.
The Extracted Skeleton graph $G$ contains a large number of vertices denoted by the set $V$. We define two subsets of $V$:
We want to reduce the Skeleton Graph $G$ to the Reduced Graph $G_S$ whose set of vertices is $J \cup E$ (together referred to as the Key Nodes). Moreover we want $G_S$ to preserve topological features such as paths and distances (along the 3D Extracted Skeleton) between any pair of Key Nodes. Lastly, we want $G_S$ to preserve any cycles present in the Extracted Skeleton graph $G$ and also preserve multiple paths between any two Key Nodes.
The algorithm consists of two stages: (1) Reduction, and (2) Pruning. An application of the algorithm on a Toy Graph follows below.
Reduction
To extract $G_S$ from $G$ while preserving the aforementioned desirable properties, we use a traversal which is a modified version of Breadth First Search, on the skeleton graph $G$. At each step of the traversal, we only enqueue Key Nodes to our traversal queue. That is, we initialize the queue with a Key Node, and while visiting a Key Node $v$, we only enqueue:
While doing this traversal we keep track of two metrics (which could be used as edge weights in the Reduced Graph):
Cycles We keep track of cycles in $G$ by noting that if we re-visit any Key Node, that indicates the presence of a cycle containing that Key Node.
Pruning
Once we have created the Reduced Graph $G_S$, it may still contain short branches or cycles with small circumference, which are not essential for capturing a sense of the shape. Therefore, we prune the graph by collapsing all edges and cycles which have a length below a certain threshold (a hyperparameter).
Application of the Graph Reduction algorithm on a toy graph.