inner_circleinner_circleInnerCircleInnerCircle (Operator)

Name

inner_circleinner_circleInnerCircleInnerCircle — 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)

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

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