KlassenKlassenKlassenKlassen | | | | Operatoren

elliptic_axis_points_xldelliptic_axis_points_xldEllipticAxisPointsXldelliptic_axis_points_xldEllipticAxisPointsXldEllipticAxisPointsXld (Operator)

Name

elliptic_axis_points_xldelliptic_axis_points_xldEllipticAxisPointsXldelliptic_axis_points_xldEllipticAxisPointsXldEllipticAxisPointsXld — Parameter der äquivalenten Ellipse von Konturen oder Polygonen, die wie Punktwolken behandelt werden.

Signatur

elliptic_axis_points_xld(XLD : : : Ra, Rb, Phi)

Herror elliptic_axis_points_xld(const Hobject XLD, double* Ra, double* Rb, double* Phi)

Herror T_elliptic_axis_points_xld(const Hobject XLD, Htuple* Ra, Htuple* Rb, Htuple* Phi)

Herror elliptic_axis_points_xld(Hobject XLD, double* Ra, double* Rb, double* Phi)

Herror elliptic_axis_points_xld(Hobject XLD, HTuple* Ra, HTuple* Rb, HTuple* Phi)

double HXLD::EllipticAxisPointsXld(double* Rb, double* Phi) const

HTuple HXLDArray::EllipticAxisPointsXld(HTuple* Rb, HTuple* Phi) const

void EllipticAxisPointsXld(const HObject& XLD, HTuple* Ra, HTuple* Rb, HTuple* Phi)

HTuple HXLD::EllipticAxisPointsXld(HTuple* Rb, HTuple* Phi) const

double HXLD::EllipticAxisPointsXld(double* Rb, double* Phi) const

void HOperatorSetX.EllipticAxisPointsXld(
[in] IHUntypedObjectX* XLD, [out] VARIANT* Ra, [out] VARIANT* Rb, [out] VARIANT* Phi)

VARIANT HXLDX.EllipticAxisPointsXld(
[out] VARIANT* Rb, [out] VARIANT* Phi)

VARIANT HXLDContX.EllipticAxisPointsXld(
[out] VARIANT* Rb, [out] VARIANT* Phi)

VARIANT HXLDPolyX.EllipticAxisPointsXld(
[out] VARIANT* Rb, [out] VARIANT* Phi)

VARIANT HXLDParaX.EllipticAxisPointsXld(
[out] VARIANT* Rb, [out] VARIANT* Phi)

VARIANT HXLDModParaX.EllipticAxisPointsXld(
[out] VARIANT* Rb, [out] VARIANT* Phi)

VARIANT HXLDExtParaX.EllipticAxisPointsXld(
[out] VARIANT* Rb, [out] VARIANT* Phi)

static void HOperatorSet.EllipticAxisPointsXld(HObject XLD, out HTuple ra, out HTuple rb, out HTuple phi)

HTuple HXLD.EllipticAxisPointsXld(out HTuple rb, out HTuple phi)

double HXLD.EllipticAxisPointsXld(out double rb, out double phi)

Beschreibung

elliptic_axis_points_xldelliptic_axis_points_xldEllipticAxisPointsXldelliptic_axis_points_xldEllipticAxisPointsXldEllipticAxisPointsXld berechnet die Radien (RaRaRaRaRara, RbRbRbRbRbrb) und die Orientierungen (PhiPhiPhiPhiPhiphi, im Bogenmaß) der Ellipsen, die die gleiche Orientierung und das gleiche Seitenverhältnis wie die von den Eingabekonturen oder -polygonen definierten Punktwolken haben. (d.h. die Reihenfolge der Kontur- oder Polygonpunkte wird nicht berücksichtigt). Bei geschlossenen Konturen oder Polygonen (Anfangspunkt = Endpunkt) wird der Endpunkt der Kontur oder des Polygons nicht berücksichtigt, da er sonst doppeltes Gewicht erhielte.

Berechnung: Seien die Momente , und normiert auf die Fläche gegeben (siehe moments_points_xldmoments_points_xldMomentsPointsXldmoments_points_xldMomentsPointsXldMomentsPointsXld),dann berechnen sich die Länge der Hauptachse RaRaRaRaRara und die Länge der Nebenachse RbRbRbRbRbrb zu:

Die Orientierung PhiPhiPhiPhiPhiphi, also der Winkel zwischen der Hauptachse und der x- bzw. Spaltenachse, ist definiert durch:

elliptic_axis_points_xldelliptic_axis_points_xldEllipticAxisPointsXldelliptic_axis_points_xldEllipticAxisPointsXldEllipticAxisPointsXld sollte dann verwendet werden, wenn die Kontur XLDXLDXLDXLDXLDXLD entweder nicht kreuzungsfrei ist oder nicht kreuzungsfrei durch eine Line vom End- zum Anfangspunkt geschlossen werden kann. In diesem Fall liefert elliptic_axis_xldelliptic_axis_xldEllipticAxisXldelliptic_axis_xldEllipticAxisXldEllipticAxisXld keine sinnvollen Ergebnisse. Ob sich die Konturen oder Polygone selbst schneiden, kann leicht mit test_self_intersection_xldtest_self_intersection_xldTestSelfIntersectionXldtest_self_intersection_xldTestSelfIntersectionXldTestSelfIntersectionXld überprüft werden.

Wird mehr als eine Kontur oder ein Polygon übergeben, dann werden die Ergebnisse in Tupeln in der gleichen Reihenfolge wie die entsprechenden Konturen bzw. Polygone in XLDXLDXLDXLDXLDXLD abgespeichert.

Parallelisierung

Parameter

XLDXLDXLDXLDXLDXLD (input_object)  xld(-array) objectHXLDHXLDHXLDHXLDXHobject

Zu untersuchende Konturen bzw. Polygone.

RaRaRaRaRara (output_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Hauptradius.

Zusicherung: Ra >= 0.0

RbRbRbRbRbrb (output_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Nebenradius.

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

PhiPhiPhiPhiPhiphi (output_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Winkel zwischen Hauptachse und Spalten-Achse (Bogenmaß).

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

Komplexität

Sei n die Anzahl der Punkte in der Kontur bzw. dem Polygon. Dann ist die Laufzeit O(n).

Ergebnis

elliptic_axis_points_xldelliptic_axis_points_xldEllipticAxisPointsXldelliptic_axis_points_xldEllipticAxisPointsXldEllipticAxisPointsXld liefert den Wert 2 (H_MSG_TRUE), falls die Eingabe nicht leer ist. Das Verhalten bei leerer Eingabe lässt sich mittels set_system(::'no_object_result',<Result>:)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

gen_contours_skeleton_xldgen_contours_skeleton_xldGenContoursSkeletonXldgen_contours_skeleton_xldGenContoursSkeletonXldGenContoursSkeletonXld, edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix, threshold_sub_pixthreshold_sub_pixThresholdSubPixthreshold_sub_pixThresholdSubPixThresholdSubPix, gen_contour_polygon_xldgen_contour_polygon_xldGenContourPolygonXldgen_contour_polygon_xldGenContourPolygonXldGenContourPolygonXld, test_self_intersection_xldtest_self_intersection_xldTestSelfIntersectionXldtest_self_intersection_xldTestSelfIntersectionXldTestSelfIntersectionXld

Nachfolger

area_center_points_xldarea_center_points_xldAreaCenterPointsXldarea_center_points_xldAreaCenterPointsXldAreaCenterPointsXld, gen_ellipse_contour_xldgen_ellipse_contour_xldGenEllipseContourXldgen_ellipse_contour_xldGenEllipseContourXldGenEllipseContourXld

Alternativen

elliptic_axis_xldelliptic_axis_xldEllipticAxisXldelliptic_axis_xldEllipticAxisXldEllipticAxisXld, smallest_rectangle2smallest_rectangle2SmallestRectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2

Siehe auch

moments_xldmoments_xldMomentsXldmoments_xldMomentsXldMomentsXld, smallest_circle_xldsmallest_circle_xldSmallestCircleXldsmallest_circle_xldSmallestCircleXldSmallestCircleXld, smallest_rectangle1_xldsmallest_rectangle1_xldSmallestRectangle1Xldsmallest_rectangle1_xldSmallestRectangle1XldSmallestRectangle1Xld, smallest_rectangle2_xldsmallest_rectangle2_xldSmallestRectangle2Xldsmallest_rectangle2_xldSmallestRectangle2XldSmallestRectangle2Xld, shape_trans_xldshape_trans_xldShapeTransXldshape_trans_xldShapeTransXldShapeTransXld

Literatur

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

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren