circularitycircularityCircularityCircularitycircularity 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.
circularitycircularityCircularityCircularitycircularity 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 circularitycircularityCircularityCircularitycircularity (soweit kein anderes
Verhalten festgelegt wurde (siehe set_systemset_systemSetSystemSetSystemset_system)) 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.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
* 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 (C++)
#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)
Ergebnis
circularitycircularityCircularityCircularitycircularity 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>)
festlegen.
Das Verhalten bei einer leeren Region (Region ist die leere Menge)
wird mit set_system('empty_region_result',<Result>) bestimmt.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.