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

Es ist ratsam, einen Glättungsoperator auf dem Eingangsbild anzuwenden (z.B, binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilterbinomial_filter oder gauss_filtergauss_filterGaussFilterGaussFilterGaussFiltergauss_filter) bevor watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerWatershedsMarkerwatersheds_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_imageEdgesImageEdgesImageEdgesImageedges_image oder edges_coloredges_colorEdgesColorEdgesColorEdgesColoredges_color) und das sich daraus ergebende Amplitudenbild in watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerWatershedsMarkerwatersheds_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

ImageImageImageImageimageimage (input_object)  singlechannelimage objectHImageHObjectHImageHobject (byte / uint2 / real)

Eingabebild.

MarkersMarkersMarkersMarkersmarkersmarkers (input_object)  region-array objectHRegionHObjectHRegionHobject

Initiale Marker von denen aus das Bild geflutet wird.

BasinsBasinsBasinsBasinsbasinsbasins (output_object)  region-array objectHRegionHObjectHRegionHobject *

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_markerWatershedsMarkerWatershedsMarkerWatershedsMarkerwatersheds_marker liefert normalerweise den Wert TRUE. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilterbinomial_filter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFiltergauss_filter, smooth_imagesmooth_imageSmoothImageSmoothImageSmoothImagesmooth_image, invert_imageinvert_imageInvertImageInvertImageInvertImageinvert_image, edges_imageedges_imageEdgesImageEdgesImageEdgesImageedges_image

Nachfolger

expand_regionexpand_regionExpandRegionExpandRegionExpandRegionexpand_region, select_shapeselect_shapeSelectShapeSelectShapeSelectShapeselect_shape, reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain, openingopeningOpeningOpeningOpeningopening

Alternativen

watershedswatershedsWatershedsWatershedsWatershedswatersheds, pouringpouringPouringPouringPouringpouring, watersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThresholdWatershedsThresholdwatersheds_threshold

Modul

Foundation