closest_point_transformclosest_point_transformClosestPointTransformClosestPointTransform (Operator)

Name

closest_point_transformclosest_point_transformClosestPointTransformClosestPointTransform — Berechnen der Nächste-Punkte-Transformation einer Region.

Signatur

closest_point_transform(Region : Distances, ClosestPoints : Metric, Foreground, ClosestPointMode, Width, Height : )

Herror closest_point_transform(const Hobject Region, Hobject* Distances, Hobject* ClosestPoints, const char* Metric, const char* Foreground, const char* ClosestPointMode, const Hlong Width, const Hlong Height)

Herror T_closest_point_transform(const Hobject Region, Hobject* Distances, Hobject* ClosestPoints, const Htuple Metric, const Htuple Foreground, const Htuple ClosestPointMode, const Htuple Width, const Htuple Height)

void ClosestPointTransform(const HObject& Region, HObject* Distances, HObject* ClosestPoints, const HTuple& Metric, const HTuple& Foreground, const HTuple& ClosestPointMode, const HTuple& Width, const HTuple& Height)

HImage HRegion::ClosestPointTransform(HImage* ClosestPoints, const HString& Metric, const HString& Foreground, const HString& ClosestPointMode, Hlong Width, Hlong Height) const

HImage HRegion::ClosestPointTransform(HImage* ClosestPoints, const char* Metric, const char* Foreground, const char* ClosestPointMode, Hlong Width, Hlong Height) const

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

static void HOperatorSet.ClosestPointTransform(HObject region, out HObject distances, out HObject closestPoints, HTuple metric, HTuple foreground, HTuple closestPointMode, HTuple width, HTuple height)

HImage HRegion.ClosestPointTransform(out HImage closestPoints, string metric, string foreground, string closestPointMode, int width, int height)

Beschreibung

closest_point_transformclosest_point_transformClosestPointTransformClosestPointTransformClosestPointTransform berechnet für jedes Pixel der Eingaberegion RegionRegionRegionRegionregion (bzw. deren Komplement) den Abstand zum nächstgelegenen Pixel außerhalb der Region (d.h. zu dem Pixel auf dem äußeren Rand der Region) und gibt diese Information in DistancesDistancesDistancesDistancesdistances zurück. Zusätzlich zum Abstand wird noch das zugehörige nächstgelegenen Pixel in ClosestPointsClosestPointsClosestPointsClosestPointsclosestPoints zurückgeliefert.

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 und nächstgelegenen Pixel werden für alle Punkte der Ausgabebilder DistancesDistancesDistancesDistancesdistances und ClosestPointsClosestPointsClosestPointsClosestPointsclosestPoints berechnet. Die Größe der Ausgabebilder wird durch WidthWidthWidthWidthwidth und HeightHeightHeightHeightheight bestimmt. Die Eingaberegion wird auf die Größe der Ausgabebilder 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.

Der Parameter ClosestPointModeClosestPointModeClosestPointModeClosestPointModeclosestPointMode legt fest, wie die nächstgelegenen Punkte abgelegt werden. Für ClosestPointModeClosestPointModeClosestPointModeClosestPointModeclosestPointMode = 'absolute'"absolute""absolute""absolute""absolute" werden in ClosestPointsClosestPointsClosestPointsClosestPointsclosestPoints absolute Koordinaten abgespeichert. Für ClosestPointModeClosestPointModeClosestPointModeClosestPointModeclosestPointMode = 'relative'"relative""relative""relative""relative" wird in ClosestPointsClosestPointsClosestPointsClosestPointsclosestPoints der Versatz zur Koordinate des jeweiligen Pixels abgespeichert.

Achtung

Es ist zu beachten, dass im Normalfall die nächstgelegenen Punkte nicht eindeutig sind, d.h. dass für den in DistancesDistancesDistancesDistancesdistances im jeweiligen Pixel des Ausgabebildes zurückgelieferten Abstand typischerweise mehrere Punkte auf dem äußeren Rand der Region existieren, die diesen Abstand zu dem Pixel besitzen. So haben zum Beispiel alle Punkten auf dem Skelett der Region in der verwendeten Mektik zu mindestens zwei verschiedenen Punkten auf dem äußeren Rand der Region denselben Abstand. closest_point_transformclosest_point_transformClosestPointTransformClosestPointTransformClosestPointTransform liefert in diesem Fall einen dieser Punkte zurück, der durch die Implementierung des Algorithmus bestimmt ist. Insbesondere sollten keine Invarianzen bezüglich Rotation oder Spiegelung der Region erwartet werden.

Weiterhin ist zu beachten, dass für ForegroundForegroundForegroundForegroundforeground = 'true'"true""true""true""true" auch Punktkoordinaten zurückgeliefert werden, die außerhalb des Bildes liegen, falls die Eingaberegion RegionRegionRegionRegionregion den Rand des durch WidthWidthWidthWidthwidth und HeightHeightHeightHeightheight bestimmten Bildes berührt, denn der äußere Rand der Region liegt in diesem Fall ein Pixel außerhalb des Bildes. Falls die zurückgelieferten Koordinaten zum direkten Zugriff auf ein Bild verwendet werden sollen, ist also auf geeignete Randbehandlung zu achten.

Ausführungsinformationen

Parameter

RegionRegionRegionRegionregion (input_object)  region(-array) objectHRegionHRegionHobject

Region, zu deren Rand die Distanz berechnet werden soll.

DistancesDistancesDistancesDistancesdistances (output_object)  image objectHImageHImageHobject * (int4)

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

ClosestPointsClosestPointsClosestPointsClosestPointsclosestPoints (output_object)  image objectHImageHImageHobject * (vector_field)

Rückgabebild, das die Koordinaten der nächstgelegenen Punkte enthält.

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

Metrik, die bei der Nächste-Punkte-Transformation 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 außerhalb ('false'"false""false""false""false") der Eingabregion.

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

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

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

Modus, in dem die Koordinaten der nächstgelegenen Punkte zurückgeliefert werden.

Defaultwert: 'absolute' "absolute" "absolute" "absolute" "absolute"

Werteliste: 'absolute'"absolute""absolute""absolute""absolute", 'relative'"relative""relative""relative""relative"

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

Breite der Ausgabebilder.

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 der Ausgabebilder.

Defaultwert: 480

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

Typischer Wertebereich: 1 ≤ Height Height Height Height height

Komplexität

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

Ergebnis

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

Vorgänger

thresholdthresholdThresholdThresholdThreshold, dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThreshold, regiongrowingregiongrowingRegiongrowingRegiongrowingRegiongrowing

Nachfolger

thresholdthresholdThresholdThresholdThreshold, vector_field_to_realvector_field_to_realVectorFieldToRealVectorFieldToRealVectorFieldToReal

Alternativen

distance_transformdistance_transformDistanceTransformDistanceTransformDistanceTransform

Siehe auch

skeletonskeletonSkeletonSkeletonSkeleton

Literatur

Y. Ge, C.R. Maurer, Jr., J.M. Fitzpatrick: „Surface-based 3-D image registration using the Iterative Closest Point algorithm with a closest point transform“; in: „Medical Imaging 1996: Image Processing“, M.H. Loew, K.M. Hanson, Editors, Proc. SPIE 2710, pages 358--367, 1996.
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