smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2 (Operator)
Name
smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2
— Ermitteln des kleinsten umschließenden Rechtecks mit beliebiger Orientierung.
Signatur
Herror smallest_rectangle2(const Hobject Regions, double* Row, double* Column, double* Phi, double* Length1, double* Length2)
Herror T_smallest_rectangle2(const Hobject Regions, Htuple* Row, Htuple* Column, Htuple* Phi, Htuple* Length1, Htuple* Length2)
void SmallestRectangle2(const HObject& Regions, HTuple* Row, HTuple* Column, HTuple* Phi, HTuple* Length1, HTuple* Length2)
void HRegion::SmallestRectangle2(HTuple* Row, HTuple* Column, HTuple* Phi, HTuple* Length1, HTuple* Length2) const
void HRegion::SmallestRectangle2(double* Row, double* Column, double* Phi, double* Length1, double* Length2) const
static void HOperatorSet.SmallestRectangle2(HObject regions, out HTuple row, out HTuple column, out HTuple phi, out HTuple length1, out HTuple length2)
void HRegion.SmallestRectangle2(out HTuple row, out HTuple column, out HTuple phi, out HTuple length1, out HTuple length2)
void HRegion.SmallestRectangle2(out double row, out double column, out double phi, out double length1, out double length2)
Beschreibung
smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2
bestimmt das kleinste umschließende Rechteck
einer Region, also das Rechteck mit dem kleinsten Flächeninhalt unter allen
Rechtecken, die die Region enthalten. Für dieses Rechteck werden der
Mittelpunkt, der Neigungswinkel und die beiden Halbmesser berechnet.
Die Berechnung des Rechtecks basiert auf den
Mittelpunktskoordinaten der Regionenpixel.
Der Operator findet Anwendung, wenn z.B. die Lage einer Szenerie von
mehreren Regionen (z.B. gedruckter Text auf einem rechteckigen Papier bzw.
mit rechteckigem Druckbild (Blocksatz)) gefunden werden soll.
Die Parameter von smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2
sind so gewählt, dass
sie direkt als Eingabe für die Operatoren disp_rectangle2disp_rectangle2DispRectangle2DispRectangle2DispRectangle2
und gen_rectangle2gen_rectangle2GenRectangle2GenRectangle2GenRectangle2
verwendet werden können.
In der Dokumentation zu diesem Kapitel (Regionen / Merkmale) finden
Sie ein Bild mit Regionen, die sich in der Länge und Phi ihres kleinsten
umschließenden Rechtecks unterscheiden.
Wird mehr als eine Region in RegionsRegionsRegionsRegionsregions
übergeben, dann werden
die Ergebnisse in Tupeln abgespeichert, wobei der Index eines Wertes im
Tupel dem Index einer Region in der Eingabe entspricht.
Bei leerer Region haben alle Parameter den Wert 0.0, soweit kein
anderes Verhalten eingestellt wurde (siehe set_systemset_systemSetSystemSetSystemSetSystem
).
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
Parameter
RegionsRegionsRegionsRegionsregions
(input_object) region(-array) →
objectHRegionHRegionHobject
Zu untersuchende Regionen.
RowRowRowRowrow
(output_control) rectangle2.center.y(-array) →
HTupleHTupleHtuple (real) (double) (double) (double)
Zeilenindex des Mittelpunktes.
ColumnColumnColumnColumncolumn
(output_control) rectangle2.center.x(-array) →
HTupleHTupleHtuple (real) (double) (double) (double)
Spaltenindex des Mittelpunktes.
PhiPhiPhiPhiphi
(output_control) rectangle2.angle.rad(-array) →
HTupleHTupleHtuple (real) (double) (double) (double)
Orientierung des umschließenden Rechtecks (Bogenmaß)
Zusicherung: - pi / 2 < Phi && Phi <= pi / 2
Length1Length1Length1Length1length1
(output_control) rectangle2.hwidth(-array) →
HTupleHTupleHtuple (real) (double) (double) (double)
Erster Halbmesser (halbe Länge) des umschließenden
Rechtecks.
Zusicherung: Length1 >= 0.0
Length2Length2Length2Length2length2
(output_control) rectangle2.hheight(-array) →
HTupleHTupleHtuple (real) (double) (double) (double)
Zweiter Halbmesser (halbe Breite) des umschließenden
Rechtecks.
Zusicherung: Length2 >= 0.0 && Length2 <= Length1
Beispiel (HDevelop)
read_image(Image,'fabrik')
regiongrowing(Image,Regions,5,5,6,100)
smallest_rectangle2(Regions,Row,Column,Phi,Length1,Length2)
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
dev_set_draw ('margin')
dev_display(Rectangle)
Beispiel (HDevelop)
read_image(Image,'fabrik')
regiongrowing(Image,Regions,5,5,6,100)
smallest_rectangle2(Regions,Row,Column,Phi,Length1,Length2)
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
dev_set_draw ('margin')
dev_display(Rectangle)
Beispiel (HDevelop)
read_image(Image,'fabrik')
regiongrowing(Image,Regions,5,5,6,100)
smallest_rectangle2(Regions,Row,Column,Phi,Length1,Length2)
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
dev_set_draw ('margin')
dev_display(Rectangle)
Beispiel (HDevelop)
read_image(Image,'fabrik')
regiongrowing(Image,Regions,5,5,6,100)
smallest_rectangle2(Regions,Row,Column,Phi,Length1,Length2)
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
dev_set_draw ('margin')
dev_display(Rectangle)
Beispiel (HDevelop)
read_image(Image,'fabrik')
regiongrowing(Image,Regions,5,5,6,100)
smallest_rectangle2(Regions,Row,Column,Phi,Length1,Length2)
gen_rectangle2(Rectangle,Row,Column,Phi,Length1,Length2)
dev_set_draw ('margin')
dev_display(Rectangle)
Komplexität
Sei F die Fläche der Region und N die Anzahl der Stützpunkte
der konvexen Hülle, dann beträgt die Laufzeitkomplexität
O(sqrt(F) + N^2).
Ergebnis
smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2
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>)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>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)
bestimmt.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
Vorgänger
thresholdthresholdThresholdThresholdThreshold
,
regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowing
,
connectionconnectionConnectionConnectionConnection
,
runlength_featuresrunlength_featuresRunlengthFeaturesRunlengthFeaturesRunlengthFeatures
Nachfolger
disp_rectangle2disp_rectangle2DispRectangle2DispRectangle2DispRectangle2
,
gen_rectangle2gen_rectangle2GenRectangle2GenRectangle2GenRectangle2
Alternativen
elliptic_axiselliptic_axisEllipticAxisEllipticAxisEllipticAxis
,
smallest_rectangle1smallest_rectangle1SmallestRectangle1SmallestRectangle1SmallestRectangle1
Siehe auch
smallest_circlesmallest_circleSmallestCircleSmallestCircleSmallestCircle
,
set_shapeset_shapeSetShapeSetShapeSetShape
Modul
Foundation