inner_circleinner_circleInnerCircleInnerCircle (Operator)
Name
inner_circleinner_circleInnerCircleInnerCircle
— Ermitteln des größten Inkreises einer Region.
Signatur
Beschreibung
inner_circleinner_circleInnerCircleInnerCircleInnerCircle
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 (RowRowRowRowrow
,
ColumnColumnColumnColumncolumn
) und der Radius (RadiusRadiusRadiusRadiusradius
) 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_circleInnerCircleInnerCircleInnerCircle
ist so gewählt, dass sie als
Eingabe für die HALCON-Operatoren disp_circledisp_circleDispCircleDispCircleDispCircle
,
gen_circlegen_circleGenCircleGenCircleGenCircle
und gen_ellipse_contour_xldgen_ellipse_contour_xldGenEllipseContourXldGenEllipseContourXldGenEllipseContourXld
verwendet
werden kann.
Werden mehrere Regionen in RegionsRegionsRegionsRegionsregions
übergeben, werden die
Ausgabeparameter als Tupel zurückgegeben.
Ist die Eingaberegion leer, haben alle Parameter den Wert
0.0, soweit mit set_systemset_systemSetSystemSetSystemSetSystem
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
RegionsRegionsRegionsRegionsregions
(input_object) region(-array) →
objectHRegionHRegionHobject
Zu untersuchende Regionen.
RowRowRowRowrow
(output_control) circle.center.y(-array) →
HTupleHTupleHtuple (real) (double) (double) (double)
Zeilenindex des Mittelpunktes.
ColumnColumnColumnColumncolumn
(output_control) circle.center.x(-array) →
HTupleHTupleHtuple (real) (double) (double) (double)
Spaltenindex des Mittelpunktes.
RadiusRadiusRadiusRadiusradius
(output_control) circle.radius(-array) →
HTupleHTupleHtuple (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 (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)
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_circleInnerCircleInnerCircleInnerCircle
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
,
runlength_featuresrunlength_featuresRunlengthFeaturesRunlengthFeaturesRunlengthFeatures
Nachfolger
gen_circlegen_circleGenCircleGenCircleGenCircle
,
disp_circledisp_circleDispCircleDispCircleDispCircle
Alternativen
erosion_circleerosion_circleErosionCircleErosionCircleErosionCircle
,
inner_rectangle1inner_rectangle1InnerRectangle1InnerRectangle1InnerRectangle1
Siehe auch
set_shapeset_shapeSetShapeSetShapeSetShape
,
select_shapeselect_shapeSelectShapeSelectShapeSelectShape
,
smallest_circlesmallest_circleSmallestCircleSmallestCircleSmallestCircle
Modul
Foundation