inner_circleinner_circleInnerCircleInnerCircleinner_circle (Operator)

Name

inner_circleinner_circleInnerCircleInnerCircleinner_circle — Ermitteln des größten Inkreises einer Region.

Signatur

inner_circle(Regions : : : Row, Column, Radius)

Herror inner_circle(const Hobject Regions, double* Row, double* Column, double* Radius)

Herror T_inner_circle(const Hobject Regions, Htuple* Row, Htuple* Column, Htuple* Radius)

void InnerCircle(const HObject& Regions, HTuple* Row, HTuple* Column, HTuple* Radius)

void HRegion::InnerCircle(HTuple* Row, HTuple* Column, HTuple* Radius) const

void HRegion::InnerCircle(double* Row, double* Column, double* Radius) const

static void HOperatorSet.InnerCircle(HObject regions, out HTuple row, out HTuple column, out HTuple radius)

void HRegion.InnerCircle(out HTuple row, out HTuple column, out HTuple radius)

void HRegion.InnerCircle(out double row, out double column, out double radius)

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

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 (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_circleInnerCircleInnerCircleInnerCircleinner_circle liefert den Wert 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