erosion_circle erosion_circle ErosionCircle ErosionCircle erosion_circle (Operator)
Name
erosion_circle erosion_circle ErosionCircle ErosionCircle erosion_circle
— Erode a region with a circular structuring element.
Signature
def erosion_circle (region : HObject, radius : Union[float, int]) -> HObject
Description
erosion_circle erosion_circle ErosionCircle ErosionCircle erosion_circle
applies a Minkowski subtraction with a
circular structuring element to the input regions Region Region Region region region
.
Because the circular mask is symmetrical, this is identical to an
erosion. The size of the circle used as structuring element is
determined by Radius Radius Radius radius radius
.
The operator results in reduced regions, smoothed region boundaries,
and the regions smaller than the circular mask are eliminated.
It is useful to select only values like 3.5,
5.5, etc. for Radius Radius Radius radius radius
in order to avoid a translation
of a region, because integer radii result in a circle having a
non-integer center of gravity which is rounded to the next integer.
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
Region Region Region region region
(input_object) region(-array) →
object HRegion HObject HObject Hobject
Regions to be eroded.
RegionErosion RegionErosion RegionErosion regionErosion region_erosion
(output_object) region(-array) →
object HRegion HObject HObject Hobject *
Eroded regions.
Radius Radius Radius radius radius
(input_control) real →
HTuple Union[float, int] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Radius of the circular structuring element.
Default:
3.5
Suggested values:
1.5, 2.5, 3.5, 4.5, 5.5, 7.5, 9.5, 12.5, 15.5, 19.5, 25.5, 33.5, 45.5, 60.5, 110.5
Value range:
0.5
≤
Radius
Radius
Radius
radius
radius
≤
511.5
(lin)
Minimum increment:
1.0
Recommended increment:
1.0
Example (C++)
#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
main()
{
cout << "Simulation of 'erosion_circle ()'" << endl;
cout << "First = original image " << endl;
cout << "Red = after segmentation " << endl;
cout << "Blue = after erosion " << endl;
HByteImage img("monkey");
HWindow w;
HRegion circ = HRegion::GenCircle (10, 10, 1.5);
HRegionArray regs = (img >= 128).Connection();
HRegionArray minsub = regs.MinkowskiSub1 (circ, 1);
img.Display (w); w.Click ();
w.SetColor ("red"); regs.Display (w); w.Click ();
w.SetColor ("blue"); minsub.Display (w); w.Click ();
return(0);
}
Example (C)
my_erosion_circle(Hobject In, double Radius, Hobject *Out)
{
Hobject Circle;
gen_circle(&Circle,100.0,100.0,Radius);
minkowski_sub1(In,Circle,Out,1);
}
Example (C++)
#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
main()
{
cout << "Simulation of 'erosion_circle ()'" << endl;
cout << "First = original image " << endl;
cout << "Red = after segmentation " << endl;
cout << "Blue = after erosion " << endl;
HByteImage img("monkey");
HWindow w;
HRegion circ = HRegion::GenCircle (10, 10, 1.5);
HRegionArray regs = (img >= 128).Connection();
HRegionArray minsub = regs.MinkowskiSub1 (circ, 1);
img.Display (w); w.Click ();
w.SetColor ("red"); regs.Display (w); w.Click ();
w.SetColor ("blue"); minsub.Display (w); w.Click ();
return(0);
}
Example (C++)
#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
main()
{
cout << "Simulation of 'erosion_circle ()'" << endl;
cout << "First = original image " << endl;
cout << "Red = after segmentation " << endl;
cout << "Blue = after erosion " << endl;
HByteImage img("monkey");
HWindow w;
HRegion circ = HRegion::GenCircle (10, 10, 1.5);
HRegionArray regs = (img >= 128).Connection();
HRegionArray minsub = regs.MinkowskiSub1 (circ, 1);
img.Display (w); w.Click ();
w.SetColor ("red"); regs.Display (w); w.Click ();
w.SetColor ("blue"); minsub.Display (w); w.Click ();
return(0);
}
Complexity
Let F1 be the area of an input region. Then the runtime complexity for one
region is:
Result
erosion_circle erosion_circle ErosionCircle ErosionCircle erosion_circle
returns 2 (
H_MSG_TRUE )
if all parameters are
correct. The behavior in case of empty or no input region can be
set via:
no region:
set_system('no_object_result',<RegionResult>) set_system("no_object_result",<RegionResult>) SetSystem("no_object_result",<RegionResult>) SetSystem("no_object_result",<RegionResult>) set_system("no_object_result",<RegionResult>)
empty region:
set_system('empty_region_result',<RegionResult>) set_system("empty_region_result",<RegionResult>) SetSystem("empty_region_result",<RegionResult>) SetSystem("empty_region_result",<RegionResult>) set_system("empty_region_result",<RegionResult>)
Otherwise, an exception is raised.
Possible Predecessors
threshold threshold Threshold Threshold threshold
,
regiongrowing regiongrowing Regiongrowing Regiongrowing regiongrowing
,
watersheds watersheds Watersheds Watersheds watersheds
,
class_ndim_norm class_ndim_norm ClassNdimNorm ClassNdimNorm class_ndim_norm
Possible Successors
connection connection Connection Connection connection
,
reduce_domain reduce_domain ReduceDomain ReduceDomain reduce_domain
,
select_shape select_shape SelectShape SelectShape select_shape
,
area_center area_center AreaCenter AreaCenter area_center
Alternatives
minkowski_sub1 minkowski_sub1 MinkowskiSub1 MinkowskiSub1 minkowski_sub1
See also
gen_circle gen_circle GenCircle GenCircle gen_circle
,
dilation_circle dilation_circle DilationCircle DilationCircle dilation_circle
,
closing_circle closing_circle ClosingCircle ClosingCircle closing_circle
,
opening_circle opening_circle OpeningCircle OpeningCircle opening_circle
Module
Foundation