watersheds_marker
— Segmentieren nach dem Marker-basierten Wasserscheiden-Prinzip.
watersheds_marker
segmentiert ein Bild basierend auf der Topologie
der Grauwerte und gibt die resultierenden Regionen in Basins
zurück.
Das Bild wird dabei als „Grauwertgebirge“ interpretiert.
Höhere Grauwerte entsprechen „Bergen“, während niedrigere Grauwerte
„Tälern“ entsprechen.
Das so interpretierte Bild wird geflutet, beginnend mit den Bereichen
die in Markers
definiert sind. Dabei wird jedes Pixel dem Marker
zugeordnet, zu dem es den Pfad mit der kleinsten maximalen Höhe hat. Gibt es
mehrere solche Marker, zu denen ein Pfad mit kleinster maximaler Höhe
existiert, wird das Pixel zufällig einem davon zugeordnet.
Die resultierenden Becken (eines pro Eingangsbereich in Markers
)
werden in Basins
zurückgegeben.
Beachten Sie, dass einige dieser Bereiche leer sein können.
Dies kann der Fall sein, wenn sich zwei Markerregionen im selben Becken des
Grauwertgebirges befinden. Befindet sich ein Pixel in mehreren
Marker-Startregionen, so wird es nur der letzten zugeordnet.
Es wird allerdings dazu geraten, dass sich Markerregionen nicht überschneiden.
Die Überflutung wird nur für die Domäne von Image
durchgeführt.
Markierte Regionen außerhalb des Bereichs von Image
werden ignoriert.
Es ist ratsam, einen Glättungsoperator auf dem Eingangsbild anzuwenden
(z.B, binomial_filter
oder gauss_filter
)
bevor watersheds_marker
aufgerufen wird.
Um ein Bild zu segmentieren ist es oft sinnvoll, zunächst die Kanten
des Bildes zu berechnen (z.B. mit edges_image
oder
edges_color
) und das sich daraus ergebende Amplitudenbild in
watersheds_marker
zu übergeben.
Wenn das Bild feine Strukturen enthält oder verrauscht ist, werden intern sehr viele Regionen verarbeitet, wodurch die Laufzeit deutlich ansteigt.
Image
(input_object) singlechannelimage →
object (byte / uint2 / real)
Eingabebild.
Markers
(input_object) region-array →
object
Initiale Marker von denen aus das Bild geflutet wird.
Basins
(output_object) region-array →
object
Segmentierte Becken.
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)
watersheds_marker
liefert normalerweise den Wert 2 (H_MSG_TRUE).
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
binomial_filter
,
gauss_filter
,
smooth_image
,
invert_image
,
edges_image
expand_region
,
select_shape
,
reduce_domain
,
opening
watersheds
,
pouring
,
watersheds_threshold
Foundation