11/7/15 - Disperse algorithm
After reading through the Disperse documentation, it is clear that Disperse is better than Amira for identifying filaments. This is because Disperse considers each cell in the grid in relation to others, whereas Amira applies a black/white mask to the data.
Here is a brief outline of the Disperse algorithm:
Disperse goes through cell by cell and identifies critical points (max, min, and saddlepoints). It assigns a value, called the 'critical index' to each type of extrema as given here:
Max | 2 |
Saddle point | 1 |
Min | 0 |
After it does this, it considers pairs of critical points that only differ by 1 in the critical index (i.e. saddle points + max, or saddle points + min). These pairs are termed 'persistence pairs'.
Now the persistence threshold is the difference between 2 points in a persistence pair. So if the points measure density, say, the threshold would say — is the difference in density at the 2 critical points in the pair > or < the persistence threshold? If it is less than, that pair is thrown out. If it is greater than, it is kept.
The idea is that pairs with lower 'persistence' (i.e. below the persistence threshold) are topologically weak structures — meaning that they would not persist above some noise added to the data set. Even weak noise would disrupt the extrema in the pair such that they may no longer be extrema and thus the pair would be destroyed. Filtering the data using persistence is a way of keeping topologically relevant structures in the data set. Now, using the 'mean density' as a persistence threshold essentially gets rid of all data point pairs that are below the mean density (density is strictly positive).
Now between all persistence pairs that survive, arcs are drawn that connect saddle points to the 2 extrema which connect to them (each saddle point is connected to exactly 2 extrema). Arcs are tangent lines to the gradient field in the data set. Filaments (in Disperse) are, by default, arcs that connect a saddle point with 2 maximum.
11/6/15 - Using Amira with the mean density to create filaments
10/6/15 - Segmentation masks in Amira
Amira segments the data to do skeletonization. This means it throws out pixels below a certain user defined threshold. Of the remaining pixels it 1) finds a centerline through the data that, 2) is through the middle, and then 3) thins this line to be 1 pixel across. This is all to retain "homotopy" of the filamentary network. This is not ideal for column density data: as the threshold is lowered to account for lower density pixels, the structures get blown out and the skeletonization algorithm breaks down. Here are some images that gradually increase the threshold to illustrate this (smaller to larger thresholds):
From this, one can interactively click on the filament that is of interest, and get the resultant statistics for it. However, to sample a wide range of densities, this requires multiple thresholding steps, and probably performs worse than disperse.
As a different project, one might want to track filaments in a 3d data cube and compare to the number of filaments found in projection. Here the projections might be evaluated using disperse. Take a look at this image of a neuron:
If the hypothesis that all filaments are r=0.1 pc across is true, then maybe one gets cleaner segments; that is, filamentary structure that is more amenable to this segmentation approach. Also, one could use a physically meaningful density threshold to segment the data (i.e. the density at which molecular hydrogen can form efficiently). However, for now this project is going to be put on hold.
10/5/15
The "auto" skeletonization method appears to take a threshold as an input. This threshold seems to 'mask' (or 'segment') the data so to only look at voxels with values above this threshold. It then does a 'centerline' analysis, a 'distance map' analysis, and finally a 'thinning' of the skeleton so that it is only 1 voxel across. To see the paper on this algorithm, it is attached to this page. It is also possible to do these 3 steps on your own in Amira, and thus gain more control over the skeletonization process.
Here are some results testing different thresholds in auto skeletonization mode, and comparing them to Federrath's figure (the paper that contains this figure is attached to this page).
There are a lot of clear filamentary structure that Amira is missing.
Attachments (23)
- comparept01.png (631.7 KB ) - added by 9 years ago.
- compare1.png (622.2 KB ) - added by 9 years ago.
- compare2.png (606.0 KB ) - added by 9 years ago.
- compare5.png (600.7 KB ) - added by 9 years ago.
- FedHisto.png (17.6 KB ) - added by 9 years ago.
- window1.png (131.9 KB ) - added by 9 years ago.
- windo2.png (124.5 KB ) - added by 9 years ago.
- windo3.png (114.5 KB ) - added by 9 years ago.
- windo4.png (187.2 KB ) - added by 9 years ago.
- windo5.png (123.6 KB ) - added by 9 years ago.
- Federrath_filaments.pdf (2.5 MB ) - added by 9 years ago.
- fouard-tmi-2006.pdf (2.4 MB ) - added by 9 years ago.
- ds9histo.png (13.1 KB ) - added by 9 years ago.
- 10228full.png (124.2 KB ) - added by 9 years ago.
- 10228thresh.png (4.6 KB ) - added by 9 years ago.
- 2757full.png (146.0 KB ) - added by 9 years ago.
- 2757thresh.png (19.5 KB ) - added by 9 years ago.
- 29360full.png (121.6 KB ) - added by 9 years ago.
- 29363thresh.png (1.4 KB ) - added by 9 years ago.
- 6330image.png (129.0 KB ) - added by 9 years ago.
- 6330thresh.png (8.4 KB ) - added by 9 years ago.
- amira.png (287.9 KB ) - added by 9 years ago.
- Screen Shot 2015-10-29 at 2.05.07 PM.png (415.1 KB ) - added by 9 years ago.