Name
elliptic_axiselliptic_axisEllipticAxiselliptic_axisEllipticAxisEllipticAxis — Ermitteln der Parameter der äquivalenten 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)
Der Operator elliptic_axiselliptic_axisEllipticAxiselliptic_axisEllipticAxisEllipticAxis berechnet die Radien RaRaRaRaRara und
RbRbRbRbRbrb sowie die Orientierung PhiPhiPhiPhiPhiphi der äquivalenten Ellipse mit der
gleichen Orientierung und dem gleichen Seitenverhältnis wie die Eingaberegion
RegionsRegionsRegionsRegionsRegionsregions.
Mehrere Eingaberegionen können in Form eines Tupels übergeben werden.
RaRaRaRaRara repräsentiert die Länge des Hauptradius der Ellipse während
der Radius RbRbRbRbRbrb den Nebenradius der Ellipse repräsentiert.
Die Orientierung der Hauptachse bezüglich der x-Achse wird im Winkel
PhiPhiPhiPhiPhiphi zurückgegeben und ist im Bogenmaß angegeben. Die Hauptachse
der Ellipse entspricht der Hauptachse des Trägheitsmoments der Eingaberegion.
Berechnung:
Seien die Momente M20, M02 und M11
normiert auf die Fläche gegeben (siehe moments_region_2ndmoments_region_2ndMomentsRegion2ndmoments_region_2ndMomentsRegion2ndMomentsRegion2nd), dann
berechnen sich die Radien RaRaRaRaRara und RbRbRbRbRbrb folgendermaßen:
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
Die Orientierung Phi ist definiert durch:
PhiPhiPhiPhiPhiphi = -0.5 * atan2(2.0 * M11,M02 - M20)
Wird mehr als eine Region übergeben, werden die Ergebnisse in
Form von Tupeln zurückgeliefert, wobei der Index eines Tupelelements
dem Index der zugehörigen Eingaberegion entspricht.
Wird eine leere Region übergeben, haben alle Parameter den Wert 0.0,
soweit kein anderes Verhalten eingestellt wurde
(siehe 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>)).
Es ist zu beachten, dass, wie bei allen regionenmomentenbasierten
Operatoren, die Pixel als mathematische Punkte ohne flächenhafte
Ausdehnung betrachtet werden, die durch die Mitte des jeweiligen
Pixels gegeben sind. Daraus folgt, dass RaRaRaRaRara und RbRbRbRbRbrb
auch den Wert 0 annehmen können. Für eine leere Region und
eine Region, die aus genau einem Punkt besteht, wird folglich
RaRaRaRaRara = RbRbRbRbRbrb = 0 zurückgeliefert.
Weiterhin wird für Regionen, deren Punkte genau auf einer Geraden
liegen (also z.B. ein Pixel hohe horizontale Regionen oder ein Pixel
breite vertikale Regionen) RbRbRbRbRbrb = 0
zurückgeliefert.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
RaRaRaRaRara (output_control) real(-array) → HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)
Hauptradius (normiert auf die Fläche).
Zusicherung: Ra >= 0.0
RbRbRbRbRbrb (output_control) real(-array) → HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)
Nebenradius (normiert auf die Fläche).
Zusicherung: Rb >= 0.0 && Rb <= Ra
Winkel zwischen Hauptradius und x-Achse im Bogenmaß.
Zusicherung: - 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)
Sei F die Fläche einer Region, dann beträgt die
Laufzeitkomplexität im Mittel O(sqrt(F)).
elliptic_axiselliptic_axisEllipticAxiselliptic_axisEllipticAxisEllipticAxis liefert den Wert 2 (H_MSG_TRUE), falls die Eingabe nicht
leer ist. Das Verhalten bei leerer Eingabe (keine Eingaberegionen vorhanden)
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. Das Verhalten bei einer leeren Region (Region ist die leere Menge)
wird mit 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>) bestimmt.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
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