That is a nice problem! Here is one way to separate single candidates for polygons and close them:
img = Import[
"https://community.wolfram.com//c/portal/getImageAttachment?filename=shapes.jpg&userId=1703851"];
pts = PixelValuePositions[DeleteSmallComponents[Thinning@ColorNegate@Binarize[img], 10], 1];
clusters = FindClusters[pts, Method -> "SpanningTree"];
orders = Last@*FindShortestTour /@ clusters;
polygs = MapThread[Polygon[#1[[#2]]] &, {clusters, orders}];
grph=Graphics[{Orange, EdgeForm[{Thick, Black}], polygs}]

This can be exported as image like so:
Export["ClusterPolygs.png", grph]
Regards -- Henrik