Name
elliptic_axiselliptic_axisEllipticAxiselliptic_axisEllipticAxisEllipticAxis — Parameters of the equivalent ellipse.
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)
The operator elliptic_axiselliptic_axisEllipticAxiselliptic_axisEllipticAxisEllipticAxis calculates the radii RaRaRaRaRara and
RbRbRbRbRbrb and the orientation PhiPhiPhiPhiPhiphi of the ellipse having the
same orientation and the same aspect ratio as the input region in RegionsRegionsRegionsRegionsRegionsregions.
Several input regions can be passed as tuples.
RaRaRaRaRara represents the main radius of the ellipse whereas the radius
RbRbRbRbRbrb represents the secondary radius of the ellipse.
The orientation of the main axis with regard to the x-axis is returned in
PhiPhiPhiPhiPhiphi which is represented in radians.
The principle axis of the ellipse is equivalent to the principle axis of the
inertia moment of the input region.
Calculation:
If the moments M20, M02 and M11 are
normalized and passed to the area (see moments_region_2ndmoments_region_2ndMomentsRegion2ndmoments_region_2ndMomentsRegion2ndMomentsRegion2nd),
the radii RaRaRaRaRara and RbRbRbRbRbrb are calculated as:
RaRaRaRaRara = sqrt(8.0*(M20+M02+sqrt((M20-M02)^2+4.0*M11^2)))/2.0
RbRbRbRbRbrb = sqrt(8.0*(M20+M02-sqrt((M20-M02)^2+4.0*M11^2)))/2.0
The orientation Phi is defined by:
PhiPhiPhiPhiPhiphi = -0.5 * atan2(2.0 * M11,M02 - M20)
If more than one region is passed, the results are stored in tuples. The index
of an resulting tuple element corresponds to the index of the respective
input region.
If an empty region is passed, all parameters have the value 0.0 if no other
behavior was set
(see 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>)).
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 RaRaRaRaRara and RbRbRbRbRbrb can assume the
value 0. In particular, for an empty region and a region
containing a single point RaRaRaRaRara = RbRbRbRbRbrb = 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), RbRbRbRbRbrb = 0 is returned.
- Multithreading type: reentrant (runs in parallel with non-exclusive operators).
- Multithreading scope: global (may be called from any thread).
- Automatically parallelized on tuple level.
RaRaRaRaRara (output_control) real(-array) → HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)
Main radius (normalized to the area).
Assertion: Ra >= 0.0
RbRbRbRbRbrb (output_control) real(-array) → HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)
Secondary radius (normalized to the area).
Assertion: Rb >= 0.0 && Rb <= Ra
Angle between main radius and x axis in radians.
Assertion: - pi / 2 < Phi && Phi <= pi / 2
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)
read_image(&Image,"fabrik");
open_window(0,0,-1,-1,0,"visible","",&WindowHandle);
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);
set_draw(WindowHandle,"margin");
disp_region(Ellipses,WindowHandle);
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)
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)
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)
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)
If F is the area of a region the mean runtime
complexity is O(sqrt(F)).
The operator elliptic_axiselliptic_axisEllipticAxiselliptic_axisEllipticAxisEllipticAxis 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>)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>).
The behavior in case of empty region (the region is the empty set) is set via
set_system('empty_region_result',<Result>)set_system("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)set_system("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>).
If necessary an exception is raised.
thresholdthresholdThresholdthresholdThresholdThreshold,
regiongrowingregiongrowingRegiongrowingregiongrowingRegiongrowingRegiongrowing,
connectionconnectionConnectionconnectionConnectionConnection
gen_ellipsegen_ellipseGenEllipsegen_ellipseGenEllipseGenEllipse
smallest_rectangle2smallest_rectangle2SmallestRectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2,
orientation_regionorientation_regionOrientationRegionorientation_regionOrientationRegionOrientationRegion
moments_region_2ndmoments_region_2ndMomentsRegion2ndmoments_region_2ndMomentsRegion2ndMomentsRegion2nd,
select_shapeselect_shapeSelectShapeselect_shapeSelectShapeSelectShape,
set_shapeset_shapeSetShapeset_shapeSetShapeSetShape
R. Haralick, L. Shapiro
“Computer and Robot Vision”
Addison-Wesley, 1992, pp. 73-75
Foundation