With dyn_thresholddyn_thresholdDynThresholdDynThresholddyn_threshold, contours of an object can be extracted,
where the objects' size (diameter) is determined by the mask size of
the lowpass filter and the amplitude of the objects' edges:
The larger the mask size is chosen, the larger the found regions
become. As a rule of thumb, the mask size should be about twice the
diameter of the objects to be extracted. It is important not to set
the parameter OffsetOffsetOffsetoffsetoffset to zero because in this case too
many small regions will be found (noise). Values between 5 and 40
are a useful choice. The larger OffsetOffsetOffsetoffsetoffset is chosen, the
smaller the extracted regions become.
All points of the input image fulfilling the above condition are
stored jointly in one region. If necessary, the connected
components can be obtained by calling connectionconnectionConnectionConnectionconnection.
Attention
If OffsetOffsetOffsetoffsetoffset is chosen from -1 to 1
usually a very noisy region is generated, requiring large storage.
If OffsetOffsetOffsetoffsetoffset is chosen too large (> 60, say) it may happen
that no points fulfill the threshold condition (i.e., an empty
region is returned). If OffsetOffsetOffsetoffsetoffset is chosen too small (<
-60, say) it may happen that all points fulfill the threshold
condition (i.e., a full region is returned).
Execution Information
Multithreading type: reentrant (runs in parallel with non-exclusive operators).
Multithreading scope: global (may be called from any thread).
List of values:
'dark'"dark""dark""dark""dark", 'equal'"equal""equal""equal""equal", 'light'"light""light""light""light", 'not_equal'"not_equal""not_equal""not_equal""not_equal"
Example (HDevelop)
* Looking for regions with the diameter D
mean_image(Image,Mean,D*2+1,D*2+1)
dyn_threshold(Image,Mean,Seg,5,'light')
connection(Seg,Regions)
Example (C)
/* Looking for regions with the diameter D */
mean_image(Image,&Mean,D*2+1,D*2+1);
dyn_threshold(Image,Mean,&Seg,5.0,"light");
connection(Seg,&Region);
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 ("monkey"),
mean;
HWindow win;
if (argc != 2)
{
cout << "Using: " << argv[0] << " <diameter>" << endl;
exit (1);
}
int d = atoi (argv[1]) * 2 + 1;
image.Display (win);
mean = image.MeanImage (d, d);
HRegionArray seg = image.DynThreshold (mean, 5.0, "light");
HRegionArray reg = seg.Connection ();
win.SetColored (12);
reg.Display (win);
win.Click ();
return (0);
}
Example (HDevelop)
* Looking for regions with the diameter D
mean_image(Image,Mean,D*2+1,D*2+1)
dyn_threshold(Image,Mean,Seg,5,'light')
connection(Seg,Regions)
Complexity
Let A be the area of the input region. Then the runtime
complexity is O(A).
Result
dyn_thresholddyn_thresholdDynThresholdDynThresholddyn_threshold returns 2 (
H_MSG_TRUE)
if all parameters are
correct. 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_systemSetSystemSetSystemset_system.
If necessary, an exception is raised.