watershedswatershedsWatershedsWatersheds (Operator)

Name

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

Beschreibung

watershedswatershedsWatershedsWatershedsWatersheds 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 BasinsBasinsBasinsBasinsbasins enthält diese dunklen Becken. WatershedsWatershedsWatershedsWatershedswatersheds enthält die Punkte der Wasserscheiden, die höchstens 1 Pixel breit sind. WatershedsWatershedsWatershedsWatershedswatersheds ist immer eine Region pro Eingabebild, BasinsBasinsBasinsBasinsbasins 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_filterBinomialFilterBinomialFilterBinomialFilter oder gauss_filtergauss_filterGaussFilterGaussFilterGaussFilter). Eine weitere Möglichkeit, die Anzahl der Ergebnisregionen zu reduzieren, besteht darin, benachbarte Becken aufgrund eines Schwellenwertkriteriums mit watersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThresholdWatershedsThreshold zu vereinigen (für weitere Informationen siehe watersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThresholdWatershedsThreshold).

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

ImageImageImageImageimage (input_object)  singlechannelimage(-array) objectHImageHImageHobject (byte / uint2 / real)

Eingabebild.

BasinsBasinsBasinsBasinsbasins (output_object)  region-array objectHRegionHRegionHobject *

Segmentierte Becken.

WatershedsWatershedsWatershedsWatershedswatersheds (output_object)  region(-array) objectHRegionHRegionHobject *

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

watershedswatershedsWatershedsWatershedsWatersheds liefert normalerweise den Wert 2 (H_MSG_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", '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" einstellbar (siehe set_systemset_systemSetSystemSetSystemSetSystem). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFilter, smooth_imagesmooth_imageSmoothImageSmoothImageSmoothImage, invert_imageinvert_imageInvertImageInvertImageInvertImage

Nachfolger

expand_regionexpand_regionExpandRegionExpandRegionExpandRegion, select_shapeselect_shapeSelectShapeSelectShapeSelectShape, reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain, openingopeningOpeningOpeningOpening

Alternativen

watersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThresholdWatershedsThreshold, pouringpouringPouringPouringPouring, watersheds_markerwatersheds_markerWatershedsMarkerWatershedsMarkerWatershedsMarker

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