# How to get a smooth ridge from a binary image

I always have this demand,but Mathematica cannot implement this perfectly for me.For example,I have such binary image

binImg = Uncompress[FromCharacterCode[
Flatten[ImageData[Import["https://i.sstatic.net/9mJL2.png"],"Byte"]]]]
BinaryImageQ[binImg]


True

I want to get a smooth ridge as far as possible.This is current method I can think out.

Pruning[Thinning[binImg], 10]


Of course,the SkeletonTransform can provide a little bit better result.But I have to say there is a long way to go.I mean I hope to get a result,the line more like a line,a rectangle more like a rectangle,a circle more like a circle in the result ridge image.In my case,I hope the result will more close to following red commponent.

• Maybe something like ImageAdjust[binImg~Blur~12~Erosion~6~RidgeFilter~1] Commented Jul 4, 2017 at 10:11
• @SimonWoods Magic,man.. :)
– yode
Commented Jul 4, 2017 at 10:12
• @SimonWoods And you don't intend to post it as a answer?That will be a wonderful start I think.
– yode
Commented Jul 4, 2017 at 10:18
• I don't know Mathematica, but morphological processing (successive dilation and erosion) will go a long way. Commented Jul 4, 2017 at 17:47

You could try some kind of blurring or low-pass filter to smooth out some of the irregularity. For example

ImageAdjust[binImg ~Blur~ 12 ~Erosion~ 6 ~RidgeFilter~ 1]


• I always think the upvote is a mysterious thing.Anyway,that include my one. :)
– yode
Commented Jul 6, 2017 at 11:16

Almost

Thinning@SkeletonTransform@Binarize[Blur[binImg, 10], Method -> "Entropy"]