HALCON Reference Manual 10.0.2
Table of Contents / Segmentation / Topography ClassesClassesClasses | | | Operators

watershedswatershedswatershedsWatershedsWatersheds (Operator)

Name

watershedswatershedswatershedsWatershedsWatersheds — Extract watersheds and basins from an image.

Signature

watersheds(Image : Basins, Watersheds : : )

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

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

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

HRegionArray HImage::Watersheds(HRegion* Watersheds) const

HRegionArray HImageArray::Watersheds(HRegionArray* Watersheds) const

void HOperatorSetX.Watersheds(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*Basins, [out] IHUntypedObjectX*Watersheds)

IHRegionX* HImageX.Watersheds([out] IHRegionX*Watersheds)

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

HRegion HImage.Watersheds(out HRegion watersheds)

Description

watershedswatershedswatershedsWatershedsWatersheds segments an image based on the topology of the gray values. The image is interpreted as a “mountain range.” Higher gray values correspond to “mountains,” while lower gray values correspond to “valleys.” In the resulting mountain range watersheds are extracted. These correspond to the bright ridges between dark basins. On output, the parameter BasinsBasinsBasinsBasinsbasins contains these basins, while WatershedsWatershedsWatershedsWatershedswatersheds contains the watersheds, which are at most one pixel wide. WatershedsWatershedsWatershedsWatershedswatersheds always is a single region per input image, while BasinsBasinsBasinsBasinsbasins contains a separate region for each basin.

It is advisable to apply a smoothing operator (e.g., binomial_filterbinomial_filterbinomial_filterBinomialFilterBinomialFilter or gauss_imagegauss_imagegauss_imageGaussImageGaussImage) to the input image before calling watershedswatershedswatershedsWatershedsWatersheds in order to reduce the number of output regions. A more sophisticated way to reduce the number of output regions is to merge neighboring basins based on a threshold criterion by using watersheds_thresholdwatersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThreshold instead (for more details please refer to the documentation of watersheds_thresholdwatersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThreshold).

Attention

If the image contains many fine structures or is noisy, many output regions result, and thus the runtime increases considerably.

Parallelization

Parameters

ImageImageImageImageimage (input_object)  image(-array) objectHImageHImageHImageXHobject (byte / uint2 / real)

Input image.

BasinsBasinsBasinsBasinsbasins (output_object)  region-array objectHRegionHRegionArrayHRegionXHobject *

Segmented basins.

WatershedsWatershedsWatershedsWatershedswatersheds (output_object)  region(-array) objectHRegionHRegionHRegionXHobject *

Watersheds between the basins.

Example (C++)

#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);
}

Example (C)

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

Example (C++)

#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);
}

Example (C++)

#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);
}

Example (C++)

#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);
}

Result

watershedswatershedswatershedsWatershedsWatersheds always returns 2 (H_MSG_TRUE). The behavior with respect to the input images and output regions can be determined by setting the values of the 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", and 'store_empty_region'"store_empty_region""store_empty_region""store_empty_region""store_empty_region" with set_systemset_systemset_systemSetSystemSetSystem. If necessary, an exception is raised.

Possible Predecessors

binomial_filterbinomial_filterbinomial_filterBinomialFilterBinomialFilter, gauss_imagegauss_imagegauss_imageGaussImageGaussImage, smooth_imagesmooth_imagesmooth_imageSmoothImageSmoothImage, invert_imageinvert_imageinvert_imageInvertImageInvertImage

Possible Successors

expand_regionexpand_regionexpand_regionExpandRegionExpandRegion, select_shapeselect_shapeselect_shapeSelectShapeSelectShape, reduce_domainreduce_domainreduce_domainReduceDomainReduceDomain, openingopeningopeningOpeningOpening

Alternatives

watersheds_thresholdwatersheds_thresholdwatersheds_thresholdWatershedsThresholdWatershedsThreshold, pouringpouringpouringPouringPouring

References

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.

Module

Foundation


Table of Contents / Segmentation / Topography ClassesClassesClasses | | | Operators
HALCON Reference Manual 10.0.2 Copyright © 1996-2011 MVTec Software GmbH