Name
watershedswatershedsWatershedswatershedsWatershedsWatersheds — Segmentieren nach dem Wasserscheiden-Prinzip.
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_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter oder
gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter). Eine weitere Möglichkeit, die Anzahl der
Ergebnisregionen zu reduzieren, besteht darin, benachbarte Becken
aufgrund eines Schwellenwertkriteriums mit
watersheds_thresholdwatersheds_thresholdWatershedsThresholdwatersheds_thresholdWatershedsThresholdWatershedsThreshold zu vereinigen (für weitere
Informationen siehe watersheds_thresholdwatersheds_thresholdWatershedsThresholdwatersheds_thresholdWatershedsThresholdWatershedsThreshold).
Wenn das Bild feine Strukturen enthält oder verrauscht ist,
entstehen sehr viele Regionen und damit steigt die Laufzeit deulich
an.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
Wasserscheiden zwischen den Becken.
#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);
}
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);
#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);
}
#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);
}
#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);
}
#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);
}
watershedswatershedsWatershedswatershedsWatershedsWatersheds 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""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_systemSetSystemset_systemSetSystemSetSystem). Gegebenenfalls wird
eine Fehlerbehandlung durchgeführt.
binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter,
gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter,
smooth_imagesmooth_imageSmoothImagesmooth_imageSmoothImageSmoothImage,
invert_imageinvert_imageInvertImageinvert_imageInvertImageInvertImage
expand_regionexpand_regionExpandRegionexpand_regionExpandRegionExpandRegion,
select_shapeselect_shapeSelectShapeselect_shapeSelectShapeSelectShape,
reduce_domainreduce_domainReduceDomainreduce_domainReduceDomainReduceDomain,
openingopeningOpeningopeningOpeningOpening
watersheds_thresholdwatersheds_thresholdWatershedsThresholdwatersheds_thresholdWatershedsThresholdWatershedsThreshold,
pouringpouringPouringpouringPouringPouring
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.
Foundation