area_centerarea_centerAreaCenterAreaCenter (Operator)
Name
area_centerarea_centerAreaCenterAreaCenter
— Ermitteln der Fläche und des Schwerpunkts von Regionen.
Signatur
Beschreibung
area_centerarea_centerAreaCenterAreaCenterAreaCenter
berechnet die Fläche und den Schwerpunkt
der Eingaberegionen. Die Fläche ist definiert als die Anzahl von
Bildpunkten einer Region. Der Schwerpunkt berechnet sich als der
Mittelwert der Zeilen- bzw. Spaltenkoordinaten aller Punkte.
In der Dokumentation zu diesem Kapitel (Regionen / Merkmale) finden
Sie ein Bild mit Regionen, die sich in ihrer Fläche unterscheiden.
Wird mehr als eine Region übergeben, dann werden die Ergebnisse in
Tupeln abgespeichert, wobei der Index eines Wertes in dem Tupel
dem Index der Region in der Eingabe entspricht.
Bei leerer Region haben alle Parameter den Wert 0.0, soweit kein
anderes Verhalten eingestellt wurde (siehe set_systemset_systemSetSystemSetSystemSetSystem
).
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
Parameter
RegionsRegionsRegionsRegionsregions
(input_object) region(-array) →
objectHRegionHRegionHobject
Zu untersuchende Region(en).
AreaAreaAreaAreaarea
(output_control) integer(-array) →
HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Fläche der Region.
RowRowRowRowrow
(output_control) point.y(-array) →
HTupleHTupleHtuple (real) (double) (double) (double)
Zeilenindex des Schwerpunktes.
ColumnColumnColumnColumncolumn
(output_control) point.x(-array) →
HTupleHTupleHtuple (real) (double) (double) (double)
Spaltenindex des Schwerpunktes.
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;
main()
{
Tuple area, row, column;
HImage img ("monkey");
HWindow w;
img.Display (w);
w.Click ();
HRegionArray reg = (img >= 164).Connection ();
reg.Display (w);
w.Click ();
area = reg.AreaCenter (&row, &column);
for (int i = 0; i < reg.Num (); i++)
{
cout << "Row [" << i << "]" << "= " << row[i].D ();
cout << "\t\tColumn [" << i << "]" << "= " << column[i].D () << endl;
}
cout << "Total number of regions: " << reg.Num () << endl;
return(0);
}
Beispiel (C)
threshold(&Image,&Seg,120.0,255.0);
connection(Seg,&Connected);
T_area_center(Connected,&Area,&Row,&Column);
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;
main()
{
Tuple area, row, column;
HImage img ("monkey");
HWindow w;
img.Display (w);
w.Click ();
HRegionArray reg = (img >= 164).Connection ();
reg.Display (w);
w.Click ();
area = reg.AreaCenter (&row, &column);
for (int i = 0; i < reg.Num (); i++)
{
cout << "Row [" << i << "]" << "= " << row[i].D ();
cout << "\t\tColumn [" << i << "]" << "= " << column[i].D () << endl;
}
cout << "Total number of regions: " << reg.Num () << endl;
return(0);
}
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;
main()
{
Tuple area, row, column;
HImage img ("monkey");
HWindow w;
img.Display (w);
w.Click ();
HRegionArray reg = (img >= 164).Connection ();
reg.Display (w);
w.Click ();
area = reg.AreaCenter (&row, &column);
for (int i = 0; i < reg.Num (); i++)
{
cout << "Row [" << i << "]" << "= " << row[i].D ();
cout << "\t\tColumn [" << i << "]" << "= " << column[i].D () << endl;
}
cout << "Total number of regions: " << reg.Num () << endl;
return(0);
}
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;
main()
{
Tuple area, row, column;
HImage img ("monkey");
HWindow w;
img.Display (w);
w.Click ();
HRegionArray reg = (img >= 164).Connection ();
reg.Display (w);
w.Click ();
area = reg.AreaCenter (&row, &column);
for (int i = 0; i < reg.Num (); i++)
{
cout << "Row [" << i << "]" << "= " << row[i].D ();
cout << "\t\tColumn [" << i << "]" << "= " << column[i].D () << endl;
}
cout << "Total number of regions: " << reg.Num () << endl;
return(0);
}
Komplexität
Sei F die Fläche einer Region, dann beträgt die
Laufzeitkomplexität im Mittel O(sqrt(F)).
Ergebnis
area_centerarea_centerAreaCenterAreaCenterAreaCenter
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>)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>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)
bestimmt.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
Vorgänger
thresholdthresholdThresholdThresholdThreshold
,
regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowing
,
connectionconnectionConnectionConnectionConnection
Siehe auch
select_shapeselect_shapeSelectShapeSelectShapeSelectShape
Modul
Foundation