expand_regionexpand_regionExpandRegionExpandRegionexpand_region (Operator)
Name
expand_regionexpand_regionExpandRegionExpandRegionexpand_region — Auffüllen von „Lücken“ zwischen Regionen oder Trennen überlappender Regionen.
Signatur
void ExpandRegion(const HObject& Regions, const HObject& ForbiddenArea, HObject* RegionExpanded, const HTuple& Iterations, const HTuple& Mode)
HRegion HRegion::ExpandRegion(const HRegion& ForbiddenArea, const HTuple& Iterations, const HString& Mode) const
HRegion HRegion::ExpandRegion(const HRegion& ForbiddenArea, Hlong Iterations, const HString& Mode) const
HRegion HRegion::ExpandRegion(const HRegion& ForbiddenArea, Hlong Iterations, const char* Mode) const
HRegion HRegion::ExpandRegion(const HRegion& ForbiddenArea, Hlong Iterations, const wchar_t* Mode) const
(Nur Windows)
Beschreibung
expand_regionexpand_regionExpandRegionExpandRegionExpandRegionexpand_region dient dazu, Lücken zwischen den Regionen, wie
sie z.B. durch Unterdrückung zu kleiner Regionen nach einer
Bildsegmentierung entstehen, zu schließen (Modus 'image') oder
überlappende Eingaberegionen zu trennen (Modus 'region'). Beide
Effekte beruhen auf der Expansion von Regionen. Dabei wird bei
jeder Iteration der Expansion ein 1-Pixel breiter Streifen um die
Region zu dieser hinzugefügt bzw. aus ihr entfernt.
Expandiert wird dabei nur in Bildbereiche, die nicht als „verbotene
Bereiche“ (Parameter ForbiddenAreaForbiddenAreaForbiddenAreaForbiddenAreaforbiddenAreaforbidden_area) ausgewiesen sind.
Die Zahl der Iterationen wird mit dem Parameter
IterationsIterationsIterationsIterationsiterationsiterations festgelegt. Die Übergabe des strings
'maximal'"maximal""maximal""maximal""maximal""maximal" veranlasst expand_regionexpand_regionExpandRegionExpandRegionExpandRegionexpand_region, das Verfahren so
lange zu iterieren, bis es konvergiert, also keine Änderungen mehr
auftreten. Eine 0 auf dieser Parameterposition bewirkt die Ausgabe
der nicht-überlappenden Teilregionen. Im Detail unterscheiden sich
die beiden Modi 'image'"image""image""image""image""image" und 'region'"region""region""region""region""region" wie folgt:
- 'image'
Die Eingaberegionen werden iterativ so lange ausgedehnt,
bis sie eine andere Region oder einen Bildrand berühren.
Der Bildrand ist in diesem Fall definiert als das Rechteck, das
sich von (0,0) bis (row_max,col_max) erstreckt. Dabei entspricht
(row_max,col_max) der rechten unteren Ecke des kleinsten
umschließenden Rechtecks aller Eingaberegionen (d.h. aller
Regionen, die in RegionsRegionsRegionsRegionsregionsregions und in ForbiddenAreaForbiddenAreaForbiddenAreaForbiddenAreaforbiddenAreaforbidden_area
übergeben werden).
Da expand_regionexpand_regionExpandRegionExpandRegionExpandRegionexpand_region alle Regionen simultan bearbeitet,
werden die „Lücken“ zwischen den Regionen „gerecht“
auf diese verteilt. Überlappende Regionen werden
getrennt, indem ihre gemeinsamen Teilregionen (wiederum
„gerecht“) auf sie verteilt werden.
- 'region'
Es wird keine Expansion der Eingaberegionen durchgeführt,
sondern nur überlappende Regionen getrennt, indem die
gemeinsamen Teilregionen „gerecht“ auf die Regionen
aufgeteilt werden. Da nach dem dafür benötigten
„Negativwachstum“ der Schnitt mit den Originalregionen
gebildet wird, kann es in diesem Modus zu „Lücken“ in
den Ausgaberegionen kommen, die Segmentierung der Bildebene
ist also nicht total. Diesem Problem kann mit einem
zweiten Aufruf von expand_regionexpand_regionExpandRegionExpandRegionExpandRegionexpand_region mit dem Komplement
der ursprünglichen Eingaberegionen als „forbidden area“
begegnet werden.
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Parameter
RegionsRegionsRegionsRegionsregionsregions (input_object) region(-array) → objectHRegionHObjectHRegionHobject
Regionen, zwischen denen Lücken geschlossen oder
die getrennt werden sollen.
ForbiddenAreaForbiddenAreaForbiddenAreaForbiddenAreaforbiddenAreaforbidden_area (input_object) region → objectHRegionHObjectHRegionHobject
In diesen Bereich darf nicht expandiert werden.
RegionExpandedRegionExpandedRegionExpandedRegionExpandedregionExpandedregion_expanded (output_object) region(-array) → objectHRegionHObjectHRegionHobject *
Expandierte oder getrennte Bildregionen.
IterationsIterationsIterationsIterationsiterationsiterations (input_control) integer → HTupleUnion[int, str]HTupleHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*)
Zahl der Iterationen.
Defaultwert:
'maximal'
"maximal"
"maximal"
"maximal"
"maximal"
"maximal"
Wertevorschläge: 'maximal'"maximal""maximal""maximal""maximal""maximal", 0, 1, 2, 3, 5, 7, 10, 15, 20, 30, 50, 70, 100, 200
Typischer Wertebereich: 0
≤
Iterations
Iterations
Iterations
Iterations
iterations
iterations
≤
1000 (lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
ModeModeModeModemodemode (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Gewünschter Modus.
Defaultwert:
'image'
"image"
"image"
"image"
"image"
"image"
Werteliste: 'image'"image""image""image""image""image", 'region'"region""region""region""region""region"
Beispiel (HDevelop)
read_image(Image,'clip')
threshold(Image,Dark,0,150)
connection(Dark,ConnectedRegions)
gen_circle (Circle, 400, 400, 200.5)
expand_region (ConnectedRegions, Circle, RegionExpanded, 'maximal', 'image')
dev_display (RegionExpanded)
Beispiel (C)
read_image(&Image,"fabrik");
threshold(Image,&Light,100.0,255.0);
disp_region(Light,WindowHandle);
connection(Light,&Seg);
expand_region(Seg,EMPTY_REGION,&Exp1,"maximal","image");
set_colored(WindowHandle,12);
set_draw(WindowHandle,"margin");
disp_region(Exp1,WindowHandle);
Beispiel (HDevelop)
read_image(Image,'clip')
threshold(Image,Dark,0,150)
connection(Dark,ConnectedRegions)
gen_circle (Circle, 400, 400, 200.5)
expand_region (ConnectedRegions, Circle, RegionExpanded, 'maximal', 'image')
dev_display (RegionExpanded)
Beispiel (HDevelop)
read_image(Image,'clip')
threshold(Image,Dark,0,150)
connection(Dark,ConnectedRegions)
gen_circle (Circle, 400, 400, 200.5)
expand_region (ConnectedRegions, Circle, RegionExpanded, 'maximal', 'image')
dev_display (RegionExpanded)
Beispiel (HDevelop)
read_image(Image,'clip')
threshold(Image,Dark,0,150)
connection(Dark,ConnectedRegions)
gen_circle (Circle, 400, 400, 200.5)
expand_region (ConnectedRegions, Circle, RegionExpanded, 'maximal', 'image')
dev_display (RegionExpanded)
Ergebnis
expand_regionexpand_regionExpandRegionExpandRegionExpandRegionexpand_region liefert normalerweise den Wert TRUE. Das
Verhalten bei leerer Eingabe (keine Eingabebilder 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>)set_system("no_object_result",<Result>), das bei
leerer Region 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>)set_system("empty_region_result",<Result>), und das
bei leerer Ergebnisregion mit
set_system('store_empty_region',<'2 (H_MSG_TRUE)'/'3 (H_MSG_FALSE)'>)set_system("store_empty_region",<"2 (H_MSG_TRUE)"/"3 (H_MSG_FALSE)">)SetSystem("store_empty_region",<"2 (H_MSG_TRUE)"/"3 (H_MSG_FALSE)">)SetSystem("store_empty_region",<"2 (H_MSG_TRUE)"/"3 (H_MSG_FALSE)">)SetSystem("store_empty_region",<"2 (H_MSG_TRUE)"/"3 (H_MSG_FALSE)">)set_system("store_empty_region",<"2 (H_MSG_TRUE)"/"3 (H_MSG_FALSE)">)
festlegen. Gegebenenfalls wird eine Fehlerbehandlung
durchgeführt.
Vorgänger
pouringpouringPouringPouringPouringpouring,
thresholdthresholdThresholdThresholdThresholdthreshold,
dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThresholddyn_threshold,
regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowingregiongrowing
Alternativen
dilation1dilation1Dilation1Dilation1Dilation1dilation1
Siehe auch
expand_grayexpand_grayExpandGrayExpandGrayExpandGrayexpand_gray,
interjacentinterjacentInterjacentInterjacentInterjacentinterjacent,
skeletonskeletonSkeletonSkeletonSkeletonskeleton
Modul
Foundation