KlassenKlassenKlassenKlassen | | | | Operatoren

distance_transformdistance_transformDistanceTransformdistance_transformDistanceTransformDistanceTransform (Operator)

Name

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

Herror distance_transform(Hobject Region, Hobject* DistanceImage, const HTuple& Metric, const HTuple& Foreground, const HTuple& Width, const HTuple& Height)

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

HImage HRegionArray::DistanceTransform(const HTuple& Metric, const HTuple& Foreground, const HTuple& Width, const HTuple& Height) const

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

void HOperatorSetX.DistanceTransform(
[in] IHUntypedObjectX* Region, [out] IHUntypedObjectX*DistanceImage, [in] VARIANT Metric, [in] VARIANT Foreground, [in] VARIANT Width, [in] VARIANT Height)

IHImageX* HRegionX.DistanceTransform(
[in] BSTR Metric, [in] BSTR Foreground, [in] Hlong Width, [in] Hlong Height)

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_transformDistanceTransformdistance_transformDistanceTransformDistanceTransform berechnet für jeden Punkt der Eingaberegion RegionRegionRegionRegionRegionregion (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 ForegroundForegroundForegroundForegroundForegroundforeground gesteuert werden. Falls ForegroundForegroundForegroundForegroundForegroundforeground = 'true'"true""true""true""true""true", werden die Abstände nur für die Pixel innerhalb der Region berechnet. Falls ForegroundForegroundForegroundForegroundForegroundforeground = 'false'"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 DistanceImageDistanceImageDistanceImageDistanceImageDistanceImagedistanceImage berechnet. Die Größe des Ausgabebildes wird durch WidthWidthWidthWidthWidthwidth und HeightHeightHeightHeightHeightheight 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_regionMoveRegionmove_regionMoveRegionMoveRegion), 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_rectangle1SmallestRectangle1smallest_rectangle1SmallestRectangle1SmallestRectangle1 bestimmt werden.

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

Parallelisierung

Parameter

RegionRegionRegionRegionRegionregion (input_object)  region(-array) objectHRegionHRegionHRegionHRegionXHobject

Region, zu deren Rand die Distanz berechnet werden soll.

DistanceImageDistanceImageDistanceImageDistanceImageDistanceImagedistanceImage (output_object)  image objectHImageHImageHImageHImageXHobject * (int4)

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

MetricMetricMetricMetricMetricmetric (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Metrik, die bei der Distanztransformation verwendet werden soll.

Defaultwert: 'city-block' "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", 'chamfer-3-4-unnormalized'"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""chessboard", 'city-block'"city-block""city-block""city-block""city-block""city-block", 'euclidean'"euclidean""euclidean""euclidean""euclidean""euclidean", 'octagonal'"octagonal""octagonal""octagonal""octagonal""octagonal"

ForegroundForegroundForegroundForegroundForegroundforeground (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

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

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

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

WidthWidthWidthWidthWidthwidth (input_control)  extent.x HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Breite des Ausgabebildes.

Defaultwert: 640

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

Typischer Wertebereich: 1 ≤ Width Width Width Width Width width

HeightHeightHeightHeightHeightheight (input_control)  extent.y HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Höhe des Ausgabebildes.

Defaultwert: 480

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

Typischer Wertebereich: 1 ≤ Height 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(WidthWidthWidthWidthWidthwidth*HeightHeightHeightHeightHeightheight).

Ergebnis

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

Vorgänger

thresholdthresholdThresholdthresholdThresholdThreshold, dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold, regiongrowingregiongrowingRegiongrowingregiongrowingRegiongrowingRegiongrowing

Nachfolger

thresholdthresholdThresholdthresholdThresholdThreshold

Alternativen

closest_point_transformclosest_point_transformClosestPointTransformclosest_point_transformClosestPointTransformClosestPointTransform

Siehe auch

skeletonskeletonSkeletonskeletonSkeletonSkeleton

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


KlassenKlassenKlassenKlassen | | | | Operatoren