seung-lab / kimimaro

Skeletonize densely labeled 3D image segmentations with TEASAR. (Medial Axis Transform)
GNU General Public License v3.0
135 stars 23 forks source link

Question about DAF and PDRF #54

Closed jamesnobody closed 3 years ago

jamesnobody commented 4 years ago

Hi, seung-lab, nice library I am new to skeleton.

After reading the TEASER paper and your team's code and some modifications from the original paper, i am confused about this section: Using DAF for Targets, PDRF for Pathfinding,

PDRF = 5000 * (1 - DBF / max(DBF))^16 + DAF

The original paper did not add normalized DAF, you said because of The exponentiation of the PDRF caused floating point values to collapse in wide open spaces. What does this mean(in wide open spaces lots of point's value will become zero? But we still have DAF for path)? TheDBF/max(DBF)make the value to [0,1], so, i think it's fine to multiply a const. Can you give me some explain about that?

william-silversmith commented 4 years ago

Hi James,

I'm glad you're liking Kimimaro enough to dig into it. ^_^

We found in experiments that adding the DAF was distorting the path from the center (because of course right? The PDRF is what defines the center path.), so we stopped using it except for determining the current farthest point for selecting the next target voxel. However, I found that in regions that were not tube-like (somata for example) the PDRF values far from the boundary would collapse so low as to become random noise.

Therefore, to fix that problem we needed to add a tiny bit of gradient to ensure the path didn't succumb to noise. Adding normalized DAF ensures there is extremely low distortion from the huge PDRF values ranging over most of the object while providing path guidance where the PDRF disappears.

william-silversmith commented 3 years ago

Closing question as answered due to inactivity.