**Edit: Shorter `ImageTrim` version as pointed out by Matthias Odisio** Belisarius gave you already the important hint: Use `MorphologicalComponents`. There are two points I would make differently, which is I would utilize `ComponentMeasures` to extract the `"BoundingBox"` which is already the row- and column-number you can then feed directly to `ImageTake` or even better to `ImageTrim`. `ImageTrim` has the big advantage that it can handle the bounding box coordinates directly: img = Import@"https://i.sstatic.net/8enYZ.png"; (* ImageTrim version *) ImageTrim[img, #2] & @@@ ComponentMeasurements[ MorphologicalComponents[Binarize[GaussianFilter[img, 3]]], "BoundingBox"] ![Mathematica graphics](https://i.sstatic.net/au0yA.png) The `GaussianFilter` just smooths the image a bit to ensure that `Binarize` gives all 3 big objects with a bit of space around them. The same result can be obtained using `ImageTake` but there is a disadvantage: A call to `ImageReflect` and some reverse and transposing is necessary because `ImageTake` works on image matrix coordinates while `ComponentMeasures` gives you a reversed but more *natural* coordinate system. Think of it as follows: if you take the 1st image matrix row you get the top row because this comes first but if you think of the usual Cartesian system, the `y=1` would be at the bottom of the image. ImageTake[img, Sequence @@ Reverse[Transpose[#2]]] & @@@ ComponentMeasurements[MorphologicalComponents[ Binarize[GaussianFilter[ImageReflect@img, 3]]], "BoundingBox"]