expand_region
— Auffüllen von „Lücken“ zwischen Regionen oder Trennen überlappender Regionen.
expand_region(Regions, ForbiddenArea : RegionExpanded : Iterations, Mode : )
expand_region
dient dazu, Lücken zwischen den Regionen, wie
sie z.B. durch Unterdrückung zu kleiner Regionen nach einer
Bildsegmentation 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 ForbiddenArea
) ausgewiesen sind.
Die Zahl der Iterationen wird mit dem Parameter
Iterations
festgelegt. Die Übergabe des strings
'maximal' veranlasst expand_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' und 'region' wie folgt:
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 Regions
und in ForbiddenArea
übergeben werden).
Da expand_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.
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 Segmentation der Bildebene
ist also nicht total. Diesem Problem kann mit einem
zweiten Aufruf von expand_region
mit dem Komplement
der ursprünglichen Eingaberegionen als „forbidden area“
begegnet werden.
Regions
(input_object) region(-array) →
object
Regionen, zwischen denen Lücken geschlossen oder die getrennt werden sollen.
ForbiddenArea
(input_object) region →
object
In diesen Bereich darf nicht expandiert werden.
RegionExpanded
(output_object) region(-array) →
object
Expandierte oder getrennte Bildregionen.
Iterations
(input_control) integer →
(integer / string)
Zahl der Iterationen.
Defaultwert: 'maximal'
Wertevorschläge: 'maximal' , 0, 1, 2, 3, 5, 7, 10, 15, 20, 30, 50, 70, 100, 200
Typischer Wertebereich: 0
≤
Iterations
≤
1000
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Mode
(input_control) string →
(string)
Gewünschter Modus.
Defaultwert: 'image'
Werteliste: 'image' , 'region'
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)
expand_region
liefert normalerweise den Wert 2 (H_MSG_TRUE). Das
Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt
sich mittels
set_system('no_object_result',<Result>)
, das bei
leerer Region mit
set_system('empty_region_result',<Result>)
, und das
bei leerer Ergebnisregion mit
set_system('store_empty_region',<'true'/'false'>)
festlegen. Gegebenenfalls wird eine Fehlerbehandlung
durchgeführt.
pouring
,
threshold
,
dyn_threshold
,
regiongrowing
expand_gray
,
interjacent
,
skeleton
Foundation