ClassesClasses | | Operators

openingopeningOpeningOpening (Operator)

Name

openingopeningOpeningOpening — Open a region.

Signature

opening(Region, StructElement : RegionOpening : : )

Herror opening(const Hobject Region, const Hobject StructElement, Hobject* RegionOpening)

Herror T_opening(const Hobject Region, const Hobject StructElement, Hobject* RegionOpening)

void Opening(const HObject& Region, const HObject& StructElement, HObject* RegionOpening)

HRegion HRegion::Opening(const HRegion& StructElement) const

static void HOperatorSet.Opening(HObject region, HObject structElement, out HObject regionOpening)

HRegion HRegion.Opening(HRegion structElement)

Description

An openingopeningOpeningOpeningOpening operation is defined as an erosion followed by a Minkowsi addition. By applying openingopeningOpeningOpeningOpening to a region, larger structures remain mostly intact, while small structures like lines or points are eliminated. In contrast, a closingclosingClosingClosingClosing operation results in small gaps being retained or filled up (see closingclosingClosingClosingClosing).

openingopeningOpeningOpeningOpening serves to eliminate small regions (smaller than StructElementStructElementStructElementStructElementstructElement) and to smooth the boundaries of a region. The position of StructElementStructElementStructElementStructElementstructElement is meaningless, since an opening operation is invariant with respect to the choice of the reference point.

Structuring elements (StructElementStructElementStructElementStructElementstructElement) can be generated with operators such as gen_circlegen_circleGenCircleGenCircleGenCircle, gen_rectangle1gen_rectangle1GenRectangle1GenRectangle1GenRectangle1, gen_rectangle2gen_rectangle2GenRectangle2GenRectangle2GenRectangle2, gen_ellipsegen_ellipseGenEllipseGenEllipseGenEllipse, draw_regiondraw_regionDrawRegionDrawRegionDrawRegion, gen_region_polygongen_region_polygonGenRegionPolygonGenRegionPolygonGenRegionPolygon, gen_region_pointsgen_region_pointsGenRegionPointsGenRegionPointsGenRegionPoints, etc.

Execution Information

Parameters

RegionRegionRegionRegionregion (input_object)  region(-array) objectHRegionHRegionHobject

Regions to be opened.

StructElementStructElementStructElementStructElementstructElement (input_object)  region objectHRegionHRegionHobject

Structuring element (position-invariant).

RegionOpeningRegionOpeningRegionOpeningRegionOpeningregionOpening (output_object)  region(-array) objectHRegionHRegionHobject *

Opened regions.

Example (HDevelop)

* Large regions in an aerial picture (beech trees or meadows):
read_image(Image,'forest_road')
threshold(Image,Light,160,255)
gen_circle(StructElement,100,100,10)
* selecting the large regions
opening(Light,StructElement,Large)
* Selecting of edges with certain orientation:
read_image(Image,'fabrik')
sobel_amp(Image,Sobel,'sum_abs',3)
threshold(Sobel,Edges,10,255)
gen_rectangle2(StructElement,100,100,3.07819,20,1)
opening(Edges,StructElement,Direction)

Example (C)

/* simulation of opening */
my_opening(Hobject In, Hobject StructElement, Hobject *Out)
{
  Hobject  H;
  erosion1(In,StructElement,&H,1);
  minkowski_add1(H,StructElement,Out,1);
  clear_obj(H);
}

/* Large regions in an aerial picture (beech trees or meadows): */
read_image(&Image,"forest_road");
threshold(Image,&Light,160.0,255.0);
gen_circle(&StructElement,100.0,100.0,10.0);
/* selecting the large regions */
opening(Light,StructElement,&Large);

/* Selecting of edges with certain orientation: */
read_image(&Image,"fabrik");
sobel_amp(Image,&Sobel,"sum_abs",3);
threshold(Sobel,Edges,30.0,255.0);
gen_rectangle2(&StructElement,100.0,100.0,3.07819,20.0,1.0);
opening(Edges,StructElement,&Direction);

Example (HDevelop)

* Large regions in an aerial picture (beech trees or meadows):
read_image(Image,'forest_road')
threshold(Image,Light,160,255)
gen_circle(StructElement,100,100,10)
* selecting the large regions
opening(Light,StructElement,Large)
* Selecting of edges with certain orientation:
read_image(Image,'fabrik')
sobel_amp(Image,Sobel,'sum_abs',3)
threshold(Sobel,Edges,10,255)
gen_rectangle2(StructElement,100,100,3.07819,20,1)
opening(Edges,StructElement,Direction)

Example (HDevelop)

* Large regions in an aerial picture (beech trees or meadows):
read_image(Image,'forest_road')
threshold(Image,Light,160,255)
gen_circle(StructElement,100,100,10)
* selecting the large regions
opening(Light,StructElement,Large)
* Selecting of edges with certain orientation:
read_image(Image,'fabrik')
sobel_amp(Image,Sobel,'sum_abs',3)
threshold(Sobel,Edges,10,255)
gen_rectangle2(StructElement,100,100,3.07819,20,1)
opening(Edges,StructElement,Direction)

Example (HDevelop)

* Large regions in an aerial picture (beech trees or meadows):
read_image(Image,'forest_road')
threshold(Image,Light,160,255)
gen_circle(StructElement,100,100,10)
* selecting the large regions
opening(Light,StructElement,Large)
* Selecting of edges with certain orientation:
read_image(Image,'fabrik')
sobel_amp(Image,Sobel,'sum_abs',3)
threshold(Sobel,Edges,10,255)
gen_rectangle2(StructElement,100,100,3.07819,20,1)
opening(Edges,StructElement,Direction)

Complexity

Let F1 be the area of the input region, and F2 be the area of the structuring element. Then the runtime complexity for one region is:

Result

openingopeningOpeningOpeningOpening 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_normClassNdimNormClassNdimNormClassNdimNorm, gen_circlegen_circleGenCircleGenCircleGenCircle, gen_ellipsegen_ellipseGenEllipseGenEllipseGenEllipse, gen_rectangle1gen_rectangle1GenRectangle1GenRectangle1GenRectangle1, gen_rectangle2gen_rectangle2GenRectangle2GenRectangle2GenRectangle2, draw_regiondraw_regionDrawRegionDrawRegionDrawRegion, gen_region_pointsgen_region_pointsGenRegionPointsGenRegionPointsGenRegionPoints, gen_region_polygon_filledgen_region_polygon_filledGenRegionPolygonFilledGenRegionPolygonFilledGenRegionPolygonFilled

Possible Successors

reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain, select_shapeselect_shapeSelectShapeSelectShapeSelectShape, area_centerarea_centerAreaCenterAreaCenterAreaCenter, connectionconnectionConnectionConnectionConnection

Alternatives

minkowski_add1minkowski_add1MinkowskiAdd1MinkowskiAdd1MinkowskiAdd1, erosion1erosion1Erosion1Erosion1Erosion1, opening_circleopening_circleOpeningCircleOpeningCircleOpeningCircle

See also

gen_circlegen_circleGenCircleGenCircleGenCircle, gen_rectangle2gen_rectangle2GenRectangle2GenRectangle2GenRectangle2, gen_region_polygongen_region_polygonGenRegionPolygonGenRegionPolygonGenRegionPolygon

Module

Foundation


ClassesClasses | | Operators