Here is another method which utilizes the third argument of ComponentMeasurements
.
At first we mark the key regions on the original image:
i = RemoveAlphaChannel@Import["https://i.sstatic.net/6RQTI.png"];
pointsOfInterest = {{516, 400}, {234, 231}, {426, 653}, {178, 489}};
Show[i, Epilog -> {Red, Disk[#, Offset[10]] & /@ pointsOfInterest}]
Then we select only components whose minimal bounding boxes include these points of interest:
m = MorphologicalComponents[
ColorNegate@
Closing[EdgeDetect[ColorSeparate[ColorConvert[i, "LAB"]][[1]], 3, .010], 4]];
comps = ComponentMeasurements[m, "MinimalBoundingBox",
Or @@ RegionMember[Polygon[{#}]][pointsOfInterest] &];
iC = Colorize[m, ColorRules -> Append[Thread[comps[[;; , 1]] -> White], _ -> Black]];
Show[HighlightImage[i, MorphologicalPerimeter@iC],
Graphics[{Text[#1, Total[#2]/4, Background -> Yellow], FaceForm[], EdgeForm[LightYellow],
Polygon[{#2}]} & @@@ comps], Graphics[{White, Line[{{180, 532}, {197, 541}}]}]]
Then we find the perimeter of the lake:
HighlightImage[i,
MorphologicalPerimeter[FillingTransform@ColorNegate@Opening[ColorNegate@iC, 4]]]
The only problem with this solution is that the bridge is excluded from the perimeter. We can fix this manually:
HighlightImage[i,
MorphologicalPerimeter[
FillingTransform@
ColorNegate@
Opening[ColorNegate@
Rasterize[Show[iC,
Epilog -> {White, Polygon[{{180, 532}, {195, 467}, {219, 473}, {201, 542}}]}],
"Image"], 4]]]
Now the result is almost perfect.
MinFilter[GradientFilter[image, 1], 8] // ImageAdjust
$\endgroup$