KlassenKlassenKlassenKlassen | | | | Operatoren

circularitycircularityCircularitycircularityCircularityCircularity (Operator)

Name

circularitycircularityCircularitycircularityCircularityCircularity — Ermitteln des Formfaktors für die Kreisförmigkeit einer Region.

Signatur

circularity(Regions : : : Circularity)

Herror circularity(const Hobject Regions, double* Circularity)

Herror T_circularity(const Hobject Regions, Htuple* Circularity)

Herror circularity(Hobject Regions, double* Circularity)

Herror circularity(Hobject Regions, HTuple* Circularity)

double HRegion::Circularity() const

HTuple HRegionArray::Circularity() const

void Circularity(const HObject& Regions, HTuple* Circularity)

HTuple HRegion::Circularity() const

void HOperatorSetX.Circularity(
[in] IHUntypedObjectX* Regions, [out] VARIANT* Circularity)

VARIANT HRegionX.Circularity()

static void HOperatorSet.Circularity(HObject regions, out HTuple circularity)

HTuple HRegion.Circularity()

Beschreibung

circularitycircularityCircularitycircularityCircularityCircularity berechnet die Ähnlichkeit der Eingaberegion mit einem Kreis.

Berechnung:

Sei F die Fläche der Region und max der maximale Abstand vom Schwerpunkt zu allen Konturpunkten, dann ist der Formfaktor C definiert als:

C = min(1,C')

Der Formfaktor C ist bei einem Kreis gleich 1. Wenn die Region langgestreckt ist oder Hohlflächen hat, ist C kleiner als 1. circularitycircularityCircularitycircularityCircularityCircularity spricht besonders auf große Ausbuchtungen, Hohlflächen und nicht zusammenhängende Regionen an. Der Wert von C wird auf 1 begrenzt, weil die Pixel-Fläche einer Region nur eine Approximation der Fläche eines echten Kreises sein kann. Dieser Approximationsfehler ist umso größer, je kleiner die Region ist.

In der Dokumentation zu diesem Kapitel (Regionen / Merkmale) finden Sie ein Bild mit Regionen, die sich in ihrer Kreisförmigkeit unterscheiden.

Bei einer leeren Region liefert circularitycircularityCircularitycircularityCircularityCircularity (soweit kein anderes Verhalten festgelegt wurde (siehe set_systemset_systemSetSystemset_systemSetSystemSetSystem)) den Wert 0. Wird mehr als eine Region übergeben, dann werden die Zahlenwerte des Formfaktors in einem Tupel abgespeichert, wobei die Position eines Wertes in dem Tupel der Position der Region im Eingabetupel entspricht.

Parallelisierung

Parameter

RegionsRegionsRegionsRegionsRegionsregions (input_object)  region(-array) objectHRegionHRegionHRegionHRegionXHobject

Zu untersuchende Region(en).

CircularityCircularityCircularityCircularityCircularitycircularity (output_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Kreisförmigkeit der Eingaberegion(en).

Zusicherung: 0 <= Circularity && Circularity <= 1.0

Beispiel (HDevelop)

* Comparison between shape factors of rectangle, circle and ellipse:
gen_rectangle1(R1,10,10,20,20)
gen_rectangle2(R2,100,100,0.0,100,20)
gen_ellipse(E100,100,100,0.0,100,20)
gen_circle(C,100,100,20)
circularity(R1,M_R1)
circularity(R2,M_R2)
circularity(E100,M_E)
circularity(C,M_C)
fwrite_string(FileId,['quadrate:  ',M_R1])
fnew_line(FileId)
fwrite_string(FileId,['rectangle: ',M_R2])
fnew_line(FileId)
fwrite_string(FileId,['ellipse:   ',M_E])
fnew_line(FileId)
fwrite_string(FileId,['circle:    ',M_C])
fnew_line(FileId)

Beispiel (C)

/* Comparison between shape factors of rectangle, circle and ellipse */
gen_rectangle1(&R1,10.0,10.0,20.0,20.0);
gen_rectangle2(&R2,100.0,100.0,0.0,100.0,20.0);
gen_ellipse(&E,100.0,100.0,0.0,100.0,20.0);
gen_circle(&C,100.0,100.0,20.0);
circularity(R1,&R1_);
circularity(R2,&R2_);
circularity(E,&E_);
circularity(C,&C_);
printf("quadrate:   %g\n",R1_);
printf("rectangle:  %g\n",R2_);
printf("ellipse:    %g\n",E_);
printf("circle:     %g\n",C_);

Beispiel (HDevelop)

* Comparison between shape factors of rectangle, circle and ellipse:
gen_rectangle1(R1,10,10,20,20)
gen_rectangle2(R2,100,100,0.0,100,20)
gen_ellipse(E100,100,100,0.0,100,20)
gen_circle(C,100,100,20)
circularity(R1,M_R1)
circularity(R2,M_R2)
circularity(E100,M_E)
circularity(C,M_C)
fwrite_string(FileId,['quadrate:  ',M_R1])
fnew_line(FileId)
fwrite_string(FileId,['rectangle: ',M_R2])
fnew_line(FileId)
fwrite_string(FileId,['ellipse:   ',M_E])
fnew_line(FileId)
fwrite_string(FileId,['circle:    ',M_C])
fnew_line(FileId)

Beispiel (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[])
{
  if (argc < 2)
  {
    cout << "Usage: " << argv[0] << " <# of regions> " << endl;
    return (-1);
  }

  HWindow        w;
  HRegionArray   reg;

  int NumOfElements = atoi (argv[1]);

  cout << "Draw " << NumOfElements << " regions " << endl;

  for (int i=0; i < NumOfElements; i++)
  {
    reg[i] = w.DrawRegion ();
  }

  Tuple circ = reg.Circularity ();
  Tuple cont = reg.Contlength ();

  for (i = 0; i < NumOfElements; i++)
  {
    cout << "Circularity of " << i+1 << ". region = " << circ[i].D();
    cout << "\t\t Contour Length of" << i+1 <<
            ". region = " << cont[i].D() << endl;
  }

  w.Click ();
  return(0);
}

Beispiel (HDevelop)

* Comparison between shape factors of rectangle, circle and ellipse:
gen_rectangle1(R1,10,10,20,20)
gen_rectangle2(R2,100,100,0.0,100,20)
gen_ellipse(E100,100,100,0.0,100,20)
gen_circle(C,100,100,20)
circularity(R1,M_R1)
circularity(R2,M_R2)
circularity(E100,M_E)
circularity(C,M_C)
fwrite_string(FileId,['quadrate:  ',M_R1])
fnew_line(FileId)
fwrite_string(FileId,['rectangle: ',M_R2])
fnew_line(FileId)
fwrite_string(FileId,['ellipse:   ',M_E])
fnew_line(FileId)
fwrite_string(FileId,['circle:    ',M_C])
fnew_line(FileId)

Beispiel (HDevelop)

* Comparison between shape factors of rectangle, circle and ellipse:
gen_rectangle1(R1,10,10,20,20)
gen_rectangle2(R2,100,100,0.0,100,20)
gen_ellipse(E100,100,100,0.0,100,20)
gen_circle(C,100,100,20)
circularity(R1,M_R1)
circularity(R2,M_R2)
circularity(E100,M_E)
circularity(C,M_C)
fwrite_string(FileId,['quadrate:  ',M_R1])
fnew_line(FileId)
fwrite_string(FileId,['rectangle: ',M_R2])
fnew_line(FileId)
fwrite_string(FileId,['ellipse:   ',M_E])
fnew_line(FileId)
fwrite_string(FileId,['circle:    ',M_C])
fnew_line(FileId)

Ergebnis

circularitycircularityCircularitycircularityCircularityCircularity liefert den Wert 2 (H_MSG_TRUE), falls die Eingabe nicht leer ist. Das Verhalten bei leerer Eingabe (keine Eingaberegionen vorhanden) lässt sich mittels 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>) festlegen. Das Verhalten bei einer leeren Region (Region ist die leere Menge) wird mit 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>) bestimmt. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

thresholdthresholdThresholdthresholdThresholdThreshold, regiongrowingregiongrowingRegiongrowingregiongrowingRegiongrowingRegiongrowing, connectionconnectionConnectionconnectionConnectionConnection

Alternativen

roundnessroundnessRoundnessroundnessRoundnessRoundness, compactnesscompactnessCompactnesscompactnessCompactnessCompactness, convexityconvexityConvexityconvexityConvexityConvexity, eccentricityeccentricityEccentricityeccentricityEccentricityEccentricity

Siehe auch

area_centerarea_centerAreaCenterarea_centerAreaCenterAreaCenter, select_shapeselect_shapeSelectShapeselect_shapeSelectShapeSelectShape

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren