So, I assume you have a .txt file with a lot of rows and 3 columns indicating [x,y,z] positions of the objects you are interested in.
In that case, (and also if no one else answers and suggest a better and simpler solution), you can write a macro in ImageJ or use other software to construct a binary image from your point cloud data. You will basically compute a tri-dimensional matrix or a bunch of two dimensional matrices and compute 1 to the voxel with [x,y,z] coordinates if these coordinates are present in your point cloud.
Below is a rough step by step instruction on how you can do that (other people in the forum may suggest better ways of doing it or provide more details on how to write the code):
(lets assume you chose n x n x n matrix)
- Create a n x n x n matrix (1000 x 1000 x 1000 if the resolution is 1 mm as you stated) filles with zeros or n times n x n matrices with elements filled with zeros
- in a for loop starting from the initial row of your point cloud to the last row of your point cloud (cont=1 or 0 to nrows) Here a link that has a similar example with a simple macro implementation from NIH ImageJ forum.
- within the loop the position in the matrix of
[pointcloud[cont,column 1],pointcloud[cont,column 2],[cont,pointcloud[column 3]]] coordinates receives the value of 1.
- depending on where you do that, you may have another text file or a binary matrix
- If you have a text file, ImageJ is capable of reading if and turn it into an image. If you have a matrix and if you happened to work with matlab there is a way to communicate with ImageJ through ImageJ -Matlab scripting. I am not sure if it is possible to create an image from a three-dimensional matrix in a macro in ImageJ, but it is probably doable as well.
In that case, when you obtain your image, I suppose it is good to use BoneJ (I have never used it but I checked their website) because it also uses Analyze Skeleton and Skeletonize 3D. However, if your image has a lot of undesired objects that happened to be detected along with your filament network, you may need to remove them using Analyse particles or other methods.
Another issue you may face will occur if your point cloud provides only surface data and not points that lie within the surface. In that case, you can probably use the close operation (located in Process>Binary>Close).
I may have some time in the next days to help you with some macro, but let’s see If someone else answers with more insights.
By the way: not sure, but this topic may be better classified as Image analysis.