Hi Jan,
the MorphologicalGraph algorithm was developed and implemented by me four years ago. I am not aware of any preexisting or established algorithms to refer to, nor a publication with respect to this matter.
You can find an unambiguous description of the MorphologicalGraph-result on the reference page under "Detailed and Options".
The processing steps are fairly straight forward:
- apply Binarize[Thinning[img, Method -> "Morphological", Padding -> 0]] upfront to obtain a skeleton,
- find the vertices given by branch and end-points (use MorphologicalTransform[skeleton, "SkeletonEndPoints", Padding -> 0] and MorphologicalTransform[skeleton, "SkeletonBranchPoints", Padding -> 0]),
- remove vertices and find link-components,
- identify which vertices are connected by which links,
- remove links that loop back to the same vertex,
- remove redundant links,
- assemble everything in an undirected Graph object.
For details, see the top-level code via:
Unprotect[MorphologicalGraph]
ClearAttributes[MorphologicalGraph, ReadProtected]
?? MorphologicalGraph
?? ImageMorphologicalOperationsDump
iMorphologicalGraph
?? ImageMorphologicalOperationsDump
oMorphologicalGraph
Hope that helps!
Please cite Mathematica in your article:
Wolfram Research, Inc., Mathematica, Version 8.0, Champaign, IL (2010).
Kind Regards,
Markus