dilation_circledilation_circleDilationCircleDilationCircle (Operator)

Name

dilation_circledilation_circleDilationCircleDilationCircle — Ausführen einer Dilatation mit einer Kreismaske.

Signatur

dilation_circle(Region : RegionDilation : Radius : )

Herror dilation_circle(const Hobject Region, Hobject* RegionDilation, double Radius)

Herror T_dilation_circle(const Hobject Region, Hobject* RegionDilation, const Htuple Radius)

void DilationCircle(const HObject& Region, HObject* RegionDilation, const HTuple& Radius)

HRegion HRegion::DilationCircle(const HTuple& Radius) const

HRegion HRegion::DilationCircle(double Radius) const

static void HOperatorSet.DilationCircle(HObject region, out HObject regionDilation, HTuple radius)

HRegion HRegion.DilationCircle(HTuple radius)

HRegion HRegion.DilationCircle(double radius)

Beschreibung

dilation_circledilation_circleDilationCircleDilationCircleDilationCircle führt eine Minkowski-Addition mit einer Kreismaske aus. Da die Kreismaske symmetrisch ist, ist dies identisch mit einer Dilatation. Die Größe des Kreises, der als strukturieredes Element verwendet wird, ist durch RadiusRadiusRadiusRadiusradius angegeben.

Die Wirkung dieser Funktion ist das Vergrößern der Region, die Glättung der Ränder, sowie das Verschließen von Löchern innerhalb der Region, die kleiner sind als die Kreismaske. Sinnvollerweise wird der RadiusRadiusRadiusRadiusradius auf Werte wie 3.5, 5.5 etc. gesetzt, um so Translationen der Region zu vermeiden. Bei ganzzahligen Radien hat der Kreis nämlich keinen ganzzahligen Schwerpunkt, der aber gerundet werden muss.

Achtung

dilation_circledilation_circleDilationCircleDilationCircleDilationCircle wird für jede Region einzeln angewandt. Sollen Lücken zwischen den Regionen geschlossen werden, dann muss vorher ein union1union1Union1Union1Union1 oder union2union2Union2Union2Union2 ausgeführt werden.

Ausführungsinformationen

Parameter

RegionRegionRegionRegionregion (input_object)  region(-array) objectHRegionHRegionHobject

Regionen auf die der Dilation-Operator angewandt wird.

RegionDilationRegionDilationRegionDilationRegionDilationregionDilation (output_object)  region(-array) objectHRegionHRegionHobject *

Regionen mit aufgefüllten Lücken.

RadiusRadiusRadiusRadiusradius (input_control)  real HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Radius der Kreismaske.

Defaultwert: 3.5

Wertevorschläge: 1.5, 2.5, 3.5, 4.5, 5.5, 7.5, 9.5, 12.5, 15.5, 19.5, 25.5, 33.5, 45.5, 60.5, 110.5

Typischer Wertebereich: 0.5 ≤ Radius Radius Radius Radius radius ≤ 511.5 (lin)

Minimale Schrittweite: 1.0

Empfohlene Schrittweite: 1.0

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

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

main()
{
  cout << "Reproduction of 'dilation_circle ()'" << endl;
  cout << "First = original image " << endl;
  cout << "Blue  = after dilation " << endl;
  cout << "Red   = before dilation " << endl;

  HByteImage img("monkey");
  HWindow    w;

  HRegion      circ   = HRegion::GenCircle (10, 10, 1.5);
  HRegionArray regs   = (img >= 128).Connection();
  HRegionArray minadd = regs.MinkowskiAdd1 (circ, 1);

                        img.Display (w);      w.Click ();
  w.SetColor ("blue");  minadd.Display (w);   w.Click ();
  w.SetColor ("red");   regs.Display (w);     w.Click ();

  return(0);
}

Beispiel (C)

my_dilation_circle(Hobject In, double Radius, Hobject *Out)
{
  Hobject Circle;
  gen_circle(&Circle,100.0,100.0,Radius);
  minkowski_add1(In,Circle,Out,1);
}

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

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

main()
{
  cout << "Reproduction of 'dilation_circle ()'" << endl;
  cout << "First = original image " << endl;
  cout << "Blue  = after dilation " << endl;
  cout << "Red   = before dilation " << endl;

  HByteImage img("monkey");
  HWindow    w;

  HRegion      circ   = HRegion::GenCircle (10, 10, 1.5);
  HRegionArray regs   = (img >= 128).Connection();
  HRegionArray minadd = regs.MinkowskiAdd1 (circ, 1);

                        img.Display (w);      w.Click ();
  w.SetColor ("blue");  minadd.Display (w);   w.Click ();
  w.SetColor ("red");   regs.Display (w);     w.Click ();

  return(0);
}

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

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

main()
{
  cout << "Reproduction of 'dilation_circle ()'" << endl;
  cout << "First = original image " << endl;
  cout << "Blue  = after dilation " << endl;
  cout << "Red   = before dilation " << endl;

  HByteImage img("monkey");
  HWindow    w;

  HRegion      circ   = HRegion::GenCircle (10, 10, 1.5);
  HRegionArray regs   = (img >= 128).Connection();
  HRegionArray minadd = regs.MinkowskiAdd1 (circ, 1);

                        img.Display (w);      w.Click ();
  w.SetColor ("blue");  minadd.Display (w);   w.Click ();
  w.SetColor ("red");   regs.Display (w);     w.Click ();

  return(0);
}

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

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

main()
{
  cout << "Reproduction of 'dilation_circle ()'" << endl;
  cout << "First = original image " << endl;
  cout << "Blue  = after dilation " << endl;
  cout << "Red   = before dilation " << endl;

  HByteImage img("monkey");
  HWindow    w;

  HRegion      circ   = HRegion::GenCircle (10, 10, 1.5);
  HRegionArray regs   = (img >= 128).Connection();
  HRegionArray minadd = regs.MinkowskiAdd1 (circ, 1);

                        img.Display (w);      w.Click ();
  w.SetColor ("blue");  minadd.Display (w);   w.Click ();
  w.SetColor ("red");   regs.Display (w);     w.Click ();

  return(0);
}

Komplexität

Sei F1 die Fläche einer Eingaberegion, dann ist die Laufzeitkomplexität für eine Region:

Ergebnis

Bei korrekter Parametrisierung liefert die Funktion dilation_circledilation_circleDilationCircleDilationCircleDilationCircle den Wert 2 (H_MSG_TRUE). Das Funktionsverhalten für die beiden Fälle leere und keine Eingaberegion lässt sich wie folgt kontrollieren:

Andernfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

thresholdthresholdThresholdThresholdThreshold, regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowing, connectionconnectionConnectionConnectionConnection, union1union1Union1Union1Union1, watershedswatershedsWatershedsWatershedsWatersheds, class_ndim_normclass_ndim_normClassNdimNormClassNdimNormClassNdimNorm

Nachfolger

reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain, select_shapeselect_shapeSelectShapeSelectShapeSelectShape, area_centerarea_centerAreaCenterAreaCenterAreaCenter, connectionconnectionConnectionConnectionConnection

Alternativen

minkowski_add1minkowski_add1MinkowskiAdd1MinkowskiAdd1MinkowskiAdd1, minkowski_add2minkowski_add2MinkowskiAdd2MinkowskiAdd2MinkowskiAdd2, expand_regionexpand_regionExpandRegionExpandRegionExpandRegion, dilation1dilation1Dilation1Dilation1Dilation1, dilation2dilation2Dilation2Dilation2Dilation2, dilation_rectangle1dilation_rectangle1DilationRectangle1DilationRectangle1DilationRectangle1

Siehe auch

gen_circlegen_circleGenCircleGenCircleGenCircle, erosion_circleerosion_circleErosionCircleErosionCircleErosionCircle, closing_circleclosing_circleClosingCircleClosingCircleClosingCircle, opening_circleopening_circleOpeningCircleOpeningCircleOpeningCircle

Modul

Foundation