smallest_circlesmallest_circleSmallestCircleSmallestCirclesmallest_circle (Operator)

Name

smallest_circlesmallest_circleSmallestCircleSmallestCirclesmallest_circle — Ermitteln des kleinsten umschließenden Kreises einer Region.

Signatur

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

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

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

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

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

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

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

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

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

def smallest_circle(regions: HObject) -> Tuple[Sequence[float], Sequence[float], Sequence[float]]

def smallest_circle_s(regions: HObject) -> Tuple[float, float, float]

Beschreibung

smallest_circlesmallest_circleSmallestCircleSmallestCircleSmallestCirclesmallest_circle bestimmt den kleinsten umschließenden Kreis einer Region, also den Kreis mit dem kleinsten Flächeninhalt unter allen Kreisen, die die Region enthalten. Für diesen Kreis werden der Mittelpunkt (RowRowRowRowrowrow,ColumnColumnColumnColumncolumncolumn) und der Radius (RadiusRadiusRadiusRadiusradiusradius) berechnet. Der Operator findet Anwendung, wenn z.B. die Lage und Größe von kreisförmigen Objekten (z.B. Münzen) bestimmt werden soll, die aber aufgrund schlechter Segmentierung im Inneren nicht homogen sind oder unterbrochene Ränder besitzen. Die Ausgabe des Operators ist so gewählt, dass sie als Eingabe für die Operatoren disp_circledisp_circleDispCircleDispCircleDispCircledisp_circle und gen_circlegen_circleGenCircleGenCircleGenCirclegen_circle verwendet werden kann.

In der Dokumentation zu diesem Kapitel (Regionen / Merkmale) finden Sie ein Bild mit Regionen, die sich in ihren minimalen und maximalen Radien unterscheiden.

Werden mehrere Regionen in RegionsRegionsRegionsRegionsregionsregions übergeben, so werden entsprechende Tupel als Ausgabeparameter zurückgegeben. Bei leerer Region haben alle Parameter den Wert 0.0, soweit kein anderes Verhalten eingestellt wurde (siehe set_systemset_systemSetSystemSetSystemSetSystemset_system).

Achtung

Intern erfolgt die Berechnung basierend auf den Mittelpunktskoordinaten der Regionenpixel. Um zu berücksichtigen, dass Pixel im Regionenfall eigentlich flächenhaft zu interpretieren sind, wird der berechnete Radius zum Schluss noch um 0.5 vergrößert. Dies gibt in den meisten Fällen ein gutes Ergebnis, im ungünstigsten Fall (Pixeldiagonale) ist diese Vergrößerung allerdings nicht ausreichend. Wollte man sicherstellen, dass der Umriss der Eingaberegion komplett innerhalb des Kreises liegt, müsste man anstatt 0.5 addieren. Folglich müsste der in RadiusRadiusRadiusRadiusradiusradius zurückgegebene Wert um korrigiert werden. Dies wäre allerdings auch nur eine obere Abschätzung, d.h. der Kreis mit dem korrigierten Radius wäre in den meisten Fällen etwas zu groß.

Kleinster umschließender Kreis einer Region. Es ist zu beachten, dass die Berechnung auf den Pixelmittelpunkten basiert und zu dem daraus berechneten Radius 0.5 addiert wird.

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 umschließenden Kreises.

Zusicherung: Radius >= 0

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Regions,5,5,6,100)
select_shape(Regions,SelectedRegions,'area','and',100,2000)
smallest_circle(SelectedRegions,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_display (Circles)

Beispiel (C)

read_image(&Image,"fabrik");
regiongrowing(Image,&Regions,5,5,6.0,100);
select_shape(Regions,&SelectedRegions,"area","and",100.0,2000.0);
T_smallest_circle(SelectedRegions,&Row,&Column,&Radius);
T_gen_circle(&Circles,Row,Column,Radius);

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Regions,5,5,6,100)
select_shape(Regions,SelectedRegions,'area','and',100,2000)
smallest_circle(SelectedRegions,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_display (Circles)

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Regions,5,5,6,100)
select_shape(Regions,SelectedRegions,'area','and',100,2000)
smallest_circle(SelectedRegions,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_display (Circles)

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Regions,5,5,6,100)
select_shape(Regions,SelectedRegions,'area','and',100,2000)
smallest_circle(SelectedRegions,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_display (Circles)

Komplexität

Sei F die Fläche der Region dann beträgt die Laufzeitkomplexität O(sqrt(F)).

Ergebnis

smallest_circlesmallest_circleSmallestCircleSmallestCircleSmallestCirclesmallest_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

elliptic_axiselliptic_axisEllipticAxisEllipticAxisEllipticAxiselliptic_axis, smallest_rectangle1smallest_rectangle1SmallestRectangle1SmallestRectangle1SmallestRectangle1smallest_rectangle1, smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2smallest_rectangle2

Siehe auch

set_shapeset_shapeSetShapeSetShapeSetShapeset_shape, select_shapeselect_shapeSelectShapeSelectShapeSelectShapeselect_shape, inner_circleinner_circleInnerCircleInnerCircleInnerCircleinner_circle

Modul

Foundation