watershedswatershedsWatershedsWatershedswatersheds (Operator)

Name

watershedswatershedsWatershedsWatershedswatersheds — Segmentieren nach dem Wasserscheiden-Prinzip.

Signatur

watersheds(Image : Basins, Watersheds : : )

Herror watersheds(const Hobject Image, Hobject* Basins, Hobject* Watersheds)

Herror T_watersheds(const Hobject Image, Hobject* Basins, Hobject* Watersheds)

void Watersheds(const HObject& Image, HObject* Basins, HObject* Watersheds)

HRegion HImage::Watersheds(HRegion* Watersheds) const

static void HOperatorSet.Watersheds(HObject image, out HObject basins, out HObject watersheds)

HRegion HImage.Watersheds(out HRegion watersheds)

def watersheds(image: HObject) -> Tuple[HObject, HObject]

Beschreibung

watershedswatershedsWatershedsWatershedsWatershedswatersheds zerlegt das Bild aufgrund der Topologie der Grauwerte. Diese werden als relative Höhenwerte interpretiert. Große Werte entsprechen „hohen Bereichen“ niedrige Werte entsprechen „tiefen Bereichen“. In dem hieraus entstehenden dreidimensionalen Grauwertgebirge werden Wasserscheiden gesucht. Wasserscheiden sind hellen Grate zwischen dunklen Becken. Der Parameter BasinsBasinsBasinsBasinsbasinsbasins enthält diese dunklen Becken. WatershedsWatershedsWatershedsWatershedswatershedswatersheds enthält die Punkte der Wasserscheiden, die höchstens 1 Pixel breit sind. WatershedsWatershedsWatershedsWatershedswatershedswatersheds ist immer eine Region pro Eingabebild, BasinsBasinsBasinsBasinsbasinsbasins dagegen enthält für jedes Becken eine eigene Region.

Es ist günstig, vorher einen Glättungsfilter zu verwenden, um die Anzahl der Regionen zu reduzieren (z.B. binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilterbinomial_filter oder gauss_filtergauss_filterGaussFilterGaussFilterGaussFiltergauss_filter). Eine weitere Möglichkeit, die Anzahl der Ergebnisregionen zu reduzieren, besteht darin, benachbarte Becken aufgrund eines Schwellenwertkriteriums mit watersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThresholdWatershedsThresholdwatersheds_threshold zu vereinigen (für weitere Informationen siehe watersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThresholdWatershedsThresholdwatersheds_threshold).

Achtung

Wenn das Bild feine Strukturen enthält oder verrauscht ist, entstehen sehr viele Regionen und damit steigt die Laufzeit deutlich an.

Ausführungsinformationen

Parameter

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

Eingabebild.

BasinsBasinsBasinsBasinsbasinsbasins (output_object)  region-array objectHRegionHObjectHRegionHobject *

Segmentierte Becken.

WatershedsWatershedsWatershedsWatershedswatershedswatersheds (output_object)  region(-array) objectHRegionHObjectHRegionHobject *

Wasserscheiden zwischen den Becken.

Beispiel (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  HImage   image (argv[1]), gauss;
  HWindow  win;

  cout << "Gauss of original " << endl;
  gauss  = image.GaussImage (9);
  image.Display (win);

  HRegion        watersheds;
  HRegionArray   basins = gauss.Watersheds (&watersheds);

  win.SetColored (12);
  basins.Display (win);
  win.Click ();

  return (0);
}

Beispiel (C)

read_image(&Cells,"meningg5");
gauss_filter(Cells,&CellsGauss,9);
invert_image(CellsGauss,&CellsInvert);
watersheds(CellsInvert,&Bassins,&Watersheds);
set_colored(WindowHandle,12);
disp_region(Bassins,WindowHandle);

Beispiel (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  HImage   image (argv[1]), gauss;
  HWindow  win;

  cout << "Gauss of original " << endl;
  gauss  = image.GaussImage (9);
  image.Display (win);

  HRegion        watersheds;
  HRegionArray   basins = gauss.Watersheds (&watersheds);

  win.SetColored (12);
  basins.Display (win);
  win.Click ();

  return (0);
}

Beispiel (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  HImage   image (argv[1]), gauss;
  HWindow  win;

  cout << "Gauss of original " << endl;
  gauss  = image.GaussImage (9);
  image.Display (win);

  HRegion        watersheds;
  HRegionArray   basins = gauss.Watersheds (&watersheds);

  win.SetColored (12);
  basins.Display (win);
  win.Click ();

  return (0);
}

Beispiel (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  HImage   image (argv[1]), gauss;
  HWindow  win;

  cout << "Gauss of original " << endl;
  gauss  = image.GaussImage (9);
  image.Display (win);

  HRegion        watersheds;
  HRegionArray   basins = gauss.Watersheds (&watersheds);

  win.SetColored (12);
  basins.Display (win);
  win.Click ();

  return (0);
}

Ergebnis

watershedswatershedsWatershedsWatershedsWatershedswatersheds liefert normalerweise den Wert TRUE. Für das Verhalten bzgl. der Eingabebilder und Ausgaberegionen sind die Flags 'no_object_result'"no_object_result""no_object_result""no_object_result""no_object_result""no_object_result", 'empty_region_result'"empty_region_result""empty_region_result""empty_region_result""empty_region_result""empty_region_result" und 'store_empty_region'"store_empty_region""store_empty_region""store_empty_region""store_empty_region""store_empty_region" einstellbar (siehe set_systemset_systemSetSystemSetSystemSetSystemset_system). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilterbinomial_filter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFiltergauss_filter, smooth_imagesmooth_imageSmoothImageSmoothImageSmoothImagesmooth_image, invert_imageinvert_imageInvertImageInvertImageInvertImageinvert_image

Nachfolger

expand_regionexpand_regionExpandRegionExpandRegionExpandRegionexpand_region, select_shapeselect_shapeSelectShapeSelectShapeSelectShapeselect_shape, reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain, openingopeningOpeningOpeningOpeningopening

Alternativen

watersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThresholdWatershedsThresholdwatersheds_threshold, pouringpouringPouringPouringPouringpouring, watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerWatershedsMarkerwatersheds_marker

Literatur

L. Vincent, P. Soille: „Watersheds in Digital Space: An Efficient Algorithm Based on Immersion Simulations“; IEEE Transactions on Pattern Analysis and Machine Intelligence; vol. 13, no. 6; pp. 583-598; 1991.

Modul

Foundation