Herror ::opening_seg (
    Hobject Region,
    Hobject StructElement,
    Hobject *RegionOpening
)
HRegionArray HRegion::OpeningSeg (
    const HRegion &StructElement
) const
HRegionArray HRegionArray::OpeningSeg (
    const HRegion &StructElement
) const

Separate overlapping regions.

The ::opening_seg operation is defined as a sequence of the following operators: ::erosion1, ::connection and ::dilation1 (see example). Only one iteration is done in ::erosion1 and ::dilation1.

::opening_seg serves to separate overlapping regions whose area of overlap is smaller than StructElement. It should be noted that the resulting regions can overlap without actually merging (see ::expand_region). ::opening_seg uses the center of gravity as the reference point of the structuring element.

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.


Parameters

Region (input_object)
region(-array) -> Hobject: HRegion(Array)
Regions to be opened.

StructElement (input_object)
region -> Hobject: HRegion
Structuring element (position-invariant).

RegionOpening (output_object)
region-array -> Hobject * : HRegionArray
Opened regions.


Example
#include  <iostream.h>
#include  "HalconCpp.h"

main()
{
  HWindow  w;
  HRegionArray regs = HRegionArray::GenRandomRegions("circle",8.5,10.5,
                                                  0,0,0,0,400,512,512);

  HRegionArray ureg = regs.Union1();
  HRegion      crc  = HRegion::GenCircle(100,100,8.5);
  HRegionArray ops  = ureg.OpeningSeg(crc);

  w.SetColor("red");   regs.Display(w);  w.Click();
  w.SetColored(12);    ops.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:

    O(sqrt(F1) * sqrt(F2) * sqrt(sqrt(F1)) .


Result

::opening_seg returns H_MSG_TRUE if all parameters are correct. The behavior in case of empty or no input region can be set via:

  a) no region:    set_system('no_object_result',<RegionResult>)
  b) empty region: set_system('empty_region_result',<RegionResult>)
Otherwise, an exception is raised.


Possible Predecessors

::threshold, ::regiongrowing, ::connection, ::union1, ::watersheds, ::class_ndim_norm, ::gen_circle, ::gen_ellipse, ::gen_rectangle1, ::gen_rectangle2, ::draw_region, ::gen_region_points, ::gen_struct_elements, ::gen_region_polygon_filled


Possible Successors

::expand_region, ::reduce_domain, ::select_shape, ::area_center, ::connection


Alternatives

::erosion1, ::connection, ::dilation1


Module

Morphology



Copyright © 1996-2002 MVTec Software GmbH