distance_transformdistance_transformDistanceTransformDistanceTransformdistance_transform (Operator)

Name

distance_transformdistance_transformDistanceTransformDistanceTransformdistance_transform — 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)

def distance_transform(region: HObject, metric: str, foreground: str, width: int, height: int) -> HObject

Beschreibung

distance_transformdistance_transformDistanceTransformDistanceTransformDistanceTransformdistance_transform 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 DistanceImageDistanceImageDistanceImageDistanceImagedistanceImagedistance_image 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_regionMoveRegionMoveRegionMoveRegionmove_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_rectangle1smallest_rectangle1SmallestRectangle1SmallestRectangle1SmallestRectangle1smallest_rectangle1 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.

Ausführungsinformationen

Parameter

RegionRegionRegionRegionregionregion (input_object)  region(-array) objectHRegionHObjectHRegionHobject

Region, zu deren Rand die Distanz berechnet werden soll.

DistanceImageDistanceImageDistanceImageDistanceImagedistanceImagedistance_image (output_object)  image objectHImageHObjectHImageHobject * (int4)

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

MetricMetricMetricMetricmetricmetric (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (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 HTuplestrHTupleHtuple (string) (string) (HString) (char*)

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

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 HTupleintHTupleHtuple (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 width

HeightHeightHeightHeightheightheight (input_control)  extent.y HTupleintHTupleHtuple (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 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_transformDistanceTransformDistanceTransformDistanceTransformdistance_transform liefert 2 (H_MSG_TRUE) zurück, wenn alle Parameter korrekt sind.

Vorgänger

thresholdthresholdThresholdThresholdThresholdthreshold, dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThresholddyn_threshold, regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowingregiongrowing

Nachfolger

thresholdthresholdThresholdThresholdThresholdthreshold

Alternativen

closest_point_transformclosest_point_transformClosestPointTransformClosestPointTransformClosestPointTransformclosest_point_transform

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