distance_transformdistance_transformDistanceTransformDistanceTransform (Operator)

Name

distance_transformdistance_transformDistanceTransformDistanceTransform — Berechnen der Distanztransformation einer Region.

Signatur

distance_transform(Region : DistanceImage : Metric, Foreground, Width, Height : )

Herror distance_transform(const Hobject Region, Hobject* DistanceImage, const char* Metric, const char* Foreground, const Hlong Width, const Hlong Height)

Herror T_distance_transform(const Hobject Region, Hobject* DistanceImage, const Htuple Metric, const Htuple Foreground, const Htuple Width, const Htuple Height)

void DistanceTransform(const HObject& Region, HObject* DistanceImage, const HTuple& Metric, const HTuple& Foreground, const HTuple& Width, const HTuple& Height)

HImage HRegion::DistanceTransform(const HString& Metric, const HString& Foreground, Hlong Width, Hlong Height) const

HImage HRegion::DistanceTransform(const char* Metric, const char* Foreground, Hlong Width, Hlong Height) const

HImage HRegion::DistanceTransform(const wchar_t* Metric, const wchar_t* Foreground, Hlong Width, Hlong Height) const   (Nur Windows)

static void HOperatorSet.DistanceTransform(HObject region, out HObject distanceImage, HTuple metric, HTuple foreground, HTuple width, HTuple height)

HImage HRegion.DistanceTransform(string metric, string foreground, int width, int height)

Beschreibung

distance_transformdistance_transformDistanceTransformDistanceTransformDistanceTransform berechnet für jeden Punkt der Eingaberegion RegionRegionRegionRegionregion (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 ForegroundForegroundForegroundForegroundforeground gesteuert werden. Falls ForegroundForegroundForegroundForegroundforeground = 'true'"true""true""true""true", werden die Abstände nur für die Pixel innerhalb der Region berechnet. Falls ForegroundForegroundForegroundForegroundforeground = 'false'"false""false""false""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 DistanceImageDistanceImageDistanceImageDistanceImagedistanceImage berechnet. Die Größe des Ausgabebildes wird durch WidthWidthWidthWidthwidth und HeightHeightHeightHeightheight 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_regionmove_regionMoveRegionMoveRegionMoveRegion), 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_rectangle1smallest_rectangle1SmallestRectangle1SmallestRectangle1SmallestRectangle1 bestimmt werden.

Welche Metrik zur Berechnung des Abstandes verwendet wird, wird mit Hilfe des Parameters MetricMetricMetricMetricmetric festgelegt. Falls MetricMetricMetricMetricmetric = 'city-block'"city-block""city-block""city-block""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 MetricMetricMetricMetricmetric = 'chessboard'"chessboard""chessboard""chessboard""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 MetricMetricMetricMetricmetric = 'octagonal'"octagonal""octagonal""octagonal""octagonal" wird eine Kombination der beiden Verfahren verwendet, so dass diagonale Pfade ein etwas größeres Gewicht erhalten. Falls MetricMetricMetricMetricmetric = 'chamfer-3-4'"chamfer-3-4""chamfer-3-4""chamfer-3-4""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 MetricMetricMetricMetricmetric = 'chamfer-3-4-unnormalized'"chamfer-3-4-unnormalized""chamfer-3-4-unnormalized""chamfer-3-4-unnormalized""chamfer-3-4-unnormalized" unterdrückt werden. Schließlich wird für MetricMetricMetricMetricmetric = 'euclidean'"euclidean""euclidean""euclidean""euclidean" eine annähernd euklidische Distanz berechnet.

Ausführungsinformationen

Parameter

RegionRegionRegionRegionregion (input_object)  region(-array) objectHRegionHRegionHobject

Region, zu deren Rand die Distanz berechnet werden soll.

DistanceImageDistanceImageDistanceImageDistanceImagedistanceImage (output_object)  image objectHImageHImageHobject * (int4)

Rückgabebild, das die Distanz-Information enthält.

MetricMetricMetricMetricmetric (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Metrik, die bei der Distanztransformation verwendet werden soll.

Defaultwert: 'city-block' "city-block" "city-block" "city-block" "city-block"

Werteliste: 'chamfer-3-4'"chamfer-3-4""chamfer-3-4""chamfer-3-4""chamfer-3-4", 'chamfer-3-4-unnormalized'"chamfer-3-4-unnormalized""chamfer-3-4-unnormalized""chamfer-3-4-unnormalized""chamfer-3-4-unnormalized", 'chessboard'"chessboard""chessboard""chessboard""chessboard", 'city-block'"city-block""city-block""city-block""city-block", 'euclidean'"euclidean""euclidean""euclidean""euclidean", 'octagonal'"octagonal""octagonal""octagonal""octagonal"

ForegroundForegroundForegroundForegroundforeground (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Berechnung der Distanzen innerhalb ('true'"true""true""true""true") oder ausserhalb ('false'"false""false""false""false") der Eingabregion.

Defaultwert: 'true' "true" "true" "true" "true"

Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"

WidthWidthWidthWidthwidth (input_control)  extent.x HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Breite des Ausgabebildes.

Defaultwert: 640

Wertevorschläge: 160, 192, 320, 384, 640, 768

Typischer Wertebereich: 1 ≤ Width Width Width Width width

HeightHeightHeightHeightheight (input_control)  extent.y HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Höhe des Ausgabebildes.

Defaultwert: 480

Wertevorschläge: 120, 144, 240, 288, 480, 576

Typischer Wertebereich: 1 ≤ Height Height Height Height height

Beispiel (HDevelop)

* 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)

Komplexität

Die Laufzeit-Komplexität ist O(WidthWidthWidthWidthwidth*HeightHeightHeightHeightheight).

Ergebnis

distance_transformdistance_transformDistanceTransformDistanceTransformDistanceTransform liefert 2 (H_MSG_TRUE) zurück, wenn alle Parameter korrekt sind.

Vorgänger

thresholdthresholdThresholdThresholdThreshold, dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThreshold, regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowing

Nachfolger

thresholdthresholdThresholdThresholdThreshold

Alternativen

closest_point_transformclosest_point_transformClosestPointTransformClosestPointTransformClosestPointTransform

Siehe auch

skeletonskeletonSkeletonSkeletonSkeleton

Literatur

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.

Modul

Foundation