inner_circleinner_circleInnerCircleInnerCircleinner_circle (Operator)
Name
inner_circleinner_circleInnerCircleInnerCircleinner_circle — Ermitteln des größten Inkreises einer Region.
Signatur
def inner_circle(regions: HObject) -> Tuple[Sequence[float], Sequence[float], Sequence[float]]
def inner_circle_s(regions: HObject) -> Tuple[float, float, float]
Beschreibung
inner_circleinner_circleInnerCircleInnerCircleInnerCircleinner_circle bestimmt den größten Inkreis einer Region.
Das ist die größte diskrete Kreisregion, die vollständig in die
Eingangsregion passt.
Für diesen Kreis werden der Mittelpunkt (RowRowRowRowrowrow,
ColumnColumnColumnColumncolumncolumn) und der Radius (RadiusRadiusRadiusRadiusradiusradius) bestimmt.
Ist die Position des Kreises nicht eindeutig definiert, wird die
"erste mögliche" Position (das ist soweit links oben, wie möglich)
zurückgeliefert.
In der Dokumentation zu diesem Kapitel (Regionen / Merkmale) finden
Sie ein Bild mit Regionen, die sich im Durchmesser ihrer Inkreise
unterscheiden.
Die Ausgabe von inner_circleinner_circleInnerCircleInnerCircleInnerCircleinner_circle ist so gewählt, dass sie als
Eingabe für die HALCON-Operatoren disp_circledisp_circleDispCircleDispCircleDispCircledisp_circle,
gen_circlegen_circleGenCircleGenCircleGenCirclegen_circle und gen_ellipse_contour_xldgen_ellipse_contour_xldGenEllipseContourXldGenEllipseContourXldGenEllipseContourXldgen_ellipse_contour_xld verwendet
werden kann.
Werden mehrere Regionen in RegionsRegionsRegionsRegionsregionsregions übergeben, werden die
Ausgabeparameter als Tupel zurückgegeben.
Ist die Eingaberegion leer, haben alle Parameter den Wert
0.0, soweit mit set_systemset_systemSetSystemSetSystemSetSystemset_system kein anderes Verhalten
eingestellt wurde.
Achtung
Wenn mehrere Inkreise bei einer Region vorhanden sind,
wird nur die Lösung, die am weitesten links oben ist, zurückgegeben.
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
RegionsRegionsRegionsRegionsregionsregions (input_object) region(-array) → objectHRegionHObjectHRegionHobject
Zu untersuchende Regionen.
RowRowRowRowrowrow (output_control) circle.center.y(-array) → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Zeilenindex des Mittelpunktes.
ColumnColumnColumnColumncolumncolumn (output_control) circle.center.x(-array) → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Spaltenindex des Mittelpunktes.
RadiusRadiusRadiusRadiusradiusradius (output_control) circle.radius(-array) → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Radius des Inkreises.
Zusicherung: Radius >= 0
Beispiel (HDevelop)
read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
select_shape(Seg,H,'area','and',100,2000)
inner_circle(H,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_set_draw('margin')
dev_display(Circles)
Beispiel (C)
read_image(&Image,"fabrik");
regiongrowing(Image,&Seg,5,5,6.0,100);
select_shape(Seg,&H,"area","and",100.0,2000.0);
T_inner_circle(H,&Row,&Column,&Radius);
T_gen_circle(&Circles,Row,Column,Radius);
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[])
{
Tuple row, col, rad;
HImage img (argv[1]);
HWindow w;
img.Display (w);
HRegionArray reg = img.Regiongrowing (5, 5, 6.0, 100);
HRegionArray seg = reg.SelectShape ("area", "and", 100.0, 1000.0);
row = seg.InnerCircle (&col, &rad);
HRegionArray circ = HRegionArray::GenCircle (row, col, rad);
w.SetDraw ("margin");
w.SetColor ("green"); reg.Display (w);
w.SetColor ("blue"); seg.Display (w);
w.SetColor ("red"); circ.Display (w);
w.Click ();
return(0);
}
Beispiel (HDevelop)
read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
select_shape(Seg,H,'area','and',100,2000)
inner_circle(H,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_set_draw('margin')
dev_display(Circles)
Beispiel (HDevelop)
read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
select_shape(Seg,H,'area','and',100,2000)
inner_circle(H,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_set_draw('margin')
dev_display(Circles)
Komplexität
Sei F die Fläche der Region und R der Radius des
Inkreises, dann beträgt die Laufzeitkomplexität O(sqrt(F) * R).
Ergebnis
inner_circleinner_circleInnerCircleInnerCircleInnerCircleinner_circle 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>)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>)set_system("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)set_system("empty_region_result",<Result>) bestimmt.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
Vorgänger
thresholdthresholdThresholdThresholdThresholdthreshold,
regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowingregiongrowing,
connectionconnectionConnectionConnectionConnectionconnection,
runlength_featuresrunlength_featuresRunlengthFeaturesRunlengthFeaturesRunlengthFeaturesrunlength_features
Nachfolger
gen_circlegen_circleGenCircleGenCircleGenCirclegen_circle,
disp_circledisp_circleDispCircleDispCircleDispCircledisp_circle
Alternativen
erosion_circleerosion_circleErosionCircleErosionCircleErosionCircleerosion_circle,
inner_rectangle1inner_rectangle1InnerRectangle1InnerRectangle1InnerRectangle1inner_rectangle1
Siehe auch
set_shapeset_shapeSetShapeSetShapeSetShapeset_shape,
select_shapeselect_shapeSelectShapeSelectShapeSelectShapeselect_shape,
smallest_circlesmallest_circleSmallestCircleSmallestCircleSmallestCirclesmallest_circle
Modul
Foundation