Herror ::moments_region_2nd (
    Hobject Regions,
    double *M11,
    double *M20,
    double *M02,
    double *Ia,
    double *Ib
)
Herror ::moments_region_2nd (
    Hobject Regions,
    HTuple *M11,
    HTuple *M20,
    HTuple *M02,
    HTuple *Ia,
    HTuple *Ib
)
double HRegion::MomentsRegion2nd (
    double *M20,
    double *M02,
    double *Ia,
    double *Ib
) const
HTuple HRegionArray::MomentsRegion2nd (
    HTuple *M20,
    HTuple *M02,
    HTuple *Ia,
    HTuple *Ib
) const

Geometric moments of regions.

The operator ::moments_region_2nd calculates the moments (M20, M02) and the product of inertia of the axes through the center parallel to the coordinate axes (M11). Furthermore the main axes of inertia (Ia, Ib) are calculated.

Calculation: Z0 and S0 are the coordinates of the
            center of a region R with the area F.
            Then the moments Mij are defined by:

                    Mij = SUMME ( (Z0 - Z)^i (S0 - S)^j ),

            wherein Z and S run through all pixels of the region R.

            Furthermore, h = (M20 + M02) / 2.

            Then Ia and Ib are defined by:

                    Ia = h + sqrt ( h^2 - M20 x M02 + M11^2)
                    Ib = h - sqrt ( h^2 - M20 x M02 + M11^2)

If more than one region is passed the results are stored in tuples, the index of a value in the tuple corresponding to the index of a region in the input.

In case of empty region all parameters have the value 0.0 if no other behavior was set (see ::set_system).


Parameters

Regions (input_object)
region(-array) -> Hobject: HRegion(Array)
Regions to be examined.

M11 (output_control)
real(-array) -> (HTuple.) double *
Product of inertia of the axes through the center parallel to the coordinate axes.

M20 (output_control)
real(-array) -> (HTuple.) double *
Moment of 2nd order (line-dependent).

M02 (output_control)
real(-array) -> (HTuple.) double *
Moment of 2nd order (column-dependent).

Ia (output_control)
real(-array) -> (HTuple.) double *
The one main axis of inertia.

Ib (output_control)
real(-array) -> (HTuple.) double *
The other main axis of inertia.


Complexity

If F is the area of the region the mean runtime complexity is O(F).


Result

The operator ::moments_region_2nd returns the value H_MSG_TRUE if the input is not empty. The behavior in case of empty input (no input regions available) is set via the operator ::set_system('no_object_result',<Result>). The behavior in case of empty region (region is the empty set) is set via ::set_system('empty_region_result',<Result>). If necessary an exception handling is raised.


Possible Predecessors

::threshold, ::regiongrowing, ::connection


Alternatives

::moments_region_2nd_invar


See also

::elliptic_axis


Module

Region processing



Copyright © 1996-2002 MVTec Software GmbH