Operator Reference

boundaryboundaryBoundaryBoundaryboundary (Operator)

boundaryboundaryBoundaryBoundaryboundary — Reduce a region to its boundary.

Signature

boundary(Region : RegionBorder : BoundaryType : )

Herror boundary(const Hobject Region, Hobject* RegionBorder, const char* BoundaryType)

Herror T_boundary(const Hobject Region, Hobject* RegionBorder, const Htuple BoundaryType)

void Boundary(const HObject& Region, HObject* RegionBorder, const HTuple& BoundaryType)

HRegion HRegion::Boundary(const HString& BoundaryType) const

HRegion HRegion::Boundary(const char* BoundaryType) const

HRegion HRegion::Boundary(const wchar_t* BoundaryType) const   ( Windows only)

static void HOperatorSet.Boundary(HObject region, out HObject regionBorder, HTuple boundaryType)

HRegion HRegion.Boundary(string boundaryType)

def boundary(region: HObject, boundary_type: str) -> HObject

Description

boundaryboundaryBoundaryBoundaryboundary computes the boundary of each input region in RegionRegionRegionregionregion and returns them in RegionBorderRegionBorderRegionBorderregionBorderregion_border. The parameter BoundaryTypeBoundaryTypeBoundaryTypeboundaryTypeboundary_type determines the type of boundary computation.

The contour computation is done using morphological operations. The resulting output regions consist only of the minimal border of the input regions. Their positions depend on the value of BoundaryTypeBoundaryTypeBoundaryTypeboundaryTypeboundary_type, accepting the following values:

  • 'inner'"inner""inner""inner""inner": The contour lies within the original region.

  • 'inner_filled'"inner_filled""inner_filled""inner_filled""inner_filled": The contour lies within the original region, holes in the interior of the input region are suppressed. Due to algorithm optimization this contours may slightly differ from corresponding ones obtained with 'inner'"inner""inner""inner""inner".

  • 'outer'"outer""outer""outer""outer": The contour is one pixel outside of the original region.

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

RegionRegionRegionregionregion (input_object)  region(-array) objectHRegionHObjectHObjectHobject

Regions for which the boundary is to be computed.

RegionBorderRegionBorderRegionBorderregionBorderregion_border (output_object)  region(-array) objectHRegionHObjectHObjectHobject *

Resulting boundaries.

BoundaryTypeBoundaryTypeBoundaryTypeboundaryTypeboundary_type (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Boundary type.

Default: '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"

Example (C++)

#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);
}

Example (C)

/* 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);
}

Example (C++)

#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);
}

Example (C++)

#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);
}

Complexity

Let A be the area of the input region. Then the runtime complexity for one region is

Result

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:

Otherwise, an exception is raised.

Possible Predecessors

thresholdthresholdThresholdThresholdthreshold, regiongrowingregiongrowingRegiongrowingRegiongrowingregiongrowing, connectionconnectionConnectionConnectionconnection, union1union1Union1Union1union1, watershedswatershedsWatershedsWatershedswatersheds, class_ndim_normclass_ndim_normClassNdimNormClassNdimNormclass_ndim_norm

Possible Successors

reduce_domainreduce_domainReduceDomainReduceDomainreduce_domain, select_shapeselect_shapeSelectShapeSelectShapeselect_shape, area_centerarea_centerAreaCenterAreaCenterarea_center, connectionconnectionConnectionConnectionconnection

Alternatives

dilation_circledilation_circleDilationCircleDilationCircledilation_circle, erosion_circleerosion_circleErosionCircleErosionCircleerosion_circle, differencedifferenceDifferenceDifferencedifference

See also

fill_upfill_upFillUpFillUpfill_up

Module

Foundation