# Regarding isolines and isocontour

I have heard of an algorithm called marching squares that is used to obtain the isocontours.
I have an image of a letter A with center portion completely black.This introduces several portions where there are multiple junction edges.
As such ,I would like to extract the contours from this image.One direction is marching squares.
Therefore ,I would like suggestions on how I can run marching squares on a 2D image.
There are lot of material on marching square but most of the implementation is related to 3d meshes and not 2d images.So if any one could suggest examples that explain how marching squares is used on 2d images,that would be really nice.
Also any other methods that I can use to extract contours for this image will be appreciated.
I have tried active contour as well as phase congruency but they are only able to detect the outer boundaries and tend to miss out the junction edges.
I have enclosed a rough sample of the image.The original image looks somewhat similar to this.
if there are any sources in python/matlab that will also help.

what’s wrong with `cv::findContours`?

marching cubes/squares is for volumetric data. it’s for grayscale data, not binarized data. the algorithm contains an implicit thresholding but calculates sub-voxel (sub-pixel) precision vertices. I don’t think you need that.

findContours only gives outer boundary and misses the part where the edges intersect with each other.What i want is both inner and outer boundary .
the real image is grayscale ,it has a huge white border and the center portion contains the A with junction edges that join the horzontal bar of A with left and right.
the expected output should be like this

the first image is a rough representation of the expected output.
the second is what i am getting currently.And it was suggested to be my senior who says we need subpixel precision to identify the points where edges meet.
Would active contour help.
And i can confirm the image is grayscale,as it has values lying between 0-255 the lowest being 34.if it was binary then all values would be between 0 and 1 which is not the case.so would appreciate it if i could get some suggestions about how to solve the problem .

actual output