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

Parameters of the equivalent ellipse.

The operator elliptic_axis calculates the radii and the orientation of the ellipse having the ``same orientation'' and the ``same side relation'' as the input region. Several input regions can be passed in Regions as tuples. The length of the main radius Ra and the secondary radius Rb as well as the orientation of the main axis with regard to the horizontal (Phi) are determined. The angle is indicated in arc measure.

Calculation:

        If the moments M20, M02 and M11 are
        normalized to the area (see moments_region_2nd),
        the radii Ra and Rb are calculated as:

        Ra = sqrt(8.0*(M20+M02+sqrt((M20-M02)^2+4.0*M11^2)))/2.0
        Rb = sqrt(8.0*(M20+M02-sqrt((M20-M02)^2+4.0*M11^2)))/2.0

        The orientation Phi is defined by:

        Phi = -0.5 * atan2(2.0 * M11,M02 - M20)

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('no_object_result',<Result>)).


Attention

It should be noted that, like for all region-moments-based operators, the region's pixels are regarded as mathematical, infinitely small points that are represented by the center of the pixels. This means that Ra and Rb can assume the value 0. In particular, for an empty region and a region containing a single point Ra = Rb = 0 is returned. Furthermore, for regions whose points lie exactly on a straight line (e.g., one pixel high horizontal regions or one pixel wide vertical regions), Rb = 0 is returned.


Parameters

Regions (input_object)
region(-array) -> object
Region(s) to be examined.

Ra (output_control)
real(-array) -> real
Main radius (normalized to the area).
Assertion: Ra >= 0.0

Rb (output_control)
real(-array) -> real
Secondary radius (normalized to the area).
Assertion: (Rb >= 0.0) && (Rb <= Ra)

Phi (output_control)
real(-array) -> real
Angle between main radius and x axis (arc measure).
Assertion: ((- pi / 2) < Phi) && (Phi <= (pi / 2))


Example
read_image(Image,'fabrik')
open_window(0,0,-1,-1,'root','visible','',WindowHandle)
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)
set_draw(WindowHandle,'margin')
disp_region(Ellipses,WindowHandle)

Complexity

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


Result

The operator elliptic_axis returns the value 2 (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 (the region is the empty set) is set via set_system('empty_region_result',<Result>). If necessary an exception handling is raised.


Parallelization Information

elliptic_axis is reentrant and automatically parallelized (on tuple level).


Possible Predecessors

threshold, regiongrowing, connection


Possible Successors

gen_ellipse


Alternatives

smallest_rectangle2, orientation_region


See also

moments_region_2nd, select_shape, set_shape


References

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


Module

Foundation



Copyright © 1996-2008 MVTec Software GmbH