watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarker (Operator)

Name

watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarker — 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)

Beschreibung

watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerWatershedsMarker 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_filterBinomialFilterBinomialFilterBinomialFilter oder gauss_filtergauss_filterGaussFilterGaussFilterGaussFilter) bevor watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerWatershedsMarker aufgerufen wird. Um ein Bild zu segmentieren ist es oft sinnvoll, zunächst die Kanten des Bildes zu berechnen (z.B. mit edges_imageedges_imageEdgesImageEdgesImageEdgesImage oder edges_coloredges_colorEdgesColorEdgesColorEdgesColor) und das sich daraus ergebende Amplitudenbild in watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerWatershedsMarker 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 objectHImageHImageHobject (byte / uint2 / real)

Eingabebild.

MarkersMarkersMarkersMarkersmarkers (input_object)  region-array objectHRegionHRegionHobject

Initiale Marker von denen aus das Bild geflutet wird.

BasinsBasinsBasinsBasinsbasins (output_object)  region-array objectHRegionHRegionHobject *

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_markerWatershedsMarkerWatershedsMarkerWatershedsMarker liefert normalerweise den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFilter, smooth_imagesmooth_imageSmoothImageSmoothImageSmoothImage, invert_imageinvert_imageInvertImageInvertImageInvertImage, edges_imageedges_imageEdgesImageEdgesImageEdgesImage

Nachfolger

expand_regionexpand_regionExpandRegionExpandRegionExpandRegion, select_shapeselect_shapeSelectShapeSelectShapeSelectShape, reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain, openingopeningOpeningOpeningOpening

Alternativen

watershedswatershedsWatershedsWatershedsWatersheds, pouringpouringPouringPouringPouring, watersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThresholdWatershedsThreshold

Modul

Foundation