KlassenKlassenKlassenKlassen | | | | Operatoren

smallest_rectangle2smallest_rectangle2SmallestRectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2 (Operator)

Name

smallest_rectangle2smallest_rectangle2SmallestRectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2 — Ermitteln des kleinsten umschließenden Rechtecks mit beliebiger Orientierung.

Signatur

smallest_rectangle2(Regions : : : Row, Column, Phi, Length1, Length2)

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)

Herror smallest_rectangle2(Hobject Regions, double* Row, double* Column, double* Phi, double* Length1, double* Length2)

Herror smallest_rectangle2(Hobject Regions, HTuple* Row, HTuple* Column, HTuple* Phi, HTuple* Length1, HTuple* Length2)

double HRegion::SmallestRectangle2(double* Column, double* Phi, double* Length1, double* Length2) const

HTuple HRegionArray::SmallestRectangle2(HTuple* Column, HTuple* Phi, HTuple* Length1, HTuple* Length2) const

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

void HOperatorSetX.SmallestRectangle2(
[in] IHUntypedObjectX* Regions, [out] VARIANT* Row, [out] VARIANT* Column, [out] VARIANT* Phi, [out] VARIANT* Length1, [out] VARIANT* Length2)

VARIANT HRegionX.SmallestRectangle2(
[out] VARIANT* Column, [out] VARIANT* Phi, [out] VARIANT* Length1, [out] VARIANT* Length2)

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_rectangle2SmallestRectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2 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.

Kleinstes umschließendes Rechteck einer Region. Es ist zu beachten, dass die Berechnung auf den Pixelmittelpunkten basiert.

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_rectangle2SmallestRectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2 sind so gewählt, dass sie direkt als Eingabe für die Operatoren disp_rectangle2disp_rectangle2DispRectangle2disp_rectangle2DispRectangle2DispRectangle2 und gen_rectangle2gen_rectangle2GenRectangle2gen_rectangle2GenRectangle2GenRectangle2 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 RegionsRegionsRegionsRegionsRegionsregions ü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_systemSetSystemset_systemSetSystemSetSystem).

Parallelisierung

Parameter

RegionsRegionsRegionsRegionsRegionsregions (input_object)  region(-array) objectHRegionHRegionHRegionHRegionXHobject

Zu untersuchende Regionen.

RowRowRowRowRowrow (output_control)  rectangle2.center.y(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Zeilenindex des Mittelpunktes.

ColumnColumnColumnColumnColumncolumn (output_control)  rectangle2.center.x(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Spaltenindex des Mittelpunktes.

PhiPhiPhiPhiPhiphi (output_control)  rectangle2.angle.rad(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Orientierung des umschließenden Rechtecks (Bogenmaß)

Zusicherung: - pi / 2 < Phi && Phi <= pi / 2

Length1Length1Length1Length1Length1length1 (output_control)  rectangle2.hwidth(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Erster Halbmesser (halbe Länge) des umschließenden Rechtecks.

Zusicherung: Length1 >= 0.0

Length2Length2Length2Length2Length2length2 (output_control)  rectangle2.hheight(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (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 (C++ (HALCON 5.0-10.0))

#include "HIOStream.h"
#if !defined(USE_IOSTREAM_H)
using namespace std;
#endif
#include "HalconCpp.h"
using namespace Halcon;

int main (int argc, char *argv[])
{
  Tuple    row, col, phi, len1, len2;

  HImage   img (argv[1]);
  HWindow  w;

  img.Display (w);

  HRegionArray  reg  = img.Regiongrowing (5, 5, 6.0, 100);
  HRegionArray  seg  = reg.SelectShape ("area", "and", 100.0, 1000.0);

  row = seg.SmallestRectangle2 (&col, &phi, &len1, &len2);

  HRegionArray rect = HRegionArray::GenRectangle2 (row, col, phi, len1, len2);

  w.SetDraw   ("margin");
  w.SetColor  ("green");   reg.Display (w);
  w.SetColor  ("blue");    seg.Display (w);
  w.SetColor  ("red");     rect.Display (w);
  w.Click ();

  return(0);
}

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_rectangle2SmallestRectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2 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.

Vorgänger

thresholdthresholdThresholdthresholdThresholdThreshold, regiongrowingregiongrowingRegiongrowingregiongrowingRegiongrowingRegiongrowing, connectionconnectionConnectionconnectionConnectionConnection, runlength_featuresrunlength_featuresRunlengthFeaturesrunlength_featuresRunlengthFeaturesRunlengthFeatures

Nachfolger

disp_rectangle2disp_rectangle2DispRectangle2disp_rectangle2DispRectangle2DispRectangle2, gen_rectangle2gen_rectangle2GenRectangle2gen_rectangle2GenRectangle2GenRectangle2

Alternativen

elliptic_axiselliptic_axisEllipticAxiselliptic_axisEllipticAxisEllipticAxis, smallest_rectangle1smallest_rectangle1SmallestRectangle1smallest_rectangle1SmallestRectangle1SmallestRectangle1

Siehe auch

smallest_circlesmallest_circleSmallestCirclesmallest_circleSmallestCircleSmallestCircle, set_shapeset_shapeSetShapeset_shapeSetShapeSetShape

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren