watersheds_marker — Extract watersheds and combine basins based on markers.
watersheds_marker segments an image based on the topology of
the gray values and returns the resulting regions in Basins.
The image is interpreted as a “mountain range”.
Higher gray values correspond to “mountains”, while lower gray
values correspond to “valleys”.
The image, interpreted in this particular way, is flooded, starting with the
regions defined in Markers, until the entire image is filled.
Thus, each pixel is assigned to the marker to which it has the path
with the lowest maximum height.
If this is the case for multiple markers, the pixel is assigned to either
of them.
The resulting basins, one per input region in Markers, are returned
in Basins. Note that some of those regions might be empty.
This can happen if, for example, two marker regions are in the same
watershed basin. If a pixel is contained in multiple marker regions, only
the last marker region is used as seed for that pixel. It is advised that
the marker regions do not overlap.
The flooding is performed only for the domain of Image.
Parts of the marker regions outside the domain of Image are ignored.
It is advisable to apply a smoothing operator (e.g.,
binomial_filter or gauss_filter) to the input image
before calling watersheds_marker.
To segment an image, it is also often reasonable to run an edge extractor
(such as edges_image or edges_color) on the image,
and pass the resulting amplitude image to watersheds_marker.
If the image contains many fine structures or is noisy, many watershed regions need to be processed internally, and thus the runtime increases considerably.
Image (input_object) singlechannelimage → object (byte / uint2 / real)
Input image.
Markers (input_object) region-array → object
Initial markers from which to flood the image.
Basins (output_object) region-array → object
Basins for all markers.
read_image (Image, 'printer_chip/printer_chip_01')
edges_image (Image, ImaAmp, ImaDir, 'canny', 1, 'nms', 20, 40)
* Compute background marker
full_domain (ImaAmp, ImageFull)
erosion_circle (Image, RegionErosion, 2.5)
difference (Image, RegionErosion, Boundary)
* Compute foreground markers
threshold (Image, Region, 200, 255)
erosion_circle (Region, RegionErosion1, 7.5)
connection (RegionErosion1, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1500, 99999)
* Apply marker-based watersheds
concat_obj (Boundary, SelectedRegions, MarkerRegions)
watersheds_marker (ImageFull, MarkerRegions, Basins)
* Display results
dev_display (Image)
dev_set_color (['#FF000055', '#00FF0055', '#0000FF55', '#FF00FF55', \
'#FFFF0055', '#00FFFF55', '#80FF0055', '#0080FF55'])
dev_display (MarkerRegions)
dev_set_draw ('fill')
dev_display (Basins)
If all input parameters are valid, watersheds_marker returns TRUE.
If necessary, an exception is raised.
binomial_filter,
gauss_filter,
smooth_image,
invert_image,
edges_image
expand_region,
select_shape,
reduce_domain,
opening
watersheds,
pouring,
watersheds_threshold
Foundation