elliptic_axiselliptic_axisEllipticAxisEllipticAxis (Operator)

Name

elliptic_axiselliptic_axisEllipticAxisEllipticAxis — Ermitteln der Parameter der äquivalenten Ellipse.

Signatur

elliptic_axis(Regions : : : Ra, Rb, Phi)

Herror elliptic_axis(const Hobject Regions, double* Ra, double* Rb, double* Phi)

Herror T_elliptic_axis(const Hobject Regions, Htuple* Ra, Htuple* Rb, Htuple* Phi)

void EllipticAxis(const HObject& Regions, HTuple* Ra, HTuple* Rb, HTuple* Phi)

HTuple HRegion::EllipticAxis(HTuple* Rb, HTuple* Phi) const

double HRegion::EllipticAxis(double* Rb, double* Phi) const

static void HOperatorSet.EllipticAxis(HObject regions, out HTuple ra, out HTuple rb, out HTuple phi)

HTuple HRegion.EllipticAxis(out HTuple rb, out HTuple phi)

double HRegion.EllipticAxis(out double rb, out double phi)

Beschreibung

Der Operator elliptic_axiselliptic_axisEllipticAxisEllipticAxisEllipticAxis berechnet die Radien RaRaRaRara und RbRbRbRbrb sowie die Orientierung PhiPhiPhiPhiphi der äquivalenten Ellipse mit der gleichen Orientierung und dem gleichen Seitenverhältnis wie die Eingaberegion RegionsRegionsRegionsRegionsregions. Mehrere Eingaberegionen können in Form eines Tupels übergeben werden. RaRaRaRara repräsentiert die Länge des Hauptradius der Ellipse während der Radius RbRbRbRbrb den Nebenradius der Ellipse repräsentiert. Die Orientierung der Hauptachse bezüglich der x-Achse wird im Winkel PhiPhiPhiPhiphi zurückgegeben und ist im Bogenmaß angegeben. Die Hauptachse der Ellipse entspricht der Hauptachse des Trägheitsmoments der Eingaberegion.

In der Dokumentation zu diesem Kapitel (Regionen / Merkmale) finden Sie ein Bild mit Regionen, die sich in PhiPhiPhiPhiphi, RaRaRaRara und RbRbRbRbrb unterscheiden.

Berechnung:

Seien die Momente , und normiert auf die Fläche gegeben (siehe moments_region_2ndmoments_region_2ndMomentsRegion2ndMomentsRegion2ndMomentsRegion2nd), dann berechnen sich die Radien RaRaRaRara und RbRbRbRbrb zu:

Die Orientierung PhiPhiPhiPhiphi ist definiert durch:

Wird mehr als eine Region übergeben, werden die Ergebnisse in Form von Tupeln zurückgeliefert, wobei der Index eines Tupelelements dem Index der zugehörigen Eingabregion entspricht.

Wird eine leere Region übergeben, haben alle Parameter den Wert 0.0, soweit kein anderes Verhalten eingestellt wurde (siehe 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>)).

Achtung

Es ist zu beachten, dass, wie bei allen regionenmomentenbasierten Operatoren, die Pixel als mathematische Punkte ohne flächenhafte Ausdehnung betrachtet werden, die durch die Mitte des jeweiligen Pixels gegeben sind. Daraus folgt, dass RaRaRaRara und RbRbRbRbrb auch den Wert 0 annehmen können. Für eine leere Region und eine Region, die aus genau einem Punkt besteht, wird folglich RaRaRaRara = RbRbRbRbrb = 0 zurückgeliefert. Weiterhin wird für Regionen, deren Punkte genau auf einer Geraden liegen (also z.B. ein Pixel hohe horizontale Regionen oder ein Pixel breite vertikale Regionen) RbRbRbRbrb = 0 zurückgeliefert.

Ausführungsinformationen

Parameter

RegionsRegionsRegionsRegionsregions (input_object)  region(-array) objectHRegionHRegionHobject

Eingaberegion(en).

RaRaRaRara (output_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Hauptradius (normiert auf die Fläche).

Zusicherung: Ra >= 0.0

RbRbRbRbrb (output_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Nebenradius (normiert auf die Fläche).

Zusicherung: Rb >= 0.0 && Rb <= Ra

PhiPhiPhiPhiphi (output_control)  angle.rad(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Winkel zwischen Hauptradius und x-Achse im Bogenmaß.

Zusicherung: - pi / 2 < Phi && Phi <= pi / 2

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
elliptic_axis(Seg,Ra,Rb,Phi)
area_center(Seg,_,Row,Column)
gen_ellipse(Ellipses,Row,Column,Phi,Ra,Rb)
dev_set_draw('margin')
dev_display(Ellipses)

Beispiel (C)

read_image(&Image,"fabrik");
regiongrowing(Image,&Seg,5,5,6.0,100);
T_elliptic_axis(Seg,&Ra,&Rb,&Phi);
T_area_center(Seg,NULL,&Row,&Column);
T_gen_ellipse(&Ellipses,Row,Column,Phi,Ra,Rb);

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
elliptic_axis(Seg,Ra,Rb,Phi)
area_center(Seg,_,Row,Column)
gen_ellipse(Ellipses,Row,Column,Phi,Ra,Rb)
dev_set_draw('margin')
dev_display(Ellipses)

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
elliptic_axis(Seg,Ra,Rb,Phi)
area_center(Seg,_,Row,Column)
gen_ellipse(Ellipses,Row,Column,Phi,Ra,Rb)
dev_set_draw('margin')
dev_display(Ellipses)

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
elliptic_axis(Seg,Ra,Rb,Phi)
area_center(Seg,_,Row,Column)
gen_ellipse(Ellipses,Row,Column,Phi,Ra,Rb)
dev_set_draw('margin')
dev_display(Ellipses)

Komplexität

Sei F die Fläche einer Region, dann beträgt die Laufzeitkomplexität im Mittel O(sqrt(F)).

Ergebnis

elliptic_axiselliptic_axisEllipticAxisEllipticAxisEllipticAxis 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

Nachfolger

gen_ellipsegen_ellipseGenEllipseGenEllipseGenEllipse

Alternativen

smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2, orientation_regionorientation_regionOrientationRegionOrientationRegionOrientationRegion

Siehe auch

moments_region_2ndmoments_region_2ndMomentsRegion2ndMomentsRegion2ndMomentsRegion2nd, select_shapeselect_shapeSelectShapeSelectShapeSelectShape, set_shapeset_shapeSetShapeSetShapeSetShape

Literatur

R. Haralick, L. Shapiro „Computer and Robot Vision“ Addison-Wesley, 1992, pp. 73-75

Modul

Foundation