karl71
karl71

Reputation: 1092

Find intersection between fibres after skeletonization

In Matlab I have reconstructed a 3D collagen mesh containing several fibres. As a result I've got all fibres identified. I can plot each fibre and it looks like a skeletonized version of the original input image. My goal now is to find the intersections between those fibres. (a small portion of the image is shown below as well as the reconstruction I do in Matlab)

I've been thinking for a while which steps should I follows to achieve this, however, I guess there is a much more easier and optimised way. These are the major steps I propose:

-Calculate the thickness of all fibres. This can be done by checking the distance between several points of the same fibre to the closest background point (point with pixel value = 0). Then make the mean from all distances and take it as the final thickness value for that fibre.

-Next. Once we know the thickness of all fibres, try to compute the surface of each fibre by taking all points that are placed at a distance equal (plus a threshold value) to each point of the skeletonized fibre.

-Finally. Once I've got the exterior mesh points (kind of "skin points") of each fibre, calculate the intersection point/points between all fibre's meshes.

I have never worked with meshes in Matlab so I'm not pretty sure about using them or not for this purpose. I even don't know if it's possible. Thank you in advance for your help.

Original image (ImajeJ reconstruction)

Original image (ImajeJ reconstruction)

What I've got after using my code (skeletonized version) What I've got after using my code (skeletonized version)

Upvotes: 0

Views: 231

Answers (1)

dhanushka
dhanushka

Reputation: 10682

suppose you represent each point as (x,y,z,val) where x,y and z are the spatial coordinates and val is a bit-field that indicates, in which fibre that particular point is a part of. initially, val is 0 for all the points. if some (x1,y1,z1) belongs to fibre-1, you set the LSB of val, so that point would be (x1,y1,z1, 0x01): val is in hex. if some (x2,y2,z2) belongs to fibre-2, then (x2,y2,z2, 0x02), likewise you set the particular bit of val depending on the fibre it belongs to. when you do this for all points, their val field will indicate to which fibre(s) they belong to. so, all points having more than 1 bit set in their val field will give you the fibres that intersect.

Upvotes: 1

Related Questions