watershedsπ
Short descriptionπ
watersheds β Extract watersheds and basins from an image.
Signatureπ
watersheds( image Image, out region Basins, out region Watersheds )
Descriptionπ
watersheds 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 Basins
contains these basins, while Watersheds contains the
watersheds, which are at most one pixel wide.
Watersheds always is a single
region per input image, while Basins contains a separate
region for each basin.
It is advisable to apply a smoothing operator (e.g.,
binomial_filter or gauss_filter) to the input image
before calling watersheds 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_threshold instead (for more
details please refer to the documentation of
watersheds_threshold).
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π
Image (input_object) singlechannelimage(-array) β object (byte / uint2 / real)
Input image.
Basins (output_object) region-array β object
Segmented basins.
Watersheds (output_object) region(-array) β object
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)\;
#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π
watersheds 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',
'empty_region_result', and 'store_empty_region'
with set_system. If necessary, an exception is raised.
Combinations with other operatorsπ
Combinations
Possible predecessors
binomial_filter, gauss_filter, smooth_image, invert_image
Possible successors
expand_region, select_shape, reduce_domain, opening
Alternatives
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