The RSGISLib (Remote Sensing and GIS) Python library written by Pete Bunting and Daniel Clewley provides a number of features, among them segmentation of images to objects.
This can not only be applied to what one conventionally thinks of as images, but also topographic layers. I thought I'd practice this on Earth first before trying to do this for Mars as I will be for my dissertation.
Using Space Shuttle Radar data (freely available - I got it via the program Viking) I obtained the elevation of the British Isles (excluding Shetland) and using GDAL via QGIS and the command line, created slope and aspect layers. I then transformed the aspect to remove the discontinuity at 360-0 deg, using degrees from N, so that 180 is south facing, east and west are both 90 etc.
Using RSGISLib it is possible to segment to objects. Here I show some results of doing so, using a layerstacked image with elevation, slope and angle from N. I have set the minimum connected object size to 1000 pixels. With the topographic data gridded at 73m, this means objects about 5.5 sq. km or larger.
Visualisation is a gaussian stretch in TuiView, setting red to aspect, green to slope, and blue to elevation, showing mean values for each segment.
From the Isles of Scilly to the Isle of Wight:
By changing the object size, it is possible to do this at different scales. This is part of the segmentation for a minimum object size of 16384 pixels (that is about 89 sq. km) equivalent to a square 9.5km a side: