moments_any_xldmoments_any_xldMomentsAnyXldMomentsAnyXldmoments_any_xld (Operator)

Name

moments_any_xldmoments_any_xldMomentsAnyXldMomentsAnyXldmoments_any_xld — Arbitrary geometric moments of contours or polygons.

Signature

moments_any_xld(XLD : : Mode, PointOrder, Area, CenterRow, CenterCol, P, Q : M)

Herror moments_any_xld(const Hobject XLD, const char* Mode, const char* PointOrder, double Area, double CenterRow, double CenterCol, const Hlong P, const Hlong Q, double* M)

Herror T_moments_any_xld(const Hobject XLD, const Htuple Mode, const Htuple PointOrder, const Htuple Area, const Htuple CenterRow, const Htuple CenterCol, const Htuple P, const Htuple Q, Htuple* M)

void MomentsAnyXld(const HObject& XLD, const HTuple& Mode, const HTuple& PointOrder, const HTuple& Area, const HTuple& CenterRow, const HTuple& CenterCol, const HTuple& P, const HTuple& Q, HTuple* M)

HTuple HXLD::MomentsAnyXld(const HString& Mode, const HTuple& PointOrder, const HTuple& Area, const HTuple& CenterRow, const HTuple& CenterCol, const HTuple& P, const HTuple& Q) const

double HXLD::MomentsAnyXld(const HString& Mode, const HString& PointOrder, double Area, double CenterRow, double CenterCol, Hlong P, Hlong Q) const

double HXLD::MomentsAnyXld(const char* Mode, const char* PointOrder, double Area, double CenterRow, double CenterCol, Hlong P, Hlong Q) const

double HXLD::MomentsAnyXld(const wchar_t* Mode, const wchar_t* PointOrder, double Area, double CenterRow, double CenterCol, Hlong P, Hlong Q) const   ( Windows only)

static void HOperatorSet.MomentsAnyXld(HObject XLD, HTuple mode, HTuple pointOrder, HTuple area, HTuple centerRow, HTuple centerCol, HTuple p, HTuple q, out HTuple m)

HTuple HXLD.MomentsAnyXld(string mode, HTuple pointOrder, HTuple area, HTuple centerRow, HTuple centerCol, HTuple p, HTuple q)

double HXLD.MomentsAnyXld(string mode, string pointOrder, double area, double centerRow, double centerCol, int p, int q)

def moments_any_xld(xld: HObject, mode: str, point_order: MaybeSequence[str], area: MaybeSequence[float], center_row: MaybeSequence[float], center_col: MaybeSequence[float], p: MaybeSequence[int], q: MaybeSequence[int]) -> Sequence[float]

def moments_any_xld_s(xld: HObject, mode: str, point_order: MaybeSequence[str], area: MaybeSequence[float], center_row: MaybeSequence[float], center_col: MaybeSequence[float], p: MaybeSequence[int], q: MaybeSequence[int]) -> float

Description

moments_any_xldmoments_any_xldMomentsAnyXldMomentsAnyXldMomentsAnyXldmoments_any_xld calculates arbitrary moments MMMMmm of the regions enclosed by the contours or polygons XLDXLDXLDXLDXLDxld. The moments are computed by applying Green's theorem using only the points on the contour or polygon, i.e., no region is generated explicitly for the purpose of calculating the features. It is assumed that the contours or polygons are closed. If this is not the case moments_any_xldmoments_any_xldMomentsAnyXldMomentsAnyXldMomentsAnyXldmoments_any_xld will artificially close the contours or polygons.

It should be noted that moments_any_xldmoments_any_xldMomentsAnyXldMomentsAnyXldMomentsAnyXldmoments_any_xld only returns useful results if the contour or polygon encloses a region in the plane. In particular, the contour or polygon must not intersect itself. This is particularly important if open contours or polygons are passed because they are closed automatically, which can produce a self-intersection. To test whether the contours or polygons intersect themselves, test_self_intersection_xldtest_self_intersection_xldTestSelfIntersectionXldTestSelfIntersectionXldTestSelfIntersectionXldtest_self_intersection_xld can be used. If the contour or polygon intersects itself, useful values for the moments can be calculated with moments_any_points_xldmoments_any_points_xldMomentsAnyPointsXldMomentsAnyPointsXldMomentsAnyPointsXldmoments_any_points_xld.

The computed moments are normalized depending on the desired mode ModeModeModeModemodemode:

'unnormalized':

No normalization. Let be the enclosed image region. Then the computed moment is equivalent to:

'unnormalized_central':

Shift the region by its centroid [CenterRowCenterRowCenterRowCenterRowcenterRowcenter_row, CenterColCenterColCenterColCenterColcenterColcenter_col]:

'normalized':

Normalization by the area AreaAreaAreaAreaareaarea of the enclosed image region:

'central':

Normalization by the area AreaAreaAreaAreaareaarea of the enclosed image region and a shift of the region by it's centroid [CenterRowCenterRowCenterRowCenterRowcenterRowcenter_row, CenterColCenterColCenterColCenterColcenterColcenter_col]:

For the normalization of the moments three specific moments are used: The area AreaAreaAreaAreaareaarea of the enclosed image region and the coordinates CenterRowCenterRowCenterRowCenterRowcenterRowcenter_row,CenterColCenterColCenterColCenterColcenterColcenter_col of it's centroid (this values can be calculated with area_center_xldarea_center_xldAreaCenterXldAreaCenterXldAreaCenterXldarea_center_xld). In addition to that moments_any_xldmoments_any_xldMomentsAnyXldMomentsAnyXldMomentsAnyXldmoments_any_xld expects information about the point order of the input contours/polygons in PointOrderPointOrderPointOrderPointOrderpointOrderpoint_order, see area_center_xldarea_center_xldAreaCenterXldAreaCenterXldAreaCenterXldarea_center_xld again.

If more than one contour or polygon is passed, MMMMmm contains all desired moments of the first contour/polygon followed by all the moments of the second contour/polygon and so forth.

Execution Information

Parameters

XLDXLDXLDXLDXLDxld (input_object)  xld(-array) objectHXLDHObjectHXLDHobject

Contours or polygons to be examined.

ModeModeModeModemodemode (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Computation mode.

Default: 'unnormalized' "unnormalized" "unnormalized" "unnormalized" "unnormalized" "unnormalized"

Suggested values: 'unnormalized'"unnormalized""unnormalized""unnormalized""unnormalized""unnormalized", 'unnormalized_central'"unnormalized_central""unnormalized_central""unnormalized_central""unnormalized_central""unnormalized_central", 'normalized'"normalized""normalized""normalized""normalized""normalized", 'central'"central""central""central""central""central"

PointOrderPointOrderPointOrderPointOrderpointOrderpoint_order (input_control)  string(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Point order along the boundary.

Default: 'positive' "positive" "positive" "positive" "positive" "positive"

Suggested values: 'positive'"positive""positive""positive""positive""positive", 'negative'"negative""negative""negative""negative""negative"

AreaAreaAreaAreaareaarea (input_control)  real(-array) HTupleMaybeSequence[float]HTupleHtuple (real) (double) (double) (double)

Area enclosed by the contour or polygon.

CenterRowCenterRowCenterRowCenterRowcenterRowcenter_row (input_control)  point.y(-array) HTupleMaybeSequence[float]HTupleHtuple (real) (double) (double) (double)

Row coordinate of the centroid.

CenterColCenterColCenterColCenterColcenterColcenter_col (input_control)  point.x(-array) HTupleMaybeSequence[float]HTupleHtuple (real) (double) (double) (double)

Column coordinate of the centroid.

PPPPpp (input_control)  point.x(-array) HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

First index of the desired moments .

Default: 1

Suggested values: 0, 1, 2, 3, 4

QQQQqq (input_control)  point.x(-array) HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Second index of the desired moments .

Default: 1

Suggested values: 0, 1, 2, 3, 4

MMMMmm (output_control)  real(-array) HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

The computed moments.

Complexity

Let n be the number of points of the contour or polygon. Then the run time is O(n).

Result

moments_any_xldmoments_any_xldMomentsAnyXldMomentsAnyXldMomentsAnyXldmoments_any_xld returns 2 ( H_MSG_TRUE) if the input is not empty. If the input is empty the behavior can be set via 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>). If necessary, an exception is raised.

Possible Predecessors

area_center_xldarea_center_xldAreaCenterXldAreaCenterXldAreaCenterXldarea_center_xld, gen_contours_skeleton_xldgen_contours_skeleton_xldGenContoursSkeletonXldGenContoursSkeletonXldGenContoursSkeletonXldgen_contours_skeleton_xld, smooth_contours_xldsmooth_contours_xldSmoothContoursXldSmoothContoursXldSmoothContoursXldsmooth_contours_xld, gen_polygons_xldgen_polygons_xldGenPolygonsXldGenPolygonsXldGenPolygonsXldgen_polygons_xld

Alternatives

moments_xldmoments_xldMomentsXldMomentsXldMomentsXldmoments_xld, moments_any_points_xldmoments_any_points_xldMomentsAnyPointsXldMomentsAnyPointsXldMomentsAnyPointsXldmoments_any_points_xld

See also

moments_xldmoments_xldMomentsXldMomentsXldMomentsXldmoments_xld, area_center_xldarea_center_xldAreaCenterXldAreaCenterXldAreaCenterXldarea_center_xld, moments_region_2ndmoments_region_2ndMomentsRegion2ndMomentsRegion2ndMomentsRegion2ndmoments_region_2nd, area_centerarea_centerAreaCenterAreaCenterAreaCenterarea_center

Module

Foundation