watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerwatersheds_marker (Operator)

Name

watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerwatersheds_marker — Segmentieren nach dem Marker-basierten Wasserscheiden-Prinzip.

Signatur

watersheds_marker(Image, Markers : Basins : : )

Herror watersheds_marker(const Hobject Image, const Hobject Markers, Hobject* Basins)

Herror T_watersheds_marker(const Hobject Image, const Hobject Markers, Hobject* Basins)

void WatershedsMarker(const HObject& Image, const HObject& Markers, HObject* Basins)

HRegion HImage::WatershedsMarker(const HRegion& Markers) const

static void HOperatorSet.WatershedsMarker(HObject image, HObject markers, out HObject basins)

HRegion HImage.WatershedsMarker(HRegion markers)

def watersheds_marker(image: HObject, markers: HObject) -> HObject

Beschreibung

watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerwatersheds_marker segmentiert ein Bild basierend auf der Topologie der Grauwerte und gibt die resultierenden Regionen in BasinsBasinsBasinsbasinsbasins 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 MarkersMarkersMarkersmarkersmarkers 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 MarkersMarkersMarkersmarkersmarkers) werden in BasinsBasinsBasinsbasinsbasins 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 ImageImageImageimageimage durchgeführt. Markierte Regionen außerhalb des Bereichs von ImageImageImageimageimage werden ignoriert.

Es ist ratsam, einen Glättungsoperator auf dem Eingangsbild anzuwenden (z.B, binomial_filterbinomial_filterBinomialFilterBinomialFilterbinomial_filter oder gauss_filtergauss_filterGaussFilterGaussFiltergauss_filter) bevor watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerwatersheds_marker aufgerufen wird. Um ein Bild zu segmentieren ist es oft sinnvoll, zunächst die Kanten des Bildes zu berechnen (z.B. mit edges_imageedges_imageEdgesImageEdgesImageedges_image oder edges_coloredges_colorEdgesColorEdgesColoredges_color) und das sich daraus ergebende Amplitudenbild in watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerwatersheds_marker zu übergeben.

Achtung

Wenn das Bild feine Strukturen enthält oder verrauscht ist, werden intern sehr viele Regionen verarbeitet, wodurch die Laufzeit deutlich ansteigt.

Ausführungsinformationen

Parameter

ImageImageImageimageimage (input_object)  singlechannelimage objectHImageHObjectHObjectHobject (byte / uint2 / real)

Eingabebild.

MarkersMarkersMarkersmarkersmarkers (input_object)  region-array objectHRegionHObjectHObjectHobject

Initiale Marker von denen aus das Bild geflutet wird.

BasinsBasinsBasinsbasinsbasins (output_object)  region-array objectHRegionHObjectHObjectHobject *

Segmentierte Becken.

Beispiel (HDevelop)

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)

Ergebnis

watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerwatersheds_marker liefert normalerweise den Wert 2 ( H_MSG_TRUE) . Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

binomial_filterbinomial_filterBinomialFilterBinomialFilterbinomial_filter, gauss_filtergauss_filterGaussFilterGaussFiltergauss_filter, smooth_imagesmooth_imageSmoothImageSmoothImagesmooth_image, invert_imageinvert_imageInvertImageInvertImageinvert_image, edges_imageedges_imageEdgesImageEdgesImageedges_image

Nachfolger

expand_regionexpand_regionExpandRegionExpandRegionexpand_region, select_shapeselect_shapeSelectShapeSelectShapeselect_shape, reduce_domainreduce_domainReduceDomainReduceDomainreduce_domain, openingopeningOpeningOpeningopening

Alternativen

watershedswatershedsWatershedsWatershedswatersheds, pouringpouringPouringPouringpouring, watersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThresholdwatersheds_threshold

Modul

Foundation