ClassesClassesClassesClasses | | | | Operators

expand_gray_refexpand_gray_refExpandGrayRefexpand_gray_refExpandGrayRefExpandGrayRef (Operator)

Name

expand_gray_refexpand_gray_refExpandGrayRefexpand_gray_refExpandGrayRefExpandGrayRef — Fill gaps between regions (depending on gray value or color) or split overlapping regions.

Signature

expand_gray_ref(Regions, Image, ForbiddenArea : RegionExpand : Iterations, Mode, RefGray, Threshold : )

Herror expand_gray_ref(const Hobject Regions, const Hobject Image, const Hobject ForbiddenArea, Hobject* RegionExpand, const char* Iterations, const char* Mode, const Hlong RefGray, const Hlong Threshold)

Herror T_expand_gray_ref(const Hobject Regions, const Hobject Image, const Hobject ForbiddenArea, Hobject* RegionExpand, const Htuple Iterations, const Htuple Mode, const Htuple RefGray, const Htuple Threshold)

Herror expand_gray_ref(Hobject Regions, Hobject Image, Hobject ForbiddenArea, Hobject* RegionExpand, const HTuple& Iterations, const HTuple& Mode, const HTuple& RefGray, const HTuple& Threshold)

HRegion HRegion::ExpandGrayRef(const HImage& Image, const HRegion& ForbiddenArea, const HTuple& Iterations, const HTuple& Mode, const HTuple& RefGray, const HTuple& Threshold) const

HRegionArray HRegionArray::ExpandGrayRef(const HImage& Image, const HRegion& ForbiddenArea, const HTuple& Iterations, const HTuple& Mode, const HTuple& RefGray, const HTuple& Threshold) const

void ExpandGrayRef(const HObject& Regions, const HObject& Image, const HObject& ForbiddenArea, HObject* RegionExpand, const HTuple& Iterations, const HTuple& Mode, const HTuple& RefGray, const HTuple& Threshold)

HRegion HImage::ExpandGrayRef(const HRegion& Regions, const HRegion& ForbiddenArea, const HTuple& Iterations, const HString& Mode, const HTuple& RefGray, const HTuple& Threshold) const

HRegion HImage::ExpandGrayRef(const HRegion& Regions, const HRegion& ForbiddenArea, const HString& Iterations, const HString& Mode, Hlong RefGray, Hlong Threshold) const

HRegion HImage::ExpandGrayRef(const HRegion& Regions, const HRegion& ForbiddenArea, const char* Iterations, const char* Mode, Hlong RefGray, Hlong Threshold) const

HRegion HRegion::ExpandGrayRef(const HImage& Image, const HRegion& ForbiddenArea, const HTuple& Iterations, const HString& Mode, const HTuple& RefGray, const HTuple& Threshold) const

HRegion HRegion::ExpandGrayRef(const HImage& Image, const HRegion& ForbiddenArea, const HString& Iterations, const HString& Mode, Hlong RefGray, Hlong Threshold) const

HRegion HRegion::ExpandGrayRef(const HImage& Image, const HRegion& ForbiddenArea, const char* Iterations, const char* Mode, Hlong RefGray, Hlong Threshold) const

void HOperatorSetX.ExpandGrayRef(
[in] IHUntypedObjectX* Regions, [in] IHUntypedObjectX* Image, [in] IHUntypedObjectX* ForbiddenArea, [out] IHUntypedObjectX*RegionExpand, [in] VARIANT Iterations, [in] VARIANT Mode, [in] VARIANT RefGray, [in] VARIANT Threshold)

IHRegionX* HImageX.ExpandGrayRef(
[in] IHRegionX* Regions, [in] IHRegionX* ForbiddenArea, [in] VARIANT Iterations, [in] BSTR Mode, [in] VARIANT RefGray, [in] VARIANT Threshold)

IHRegionX* HRegionX.ExpandGrayRef(
[in] IHImageX* Image, [in] IHRegionX* ForbiddenArea, [in] VARIANT Iterations, [in] BSTR Mode, [in] VARIANT RefGray, [in] VARIANT Threshold)

static void HOperatorSet.ExpandGrayRef(HObject regions, HObject image, HObject forbiddenArea, out HObject regionExpand, HTuple iterations, HTuple mode, HTuple refGray, HTuple threshold)

HRegion HImage.ExpandGrayRef(HRegion regions, HRegion forbiddenArea, HTuple iterations, string mode, HTuple refGray, HTuple threshold)

HRegion HImage.ExpandGrayRef(HRegion regions, HRegion forbiddenArea, string iterations, string mode, int refGray, int threshold)

HRegion HRegion.ExpandGrayRef(HImage image, HRegion forbiddenArea, HTuple iterations, string mode, HTuple refGray, HTuple threshold)

HRegion HRegion.ExpandGrayRef(HImage image, HRegion forbiddenArea, string iterations, string mode, int refGray, int threshold)

Description

expand_gray_refexpand_gray_refExpandGrayRefexpand_gray_refExpandGrayRefExpandGrayRef closes gaps between the input regions, which resulted from the suppression of small regions in a segmentation operator, (mode 'image'"image""image""image""image""image"), for example, or separates overlapping regions 'region'"region""region""region""region""region"). Both uses result from the expansion of regions. The operator works by adding a one pixel wide “strip” to a region, in which the gray values or color are different from a reference gray value or color by at most ThresholdThresholdThresholdThresholdThresholdthreshold (in each channel). For images of type 'cyclic'"cyclic""cyclic""cyclic""cyclic""cyclic" (e.g., direction images), also points with a gray value difference of at least 255 - ThresholdThresholdThresholdThresholdThresholdthreshold are added to the output region.

The expansion takes place only in regions, which are designated as not “forbidden” (parameter ForbiddenAreaForbiddenAreaForbiddenAreaForbiddenAreaForbiddenAreaforbiddenArea). The number of iterations is determined by the parameter IterationsIterationsIterationsIterationsIterationsiterations. By passing 'maximal'"maximal""maximal""maximal""maximal""maximal", expand_gray_refexpand_gray_refExpandGrayRefexpand_gray_refExpandGrayRefExpandGrayRef iterates until convergence, i.e., until no more changes occur. By passing 0 for this parameter, all non-overlapping regions are returned. The two modes of operation ('image'"image""image""image""image""image" and 'region'"region""region""region""region""region") are different in the following ways:

'image'

The input regions are expanded iteratively until they touch another region or the image border, or the expansion stops because of too high gray value differences. Because expand_gray_refexpand_gray_refExpandGrayRefexpand_gray_refExpandGrayRefExpandGrayRef processes all regions simultaneously, gaps between regions are distributed evenly to all regions with a similar gray value. Overlapping regions are split by distributing the area of overlap evenly to both regions.

'region'

No expansion of the input regions is performed. Instead, only overlapping regions are split by distributing the area of overlap evenly to regions having a matching gray value or color.

Attention

Because regions are only expanded into areas having a matching gray value or color, usually gaps will remain between the output regions, i.e., the segmentation is not complete.

Parallelization

Parameters

RegionsRegionsRegionsRegionsRegionsregions (input_object)  region(-array) objectHRegionHRegionHRegionHRegionXHobject

Regions for which the gaps are to be closed, or which are to be separated.

ImageImageImageImageImageimage (input_object)  (multichannel-)image objectHImageHImageHImageHImageXHobject (byte / cyclic)

Image (possibly multi-channel) for gray value or color comparison.

ForbiddenAreaForbiddenAreaForbiddenAreaForbiddenAreaForbiddenAreaforbiddenArea (input_object)  region objectHRegionHRegionHRegionHRegionXHobject

Regions in which no expansion takes place.

RegionExpandRegionExpandRegionExpandRegionExpandRegionExpandregionExpand (output_object)  region(-array) objectHRegionHRegionHRegionHRegionXHobject *

Expanded or separated regions.

IterationsIterationsIterationsIterationsIterationsiterations (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string / integer) (string / int / long) (HString / Hlong) (char* / Hlong) (BSTR / Hlong) (char* / Hlong)

Number of iterations.

Default value: 'maximal' "maximal" "maximal" "maximal" "maximal" "maximal"

Suggested values: 'maximal'"maximal""maximal""maximal""maximal""maximal", 1, 2, 3, 4, 5, 7, 10, 15, 20, 30, 50, 70, 100, 150, 200, 300, 500

Typical range of values: 1 ≤ Iterations Iterations Iterations Iterations Iterations iterations ≤ 500 (lin)

Minimum increment: 1

Recommended increment: 1

ModeModeModeModeModemode (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Expansion mode.

Default value: 'image' "image" "image" "image" "image" "image"

List of values: 'image'"image""image""image""image""image", 'region'"region""region""region""region""region"

RefGrayRefGrayRefGrayRefGrayRefGrayrefGray (input_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Reference gray value or color for comparison.

Default value: 128

Suggested values: 1, 10, 20, 50, 100, 128, 200, 255

Typical range of values: 1 ≤ RefGray RefGray RefGray RefGray RefGray refGray ≤ 255 (lin)

Minimum increment: 1

Recommended increment: 10

ThresholdThresholdThresholdThresholdThresholdthreshold (input_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Maximum difference between the reference gray value or color and a candidate for expansion.

Default value: 32

Suggested values: 4, 10, 15, 20, 25, 30, 40

Typical range of values: 1 ≤ Threshold Threshold Threshold Threshold Threshold threshold ≤ 255 (lin)

Minimum increment: 1

Recommended increment: 5

Example (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  HImage   image (argv[1]);
  HRegion  empty_region;
  HWindow  win;

  win.SetDraw ("margin");
  win.SetColored (12);

  image.Display (win);

  HRegionArray seg = (image >= 100).Connection ();
  seg.Display (win);

  Tuple iter = "maximal";
  Tuple mode = "image";
  Tuple refg = 128;
  Tuple thrs = 32;

  HRegionArray exp = seg.ExpandGrayRef (image, empty_region,
                                        iter, mode, refg, thrs);
  exp.Display (win);
  win.Click ();

  return (0);
}

Example (C)

read_image(&Image,"fabrik");
disp_image(Image,WindowHandle);
regiongrowing(Image,&RawSegments,3,3,6.0,100);
set_colored(WindowHandle,12);
disp_region(RawSegments,WindowHandle);
T_intensity(RawSegments,Image,&Mean,NULL);
set_i(Thresh,24,0);
set_s(Iter,"maximal",0);
set_s(Mode,"image",0);
T_expand_gray_ref(RawSegments,Image,EMPTY_REGION,&Segments,Iter,Mode,
               Mean,Thresh);
clear_window(WindowHandle);
disp_region(Segments,WindowHandle);

Example (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  HImage   image (argv[1]);
  HRegion  empty_region;
  HWindow  win;

  win.SetDraw ("margin");
  win.SetColored (12);

  image.Display (win);

  HRegionArray seg = (image >= 100).Connection ();
  seg.Display (win);

  Tuple iter = "maximal";
  Tuple mode = "image";
  Tuple refg = 128;
  Tuple thrs = 32;

  HRegionArray exp = seg.ExpandGrayRef (image, empty_region,
                                        iter, mode, refg, thrs);
  exp.Display (win);
  win.Click ();

  return (0);
}

Example (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  HImage   image (argv[1]);
  HRegion  empty_region;
  HWindow  win;

  win.SetDraw ("margin");
  win.SetColored (12);

  image.Display (win);

  HRegionArray seg = (image >= 100).Connection ();
  seg.Display (win);

  Tuple iter = "maximal";
  Tuple mode = "image";
  Tuple refg = 128;
  Tuple thrs = 32;

  HRegionArray exp = seg.ExpandGrayRef (image, empty_region,
                                        iter, mode, refg, thrs);
  exp.Display (win);
  win.Click ();

  return (0);
}

Example (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  HImage   image (argv[1]);
  HRegion  empty_region;
  HWindow  win;

  win.SetDraw ("margin");
  win.SetColored (12);

  image.Display (win);

  HRegionArray seg = (image >= 100).Connection ();
  seg.Display (win);

  Tuple iter = "maximal";
  Tuple mode = "image";
  Tuple refg = 128;
  Tuple thrs = 32;

  HRegionArray exp = seg.ExpandGrayRef (image, empty_region,
                                        iter, mode, refg, thrs);
  exp.Display (win);
  win.Click ();

  return (0);
}

Example (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  HImage   image (argv[1]);
  HRegion  empty_region;
  HWindow  win;

  win.SetDraw ("margin");
  win.SetColored (12);

  image.Display (win);

  HRegionArray seg = (image >= 100).Connection ();
  seg.Display (win);

  Tuple iter = "maximal";
  Tuple mode = "image";
  Tuple refg = 128;
  Tuple thrs = 32;

  HRegionArray exp = seg.ExpandGrayRef (image, empty_region,
                                        iter, mode, refg, thrs);
  exp.Display (win);
  win.Click ();

  return (0);
}

Result

expand_gray_refexpand_gray_refExpandGrayRefexpand_gray_refExpandGrayRefExpandGrayRef always returns the value 2 (H_MSG_TRUE). The behavior in case of empty input (no regions given) can be set via set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>), the behavior in case of an empty input region via set_system('empty_region_result',<Result>)set_system("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)set_system("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>), and the behavior in case of an empty result region via set_system('store_empty_region',<'true'/'false'>)set_system("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">)set_system("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">). If necessary, an exception is raised.

Possible Predecessors

connectionconnectionConnectionconnectionConnectionConnection, regiongrowingregiongrowingRegiongrowingregiongrowingRegiongrowingRegiongrowing, pouringpouringPouringpouringPouringPouring, class_ndim_normclass_ndim_normClassNdimNormclass_ndim_normClassNdimNormClassNdimNorm

Possible Successors

select_shapeselect_shapeSelectShapeselect_shapeSelectShapeSelectShape

See also

expand_grayexpand_grayExpandGrayexpand_grayExpandGrayExpandGray, expand_regionexpand_regionExpandRegionexpand_regionExpandRegionExpandRegion

Module

Foundation


ClassesClassesClassesClasses | | | | Operators