Skip to content

watershedsWatershedsWatershedswatershedswatershedsπŸ”—

Short descriptionπŸ”—

watershedsWatershedsWatershedswatershedswatersheds β€” Extract watersheds and basins from an image.

SignatureπŸ”—

watersheds( image Image, out region Basins, out region Watersheds )void Watersheds( const HObject& Image, HObject* Basins, HObject* Watersheds )static void HOperatorSet.Watersheds( HObject image, out HObject basins, out HObject watersheds )def watersheds( image: HObject ) -> Tuple[HObject, HObject]

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

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

HRegion HImage::Watersheds( HRegion* Watersheds ) const

HRegion HImage.Watersheds( out HRegion watersheds )

DescriptionπŸ”—

watershedsWatersheds 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 Basinsbasinsbasins contains these basins, while Watershedswatershedswatersheds contains the watersheds, which are at most one pixel wide. Watershedswatershedswatersheds always is a single region per input image, while Basinsbasinsbasins contains a separate region for each basin.

It is advisable to apply a smoothing operator (e.g., binomial_filterBinomialFilter or gauss_filterGaussFilter) to the input image before calling watershedsWatersheds 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_thresholdWatershedsThreshold instead (for more details please refer to the documentation of watersheds_thresholdWatershedsThreshold).

AttentionπŸ”—

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

Execution informationπŸ”—

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Automatically parallelized on tuple level.

ParametersπŸ”—

Imageimageimage (input_object) singlechannelimage(-array) β†’ object (byte / uint2 / real)HObject (byte / uint2 / real)HImage (byte / uint2 / real)HObject (byte / uint2 / real)Hobject (byte / uint2 / real)

Input image.

Basinsbasinsbasins (output_object) region-array β†’ objectHObjectHRegionHObjectHobject *

Segmented basins.

Watershedswatershedswatersheds (output_object) region(-array) β†’ objectHObjectHRegionHObjectHobject *

Watersheds between the basins.

ExampleπŸ”—

(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)\;
(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πŸ”—

watershedsWatersheds 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", 'empty_region_result'"empty_region_result", and 'store_empty_region'"store_empty_region" with set_systemSetSystem. If necessary, an exception is raised.

Combinations with other operatorsπŸ”—

Combinations

Possible predecessors

binomial_filterBinomialFilter, gauss_filterGaussFilter, smooth_imageSmoothImage, invert_imageInvertImage

Possible successors

expand_regionExpandRegion, select_shapeSelectShape, reduce_domainReduceDomain, openingOpening

Alternatives

watersheds_thresholdWatershedsThreshold, pouringPouring, watersheds_markerWatershedsMarker

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