opening🔗
Short description🔗
opening — Open a region.
Signature🔗
opening( region Region, region StructElement, out region RegionOpening )
Description🔗
An opening operation is defined as an erosion followed
by a Minkowski addition. By applying opening to a
region, larger structures remain mostly intact, while small
structures like lines or points are eliminated. In contrast, a
closing operation results in small gaps being retained
or filled up (see closing).
opening serves to eliminate small regions (smaller than
StructElement) and to smooth the boundaries of a region.
The position of StructElement is meaningless, since an
opening operation is invariant with respect to the choice of the
reference point.
Structuring elements (StructElement) can be generated
with operators such as gen_circle, gen_rectangle1,
gen_rectangle2, gen_ellipse,
draw_region, gen_region_polygon,
gen_region_points, etc.
Execution information🔗
Execution information
-
Multithreading type: reentrant (runs in parallel with non-exclusive operators).
-
Multithreading scope: global (may be called from any thread).
Parameters🔗
Region (input_object) region(-array) → object
Regions to be opened.
StructElement (input_object) region → object
Structuring element (position-invariant).
RegionOpening (output_object) region(-array) → object
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)
/* simulation of opening */
my_opening(Hobject In, Hobject StructElement, Hobject *Out)
{
Hobject H\;
erosion1(In,StructElement,&H,1)\;
minkowski_add1(H,StructElement,Out,1)\;
}
/* 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)\;
#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std\;
#endif
#include "HalconCpp.h"
main()
{
HImage img("forest_road")\;
HWindow w\;
cout << "Example: Large regions in an aerial picture: " << endl\;
cout << "Beech Trees or Meadows" << endl\;
/* Struct elements */
HRegion circ1 = HRegion::GenCircle (10, 10, 10)\;
HRegion rect1 = HRegion::GenRectangle2 (100, 100, 3.07819, 20, 1)\;
/* Segmentation, opening () -> select large regions */
HRegionArray regs = (img >= 160).Connection()\;
HRegionArray open = regs.Opening (circ1)\;
img.Display (w)\; w.Click ()\;
w.SetColor ("red")\; regs.Display (w)\; w.Click ()\;
w.SetColor ("green")\; open.Display (w)\; w.Click ()\;
cout << "Example: Selecting of edges with certain orientation" << endl\;
HByteImage hbi ("fabrik")\;
HImage sobel = hbi.SobelAmp ("sum_abs", 3)\;
regs = (sobel >= 30).Connection ()\;
HRegionArray direc = regs.Opening (rect1)\;
hbi.Display (w)\; w.Click ()\;
w.SetColor ("red")\; regs.Display (w)\; w.Click ()\;
w.SetColor ("blue")\; sobel.Display (w)\; w.Click ()\;
w.SetColor ("green")\; direc.Display (w)\; w.Click ()\;
return(0)\;
}
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🔗
opening 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.
Combinations with other operators🔗
Combinations
Possible predecessors
threshold, regiongrowing, connection, union1, watersheds, class_ndim_norm, gen_circle, gen_ellipse, gen_rectangle1, gen_rectangle2, draw_region, gen_region_points, gen_region_polygon_filled
Possible successors
reduce_domain, select_shape, area_center, connection
Alternatives
minkowski_add1, erosion1, opening_circle
See also
Module🔗
Foundation