Name
boundaryboundaryBoundaryBoundary — Reduce a region to its boundary.
boundaryboundaryBoundaryBoundaryBoundary computes the boundary of a region by using
morphological operations. The parameter BoundaryTypeBoundaryTypeBoundaryTypeBoundaryTypeboundaryType
determines the type of boundary to compute:
'inner', 'inner_filled' and 'outer'.
boundaryboundaryBoundaryBoundaryBoundary computes the contour of each input region. The
resulting regions consist only of the minimal border of the input
regions. If BoundaryTypeBoundaryTypeBoundaryTypeBoundaryTypeboundaryType is set to 'inner', the contour
lies within the original region, if it is set to 'outer', it is one
pixel outside of the original region. If BoundaryTypeBoundaryTypeBoundaryTypeBoundaryTypeboundaryType is
set to 'inner_filled', holes in the interior of the input region are
suppressed.
- Multithreading type: reentrant (runs in parallel with non-exclusive operators).
- Multithreading scope: global (may be called from any thread).
- Automatically parallelized on tuple level.
Regions for which the boundary is to be computed.
Boundary type.
Default value:
'inner'
"inner"
"inner"
"inner"
"inner"
List of values: 'inner'"inner""inner""inner""inner", 'inner_filled'"inner_filled""inner_filled""inner_filled""inner_filled", 'outer'"outer""outer""outer""outer"
#include "HalconCpp.h"
using namespace Halcon;
main()
{
HWindow w;
HRegion circ1 = HRegion::GenCircle (20, 10, 10.5);
circ1.Display (w);
w.Click ();
HRegion marg1 = circ1.Boundary ("inner");
w.SetColor ("red");
marg1.Display (w);
w.Click ();
return(0);
}
/* Intersections of two circles: */
gen_circle(&Circle1,200.0,100.0,100.5);
gen_circle(&Circle2,200.0,150.0,100.5);
boundary(Circle1,&Margin1,"inner");
boundary(Circle2,&Margin2,"inner");
intersection(Margin1,Margin2,&Intersections);
connection(Intersections,&Single);
T_area_center(Single,NULL,&Rows,&Columns);
/* simulation of Mode 'inner' */
void inner(Hobject Region, Hobject *Border)
{
Hobject Smaller;
erosion_circle(Region,&Smaller,1.5);
difference(Region,Smaller,Border);
clear_obj(Smaller);
}
#include "HalconCpp.h"
using namespace Halcon;
main()
{
HWindow w;
HRegion circ1 = HRegion::GenCircle (20, 10, 10.5);
circ1.Display (w);
w.Click ();
HRegion marg1 = circ1.Boundary ("inner");
w.SetColor ("red");
marg1.Display (w);
w.Click ();
return(0);
}
#include "HalconCpp.h"
using namespace Halcon;
main()
{
HWindow w;
HRegion circ1 = HRegion::GenCircle (20, 10, 10.5);
circ1.Display (w);
w.Click ();
HRegion marg1 = circ1.Boundary ("inner");
w.SetColor ("red");
marg1.Display (w);
w.Click ();
return(0);
}
#include "HalconCpp.h"
using namespace Halcon;
main()
{
HWindow w;
HRegion circ1 = HRegion::GenCircle (20, 10, 10.5);
circ1.Display (w);
w.Click ();
HRegion marg1 = circ1.Boundary ("inner");
w.SetColor ("red");
marg1.Display (w);
w.Click ();
return(0);
}
Let F be the area of the input region. Then the runtime
complexity for one region is
boundaryboundaryBoundaryBoundaryBoundary 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>)
-
empty region:
set_system('empty_region_result',<RegionResult>)
Otherwise, an exception is raised.
thresholdthresholdThresholdThresholdThreshold,
regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowing,
connectionconnectionConnectionConnectionConnection,
union1union1Union1Union1Union1,
watershedswatershedsWatershedsWatershedsWatersheds,
class_ndim_normclass_ndim_normClassNdimNormClassNdimNormClassNdimNorm
reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain,
select_shapeselect_shapeSelectShapeSelectShapeSelectShape,
area_centerarea_centerAreaCenterAreaCenterAreaCenter,
connectionconnectionConnectionConnectionConnection
dilation_circledilation_circleDilationCircleDilationCircleDilationCircle,
erosion_circleerosion_circleErosionCircleErosionCircleErosionCircle,
differencedifferenceDifferenceDifferenceDifference
fill_upfill_upFillUpFillUpFillUp
Foundation