KlassenKlassenKlassenKlassen | | | | Operatoren

inner_circleinner_circleInnerCircleinner_circleInnerCircleInnerCircle (Operator)

Name

inner_circleinner_circleInnerCircleinner_circleInnerCircleInnerCircle — Ermitteln des größten Inkreises einer Region.

Signatur

inner_circle(Regions : : : Row, Column, Radius)

Herror inner_circle(const Hobject Regions, double* Row, double* Column, double* Radius)

Herror T_inner_circle(const Hobject Regions, Htuple* Row, Htuple* Column, Htuple* Radius)

Herror inner_circle(Hobject Regions, double* Row, double* Column, double* Radius)

Herror inner_circle(Hobject Regions, HTuple* Row, HTuple* Column, HTuple* Radius)

double HRegion::InnerCircle(double* Column, double* Radius) const

HTuple HRegionArray::InnerCircle(HTuple* Column, HTuple* Radius) const

void InnerCircle(const HObject& Regions, HTuple* Row, HTuple* Column, HTuple* Radius)

void HRegion::InnerCircle(HTuple* Row, HTuple* Column, HTuple* Radius) const

void HRegion::InnerCircle(double* Row, double* Column, double* Radius) const

void HOperatorSetX.InnerCircle(
[in] IHUntypedObjectX* Regions, [out] VARIANT* Row, [out] VARIANT* Column, [out] VARIANT* Radius)

VARIANT HRegionX.InnerCircle(
[out] VARIANT* Column, [out] VARIANT* Radius)

static void HOperatorSet.InnerCircle(HObject regions, out HTuple row, out HTuple column, out HTuple radius)

void HRegion.InnerCircle(out HTuple row, out HTuple column, out HTuple radius)

void HRegion.InnerCircle(out double row, out double column, out double radius)

Beschreibung

inner_circleinner_circleInnerCircleinner_circleInnerCircleInnerCircle bestimmt den größten Inkreis einer Region. Das ist die größte diskrete Kreisregion, die vollständig in die Eingangsregion passt. Für diesen Kreis werden der Mittelpunkt (RowRowRowRowRowrow, ColumnColumnColumnColumnColumncolumn) und der Radius (RadiusRadiusRadiusRadiusRadiusradius) bestimmt. Ist die Position des Kreises nicht eindeutig definiert, wird die "erste mögliche" Position (das ist soweit links oben, wie möglich) zurückgeliefert.

In der Dokumentation des Operators region_featuresregion_featuresRegionFeaturesregion_featuresRegionFeaturesRegionFeatures finden Sie ein Bild mit Regionen, die sich im Durchmesser ihrer Inkreise unterscheiden.

Die Ausgabe von inner_circleinner_circleInnerCircleinner_circleInnerCircleInnerCircle ist so gewählt, dass sie als Eingabe für die HALCON-Operatoren disp_circledisp_circleDispCircledisp_circleDispCircleDispCircle, gen_circlegen_circleGenCirclegen_circleGenCircleGenCircle und gen_ellipse_contour_xldgen_ellipse_contour_xldGenEllipseContourXldgen_ellipse_contour_xldGenEllipseContourXldGenEllipseContourXld verwendet werden kann.

Werden mehrere Regionen in RegionsRegionsRegionsRegionsRegionsregions übergeben, werden die Ausgabeparameter als Tupel zurückgegeben. Ist die Eingaberegion leer, haben alle Parameter den Wert 0.0, soweit mit set_systemset_systemSetSystemset_systemSetSystemSetSystem kein anderes Verhalten eingestellt wurde.

Achtung

Wenn mehrere Inkreise bei einer Region vorhanden sind, wird nur die Lösung, die am weitesten links oben ist, zurückgegeben.

Parallelisierung

Parameter

RegionsRegionsRegionsRegionsRegionsregions (input_object)  region(-array) objectHRegionHRegionHRegionHRegionXHobject

Zu untersuchende Regionen.

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

Zeilenindex des Mittelpunktes.

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

Spaltenindex des Mittelpunktes.

RadiusRadiusRadiusRadiusRadiusradius (output_control)  circle.radius(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Radius des Inkreises.

Zusicherung: Radius >= 0

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
select_shape(Seg,H,'area','and',100,2000)
inner_circle(H,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_set_draw('margin')
dev_display(Circles)

Beispiel (C)

read_image(&Image,"fabrik");
open_window(0,0,-1,-1,0,"visible","",&WindowHandle);
regiongrowing(Image,&Seg,5,5,6.0,100);
select_shape(Seg,&H,"area","and",100.0,2000.0);
T_inner_circle(H,&Row,&Column,&Radius);
T_gen_circle(&Circles,Row,Column,Radius);
set_draw(WindowHandle,"margin");
disp_region(Circles,WindowHandle);

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
select_shape(Seg,H,'area','and',100,2000)
inner_circle(H,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_set_draw('margin')
dev_display(Circles)

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, rad;

  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.InnerCircle (&col, &rad);

  HRegionArray  circ = HRegionArray::GenCircle (row, col, rad);

  w.SetDraw   ("margin");

  w.SetColor  ("green");   reg.Display (w);
  w.SetColor  ("blue");    seg.Display (w);
  w.SetColor  ("red");     circ.Display (w);
  w.Click ();

  return(0);
}

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
select_shape(Seg,H,'area','and',100,2000)
inner_circle(H,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_set_draw('margin')
dev_display(Circles)

Beispiel (HDevelop)

read_image(Image,'fabrik')
regiongrowing(Image,Seg,5,5,6,100)
select_shape(Seg,H,'area','and',100,2000)
inner_circle(H,Row,Column,Radius)
gen_circle(Circles,Row,Column,Radius)
dev_set_draw('margin')
dev_display(Circles)

Komplexität

Sei F die Fläche der Region und R der Radius des Inkreises, dann beträgt die Laufzeitkomplexität O(sqrt(F) * R).

Ergebnis

inner_circleinner_circleInnerCircleinner_circleInnerCircleInnerCircle 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

gen_circlegen_circleGenCirclegen_circleGenCircleGenCircle, disp_circledisp_circleDispCircledisp_circleDispCircleDispCircle

Alternativen

erosion_circleerosion_circleErosionCircleerosion_circleErosionCircleErosionCircle, inner_rectangle1inner_rectangle1InnerRectangle1inner_rectangle1InnerRectangle1InnerRectangle1

Siehe auch

set_shapeset_shapeSetShapeset_shapeSetShapeSetShape, select_shapeselect_shapeSelectShapeselect_shapeSelectShapeSelectShape, smallest_circlesmallest_circleSmallestCirclesmallest_circleSmallestCircleSmallestCircle

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren