I have cross-sections of cortical bone tissue that were stained in vivo at three timepoints with calcein labels. The resulting osteons (circular units of bone) have between one and three calcein rings, depending on whether they were forming during timepoints 1, 2, or 3. A central pore that fluoresces also counts as a ring, so an osteon with a fluorescent pore and a surrounding ring would have two rings.
Flo_Crop.tif (13.6 MB)
Here is how the same image appears under DIC:
DIC_Crop.tif (13.6 MB)
And under circularly polarized light (white is collagen fibers):
Pol_Crop.tif (13.6 MB)
We have three main objectives that we are trying to automate as much as possible:
- Measure the individual area of each fluorescently-marked osteon
- Classify osteons as having 1, 2, or 3 rings
- Measure mean spacing between rings (and thus how much bone is gained between timepoints)
The end result will be to determine how much bone is formed overall, and how much bone is formed in between timepoints.
The rings are not discrete, so they cannot be extracted as separate ROIs. If I use morphological operations to separate their connections, the rings themselves are also cut up. If I can get the rings separated, I could use something like BioVoxxel Speckle Inspector
Some of the rings are incomplete (fragmentary osteons) so their centers cannot be extracted
My general goal is to try to find a “search radius” from each pore center, roughly approximating the osteon, and try to count the rings within each search radius. However, I am stuck on how to count these rings and (ideally) their spacing.
Here is my best threshold of the rings themselves:
- If useful, I can provide the specific steps for how I extracted these
- The scale for all images is 2.3 pixels/um but I generally just remove scale to keep it in pixels since I am not measuring anything yet
Flo_DiscreteRings.tif (4.5 MB)
Here is my best threshold of the approximate osteon, representing the maximum stain area with equalized contrast
Flo_Blobs.tif (4.5 MB)
Here is my capture of the ring centers after Close x 20 with BioVoxxel EDM Binary Operations
- The obvious problem here is that the “open” (fragmentary) osteons do not have centers
Flo_DiscreteRingCenters.tif (4.5 MB)
Here is my general search radius around the rings:
- To make this, I used MorphoLibJ Morphological Operations to dilate a disk 100 pixels around each center, then used Image Calculator to limit it to the borders of Flo_Blobs (the total extent of stain), and then Dilate x 10 with BioVoxxel EDM Binary Operations to cut small connections
Flo_SearchMask.tif (4.5 MB)
I can also make a search radius with centers cut out:
Flo_SearchMaskCenters.tif (4.5 MB)
Here is how the search mask superimposes on the original thresholded rings:
Flo_DiscreteRingsMasked.tif (13.6 MB)
I can technically select the fragmentary osteons by deriving the centers from the contrast-enhanced image with some morphological operations, but it causes adjacent osteons to stick together:
Flo_Blobs_Inclusive.tif (4.5 MB)
Flo_Centers_Inclusive.tif (4.5 MB)
Flo_Blobs_SearchRadius_Inclusive.tif (4.5 MB)
Flo_Blobs_SearchRadius_CenterCutout_Inclusive.tif (4.5 MB)
Flo_DiscreteRings_Masked_Inclusive.tif (13.6 MB)
At this point I am stuck.
I have two main questions:
How can I count the number of discrete rings within each search radius? Maybe something with a distance map? Ideally I would like to start at each center and count outwards across the discrete rings and stop at the blobs border - but I am not sure how to operationalize the “counting” of each ring.
How can I separate Flo_Blobs to get a good idea of the area of each osteon? I have tried watershed methods from MorphoLibJ and BioVoxxel without a lot of success.
Thank you for any help you can provide!