Name
inner_circleinner_circleInnerCircleinner_circleInnerCircleInnerCircle — Ermitteln des größten Inkreises einer Region.
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 zu diesem Kapitel (Regionen / Merkmale) 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.
Wenn mehrere Inkreise bei einer Region vorhanden sind,
wird nur die Lösung, die am weitesten links oben ist, zurückgegeben.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
Zu untersuchende Regionen.
Zeilenindex des Mittelpunktes.
Spaltenindex des Mittelpunktes.
Radius des Inkreises.
Zusicherung: Radius >= 0
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)
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);
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)
#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);
}
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)
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)
Sei F die Fläche der Region und R der Radius des
Inkreises, dann beträgt die Laufzeitkomplexität O(sqrt(F) * R).
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.
thresholdthresholdThresholdthresholdThresholdThreshold,
regiongrowingregiongrowingRegiongrowingregiongrowingRegiongrowingRegiongrowing,
connectionconnectionConnectionconnectionConnectionConnection,
runlength_featuresrunlength_featuresRunlengthFeaturesrunlength_featuresRunlengthFeaturesRunlengthFeatures
gen_circlegen_circleGenCirclegen_circleGenCircleGenCircle,
disp_circledisp_circleDispCircledisp_circleDispCircleDispCircle
erosion_circleerosion_circleErosionCircleerosion_circleErosionCircleErosionCircle,
inner_rectangle1inner_rectangle1InnerRectangle1inner_rectangle1InnerRectangle1InnerRectangle1
set_shapeset_shapeSetShapeset_shapeSetShapeSetShape,
select_shapeselect_shapeSelectShapeselect_shapeSelectShapeSelectShape,
smallest_circlesmallest_circleSmallestCirclesmallest_circleSmallestCircleSmallestCircle
Foundation