Branching points detection in processed image












6












$begingroup$


I want to get the branching coordinates from a computer-generated image like this one:



Generated tree



After SkeletonTransform and Pruning, I get:



Skeletonized



I would like to develop an algorithm that automatically detect and give coordinates of branching points (I could do it manually but really time consuming).



Thanks!



Edit: I already tried MorphologicalBranchPoints with poor results...










share|improve this question











$endgroup$








  • 1




    $begingroup$
    "I already tried MorphologicalBranchPoints with poor results..." Can you be specific about what you got and what you want instead?
    $endgroup$
    – Szabolcs
    Feb 18 at 14:48










  • $begingroup$
    @ Szabolcs It was more about a careful selection of thinning and skeletonize options. The result with MorphologicalBranchPoints wasn't good then.
    $endgroup$
    – Valacar
    Feb 18 at 15:08






  • 1




    $begingroup$
    Added another update.
    $endgroup$
    – Szabolcs
    Feb 18 at 15:09
















6












$begingroup$


I want to get the branching coordinates from a computer-generated image like this one:



Generated tree



After SkeletonTransform and Pruning, I get:



Skeletonized



I would like to develop an algorithm that automatically detect and give coordinates of branching points (I could do it manually but really time consuming).



Thanks!



Edit: I already tried MorphologicalBranchPoints with poor results...










share|improve this question











$endgroup$








  • 1




    $begingroup$
    "I already tried MorphologicalBranchPoints with poor results..." Can you be specific about what you got and what you want instead?
    $endgroup$
    – Szabolcs
    Feb 18 at 14:48










  • $begingroup$
    @ Szabolcs It was more about a careful selection of thinning and skeletonize options. The result with MorphologicalBranchPoints wasn't good then.
    $endgroup$
    – Valacar
    Feb 18 at 15:08






  • 1




    $begingroup$
    Added another update.
    $endgroup$
    – Szabolcs
    Feb 18 at 15:09














6












6








6


1



$begingroup$


I want to get the branching coordinates from a computer-generated image like this one:



Generated tree



After SkeletonTransform and Pruning, I get:



Skeletonized



I would like to develop an algorithm that automatically detect and give coordinates of branching points (I could do it manually but really time consuming).



Thanks!



Edit: I already tried MorphologicalBranchPoints with poor results...










share|improve this question











$endgroup$




I want to get the branching coordinates from a computer-generated image like this one:



Generated tree



After SkeletonTransform and Pruning, I get:



Skeletonized



I would like to develop an algorithm that automatically detect and give coordinates of branching points (I could do it manually but really time consuming).



Thanks!



Edit: I already tried MorphologicalBranchPoints with poor results...







graphics graphs-and-networks image-processing






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Feb 18 at 14:42







Valacar

















asked Feb 18 at 14:35









ValacarValacar

513213




513213








  • 1




    $begingroup$
    "I already tried MorphologicalBranchPoints with poor results..." Can you be specific about what you got and what you want instead?
    $endgroup$
    – Szabolcs
    Feb 18 at 14:48










  • $begingroup$
    @ Szabolcs It was more about a careful selection of thinning and skeletonize options. The result with MorphologicalBranchPoints wasn't good then.
    $endgroup$
    – Valacar
    Feb 18 at 15:08






  • 1




    $begingroup$
    Added another update.
    $endgroup$
    – Szabolcs
    Feb 18 at 15:09














  • 1




    $begingroup$
    "I already tried MorphologicalBranchPoints with poor results..." Can you be specific about what you got and what you want instead?
    $endgroup$
    – Szabolcs
    Feb 18 at 14:48










  • $begingroup$
    @ Szabolcs It was more about a careful selection of thinning and skeletonize options. The result with MorphologicalBranchPoints wasn't good then.
    $endgroup$
    – Valacar
    Feb 18 at 15:08






  • 1




    $begingroup$
    Added another update.
    $endgroup$
    – Szabolcs
    Feb 18 at 15:09








1




1




$begingroup$
"I already tried MorphologicalBranchPoints with poor results..." Can you be specific about what you got and what you want instead?
$endgroup$
– Szabolcs
Feb 18 at 14:48




$begingroup$
"I already tried MorphologicalBranchPoints with poor results..." Can you be specific about what you got and what you want instead?
$endgroup$
– Szabolcs
Feb 18 at 14:48












$begingroup$
@ Szabolcs It was more about a careful selection of thinning and skeletonize options. The result with MorphologicalBranchPoints wasn't good then.
$endgroup$
– Valacar
Feb 18 at 15:08




$begingroup$
@ Szabolcs It was more about a careful selection of thinning and skeletonize options. The result with MorphologicalBranchPoints wasn't good then.
$endgroup$
– Valacar
Feb 18 at 15:08




1




1




$begingroup$
Added another update.
$endgroup$
– Szabolcs
Feb 18 at 15:09




$begingroup$
Added another update.
$endgroup$
– Szabolcs
Feb 18 at 15:09










2 Answers
2






active

oldest

votes


















11












$begingroup$

Use MorphologicalBranchPoints.



im = Binarize@Import["https://i.stack.imgur.com/O0AMj.png"]

skel = Pruning[Thinning[im], 20];

HighlightImage[skel, MorphologicalBranchPoints[skel]]


enter image description here



Another possibility is to use



skel1 = Pruning[Thinning[im, Method -> "MedialAxis"], 10];


as a start then smoothen the result using



skel2 = Thinning@Dilation[skel1, 5]


so that MorphologicalBranchPoints would not give false results.



HighlightImage[skel2, MorphologicalBranchPoints[skel2]]


enter image description here






share|improve this answer











$endgroup$













  • $begingroup$
    Great ! Thanks a lot.
    $endgroup$
    – Valacar
    Feb 18 at 15:09



















7












$begingroup$

I notice there's a faint pink background that seems like a natural boundary. I've highlighted it to showcase this:



enter image description here



We can extract this curve and use it as the original boundary:



im = Import["https://i.stack.imgur.com/7Ck2S.png"];
mask = FillingTransform[Thinning[Binarize[ColorReplace[im, White -> Black, .055], 0]], CornerNeighbors -> True]


enter image description here



And the simply call MorphologicalBranchPoints:



skel = Thinning[mask];
HighlightImage[skel, MorphologicalBranchPoints[skel], 1]


enter image description here






share|improve this answer











$endgroup$













  • $begingroup$
    This is really clean!
    $endgroup$
    – Valacar
    Feb 19 at 9:24










  • $begingroup$
    by the way I think it's Thinning[mask] in this case, isn't it?
    $endgroup$
    – Valacar
    Feb 19 at 12:26










  • $begingroup$
    @Valacar Yes. I made the correction, thank you.
    $endgroup$
    – Chip Hurst
    Feb 19 at 12:36













Your Answer





StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
});
});
}, "mathjax-editing");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "387"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f191757%2fbranching-points-detection-in-processed-image%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









11












$begingroup$

Use MorphologicalBranchPoints.



im = Binarize@Import["https://i.stack.imgur.com/O0AMj.png"]

skel = Pruning[Thinning[im], 20];

HighlightImage[skel, MorphologicalBranchPoints[skel]]


enter image description here



Another possibility is to use



skel1 = Pruning[Thinning[im, Method -> "MedialAxis"], 10];


as a start then smoothen the result using



skel2 = Thinning@Dilation[skel1, 5]


so that MorphologicalBranchPoints would not give false results.



HighlightImage[skel2, MorphologicalBranchPoints[skel2]]


enter image description here






share|improve this answer











$endgroup$













  • $begingroup$
    Great ! Thanks a lot.
    $endgroup$
    – Valacar
    Feb 18 at 15:09
















11












$begingroup$

Use MorphologicalBranchPoints.



im = Binarize@Import["https://i.stack.imgur.com/O0AMj.png"]

skel = Pruning[Thinning[im], 20];

HighlightImage[skel, MorphologicalBranchPoints[skel]]


enter image description here



Another possibility is to use



skel1 = Pruning[Thinning[im, Method -> "MedialAxis"], 10];


as a start then smoothen the result using



skel2 = Thinning@Dilation[skel1, 5]


so that MorphologicalBranchPoints would not give false results.



HighlightImage[skel2, MorphologicalBranchPoints[skel2]]


enter image description here






share|improve this answer











$endgroup$













  • $begingroup$
    Great ! Thanks a lot.
    $endgroup$
    – Valacar
    Feb 18 at 15:09














11












11








11





$begingroup$

Use MorphologicalBranchPoints.



im = Binarize@Import["https://i.stack.imgur.com/O0AMj.png"]

skel = Pruning[Thinning[im], 20];

HighlightImage[skel, MorphologicalBranchPoints[skel]]


enter image description here



Another possibility is to use



skel1 = Pruning[Thinning[im, Method -> "MedialAxis"], 10];


as a start then smoothen the result using



skel2 = Thinning@Dilation[skel1, 5]


so that MorphologicalBranchPoints would not give false results.



HighlightImage[skel2, MorphologicalBranchPoints[skel2]]


enter image description here






share|improve this answer











$endgroup$



Use MorphologicalBranchPoints.



im = Binarize@Import["https://i.stack.imgur.com/O0AMj.png"]

skel = Pruning[Thinning[im], 20];

HighlightImage[skel, MorphologicalBranchPoints[skel]]


enter image description here



Another possibility is to use



skel1 = Pruning[Thinning[im, Method -> "MedialAxis"], 10];


as a start then smoothen the result using



skel2 = Thinning@Dilation[skel1, 5]


so that MorphologicalBranchPoints would not give false results.



HighlightImage[skel2, MorphologicalBranchPoints[skel2]]


enter image description here







share|improve this answer














share|improve this answer



share|improve this answer








edited Feb 18 at 15:10

























answered Feb 18 at 14:38









SzabolcsSzabolcs

161k14438936




161k14438936












  • $begingroup$
    Great ! Thanks a lot.
    $endgroup$
    – Valacar
    Feb 18 at 15:09


















  • $begingroup$
    Great ! Thanks a lot.
    $endgroup$
    – Valacar
    Feb 18 at 15:09
















$begingroup$
Great ! Thanks a lot.
$endgroup$
– Valacar
Feb 18 at 15:09




$begingroup$
Great ! Thanks a lot.
$endgroup$
– Valacar
Feb 18 at 15:09











7












$begingroup$

I notice there's a faint pink background that seems like a natural boundary. I've highlighted it to showcase this:



enter image description here



We can extract this curve and use it as the original boundary:



im = Import["https://i.stack.imgur.com/7Ck2S.png"];
mask = FillingTransform[Thinning[Binarize[ColorReplace[im, White -> Black, .055], 0]], CornerNeighbors -> True]


enter image description here



And the simply call MorphologicalBranchPoints:



skel = Thinning[mask];
HighlightImage[skel, MorphologicalBranchPoints[skel], 1]


enter image description here






share|improve this answer











$endgroup$













  • $begingroup$
    This is really clean!
    $endgroup$
    – Valacar
    Feb 19 at 9:24










  • $begingroup$
    by the way I think it's Thinning[mask] in this case, isn't it?
    $endgroup$
    – Valacar
    Feb 19 at 12:26










  • $begingroup$
    @Valacar Yes. I made the correction, thank you.
    $endgroup$
    – Chip Hurst
    Feb 19 at 12:36


















7












$begingroup$

I notice there's a faint pink background that seems like a natural boundary. I've highlighted it to showcase this:



enter image description here



We can extract this curve and use it as the original boundary:



im = Import["https://i.stack.imgur.com/7Ck2S.png"];
mask = FillingTransform[Thinning[Binarize[ColorReplace[im, White -> Black, .055], 0]], CornerNeighbors -> True]


enter image description here



And the simply call MorphologicalBranchPoints:



skel = Thinning[mask];
HighlightImage[skel, MorphologicalBranchPoints[skel], 1]


enter image description here






share|improve this answer











$endgroup$













  • $begingroup$
    This is really clean!
    $endgroup$
    – Valacar
    Feb 19 at 9:24










  • $begingroup$
    by the way I think it's Thinning[mask] in this case, isn't it?
    $endgroup$
    – Valacar
    Feb 19 at 12:26










  • $begingroup$
    @Valacar Yes. I made the correction, thank you.
    $endgroup$
    – Chip Hurst
    Feb 19 at 12:36
















7












7








7





$begingroup$

I notice there's a faint pink background that seems like a natural boundary. I've highlighted it to showcase this:



enter image description here



We can extract this curve and use it as the original boundary:



im = Import["https://i.stack.imgur.com/7Ck2S.png"];
mask = FillingTransform[Thinning[Binarize[ColorReplace[im, White -> Black, .055], 0]], CornerNeighbors -> True]


enter image description here



And the simply call MorphologicalBranchPoints:



skel = Thinning[mask];
HighlightImage[skel, MorphologicalBranchPoints[skel], 1]


enter image description here






share|improve this answer











$endgroup$



I notice there's a faint pink background that seems like a natural boundary. I've highlighted it to showcase this:



enter image description here



We can extract this curve and use it as the original boundary:



im = Import["https://i.stack.imgur.com/7Ck2S.png"];
mask = FillingTransform[Thinning[Binarize[ColorReplace[im, White -> Black, .055], 0]], CornerNeighbors -> True]


enter image description here



And the simply call MorphologicalBranchPoints:



skel = Thinning[mask];
HighlightImage[skel, MorphologicalBranchPoints[skel], 1]


enter image description here







share|improve this answer














share|improve this answer



share|improve this answer








edited Feb 19 at 12:35

























answered Feb 19 at 4:05









Chip HurstChip Hurst

21.7k15790




21.7k15790












  • $begingroup$
    This is really clean!
    $endgroup$
    – Valacar
    Feb 19 at 9:24










  • $begingroup$
    by the way I think it's Thinning[mask] in this case, isn't it?
    $endgroup$
    – Valacar
    Feb 19 at 12:26










  • $begingroup$
    @Valacar Yes. I made the correction, thank you.
    $endgroup$
    – Chip Hurst
    Feb 19 at 12:36




















  • $begingroup$
    This is really clean!
    $endgroup$
    – Valacar
    Feb 19 at 9:24










  • $begingroup$
    by the way I think it's Thinning[mask] in this case, isn't it?
    $endgroup$
    – Valacar
    Feb 19 at 12:26










  • $begingroup$
    @Valacar Yes. I made the correction, thank you.
    $endgroup$
    – Chip Hurst
    Feb 19 at 12:36


















$begingroup$
This is really clean!
$endgroup$
– Valacar
Feb 19 at 9:24




$begingroup$
This is really clean!
$endgroup$
– Valacar
Feb 19 at 9:24












$begingroup$
by the way I think it's Thinning[mask] in this case, isn't it?
$endgroup$
– Valacar
Feb 19 at 12:26




$begingroup$
by the way I think it's Thinning[mask] in this case, isn't it?
$endgroup$
– Valacar
Feb 19 at 12:26












$begingroup$
@Valacar Yes. I made the correction, thank you.
$endgroup$
– Chip Hurst
Feb 19 at 12:36






$begingroup$
@Valacar Yes. I made the correction, thank you.
$endgroup$
– Chip Hurst
Feb 19 at 12:36




















draft saved

draft discarded




















































Thanks for contributing an answer to Mathematica Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


Use MathJax to format equations. MathJax reference.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f191757%2fbranching-points-detection-in-processed-image%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

How to change which sound is reproduced for terminal bell?

Can I use Tabulator js library in my java Spring + Thymeleaf project?

Title Spacing in Bjornstrup Chapter, Removing Chapter Number From Contents