distance_transform
— Berechnen der Distanztransformation einer Region.
distance_transform(Region : DistanceImage : Metric, Foreground, Width, Height : )
distance_transform
berechnet für jeden Punkt der
Eingaberegion Region
(bzw. deren Komplement) den Abstand
zum Rand der Region. Die Auswahl der Pixel, für die der Abstand
berechnet werden soll, kann mit dem Parameter Foreground
gesteuert werden. Falls Foreground
= 'true' ,
werden die Abstände nur für die Pixel innerhalb der Region
berechnet. Falls Foreground
= 'false' , werden die
Abstände der Pixel außerhalb der Regionen zu deren Rand berechnet.
Die Abstände werden für alle Punkte des Ausgabebildes
DistanceImage
berechnet. Die Größe des Ausgabebildes wird
durch Width
und Height
bestimmt. Die
Eingaberegion wird auf die Größe des Ausgabebildes beschnitten.
Falls es wichtig ist, dass die Abstände innerhalb der gesamten
Region berechnet werden, sollte die Region so verschoben werden
(siehe move_region
), dass sie nur positive Koordinaten
besitzt und die Breite und Höhe des Ausgabebildes sollten groß genug
gewählt werden, dass die Region vollständig darin enthalten ist.
Die entsprechende Information kann mit smallest_rectangle1
bestimmt werden.
Welche Metrik zur Berechnung des Abstandes verwendet wird, wird mit
Hilfe des Parameters Metric
festgelegt. Falls
Metric
= 'city-block' wird der Abstand aus dem
kürzesten Pfad eines Punktes zum Rand der Region berechnet, wobei
nur horizontale und vertikale „Bewegungen“ erlaubt sind. Diese
werden mit einem Gewicht von 1 bewertet. Falls Metric
=
'chessboard' wird der Abstand aus dem kürzesten Pfad eines
Punktes zum Rand der Region berechnet, wobei horizontale, vertikale
und diagonale „Bewegungen“ erlaubt sind. Diese werden mit einem
Gewicht von 1 bewertet. Falls Metric
=
'octagonal' wird eine Kombination der beiden Verfahren
verwendet, so dass diagonale Pfade ein etwas größeres Gewicht
erhalten. Falls Metric
= 'chamfer-3-4' werden
horizontale und vertikale Bewegungen mit einem Gewicht von 3 und
diagonale Bewegungen mit einem Gewicht von 4 bewertet. Zur
Normierung wird das resultierende Distanzbild durch 3 geteilt. Da
diese Normierung Zeit kostet und man normalerweise nur an den
relativen Abständen mehrerer Punkte interessiert ist, kann die
Normierung mit Metric
= 'chamfer-3-4-unnormalized'
unterdrückt werden. Schließlich wird für Metric
=
'euclidean' eine annähernd euklidische Distanz berechnet.
Region
(input_object) region(-array) →
object
Region, zu deren Rand die Distanz berechnet werden soll.
DistanceImage
(output_object) image →
object (int4)
Rückgabebild, das die Distanz-Information enthält.
Metric
(input_control) string →
(string)
Metrik, die bei der Distanztransformation verwendet werden soll.
Defaultwert: 'city-block'
Werteliste: 'chamfer-3-4' , 'chamfer-3-4-unnormalized' , 'chessboard' , 'city-block' , 'euclidean' , 'octagonal'
Foreground
(input_control) string →
(string)
Berechnung der Distanzen innerhalb ('true' ) oder ausserhalb ('false' ) der Eingabregion.
Defaultwert: 'true'
Werteliste: 'false' , 'true'
Width
(input_control) extent.x →
(integer)
Breite des Ausgabebildes.
Defaultwert: 640
Wertevorschläge: 160, 192, 320, 384, 640, 768
Typischer Wertebereich: 1
≤
Width
Height
(input_control) extent.y →
(integer)
Höhe des Ausgabebildes.
Defaultwert: 480
Wertevorschläge: 120, 144, 240, 288, 480, 576
Typischer Wertebereich: 1
≤
Height
* Step towards extracting the medial axis of a shape: gen_rectangle1 (Rectangle1, 0, 0, 200, 400) gen_rectangle1 (Rectangle2, 200, 0, 400, 200) union2 (Rectangle1, Rectangle2, Shape) distance_transform (Shape, DistanceImage, 'chessboard', 'true', 640, 480)
Die Laufzeit-Komplexität ist O(Width
*Height
).
distance_transform
liefert 2 (H_MSG_TRUE) zurück, wenn alle
Parameter korrekt sind.
threshold
,
dyn_threshold
,
regiongrowing
P. Soille: „Morphological Image Analysis, Principles and
Applications“; Springer Verlag Berlin Heidelberg New York,
1999.
G. Borgefors: „Distance Transformations in Arbitrary Dimensions“;
Computer Vision, Graphics, and Image Processing, Vol. 27, pages
321--345, 1984.
P.E. Danielsson: „Euclidean Distance Mapping“; Computer Graphics
and Image Processing, Vol. 14, pages 227--248, 1980.
Foundation