Name
closest_point_transformclosest_point_transformClosestPointTransformclosest_point_transformClosestPointTransformClosestPointTransform — Berechnen der Nächste-Punkte-Transformation einer Region.
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)
Herror closest_point_transform(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 HTuple& Metric, const HTuple& Foreground, const HTuple& ClosestPointMode, const HTuple& Width, const HTuple& Height) const
HImage HRegionArray::ClosestPointTransform(HImage* ClosestPoints, const HTuple& Metric, const HTuple& Foreground, const HTuple& ClosestPointMode, const HTuple& Width, const HTuple& Height) const
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
void HOperatorSetX.ClosestPointTransform(
[in] IHUntypedObjectX* Region, [out] IHUntypedObjectX** Distances, [out] IHUntypedObjectX** ClosestPoints, [in] VARIANT Metric, [in] VARIANT Foreground, [in] VARIANT ClosestPointMode, [in] VARIANT Width, [in] VARIANT Height)
IHImageX* HRegionX.ClosestPointTransform(
[out] IHImageX** ClosestPoints, [in] BSTR Metric, [in] BSTR Foreground, [in] BSTR ClosestPointMode, [in] Hlong Width, [in] Hlong Height)
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)
closest_point_transformclosest_point_transformClosestPointTransformclosest_point_transformClosestPointTransformClosestPointTransform berechnet für jedes Pixel der
Eingaberegion RegionRegionRegionRegionRegionregion (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
DistancesDistancesDistancesDistancesDistancesdistances zurück. Zusätzlich zum Abstand wird noch das
zugehörige nächstgelegenen Pixel in ClosestPointsClosestPointsClosestPointsClosestPointsClosestPointsclosestPoints
zurückgeliefert.
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 und nächstgelegenen
Pixel werden für alle Punkte der Ausgabebilder DistancesDistancesDistancesDistancesDistancesdistances
und ClosestPointsClosestPointsClosestPointsClosestPointsClosestPointsclosestPoints berechnet. Die Größe der Ausgabebilder
wird durch WidthWidthWidthWidthWidthwidth und HeightHeightHeightHeightHeightheight 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_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.
Der Parameter ClosestPointModeClosestPointModeClosestPointModeClosestPointModeClosestPointModeclosestPointMode legt fest, wie die
nächstgelegenen Punkte abgelegt werden. Für
ClosestPointModeClosestPointModeClosestPointModeClosestPointModeClosestPointModeclosestPointMode = 'absolute'"absolute""absolute""absolute""absolute""absolute" werden in
ClosestPointsClosestPointsClosestPointsClosestPointsClosestPointsclosestPoints absolute Koordinaten abgespeichert. Für
ClosestPointModeClosestPointModeClosestPointModeClosestPointModeClosestPointModeclosestPointMode = 'relative'"relative""relative""relative""relative""relative" wird in
ClosestPointsClosestPointsClosestPointsClosestPointsClosestPointsclosestPoints der Versatz zur Koordinate des jeweiligen
Pixels abgespeichert.
Es ist zu beachten, dass im Normalfall die nächstgelegenen Punkte
nicht eindeutig sind, d.h. dass für den in DistancesDistancesDistancesDistancesDistancesdistances 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_transformClosestPointTransformclosest_point_transformClosestPointTransformClosestPointTransform
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 ForegroundForegroundForegroundForegroundForegroundforeground =
'true'"true""true""true""true""true" auch Punktkoordinaten zurückgeliefert werden, die
außerhalb des Bildes liegen, falls die Eingaberegion RegionRegionRegionRegionRegionregion
den Rand des durch WidthWidthWidthWidthWidthwidth und HeightHeightHeightHeightHeightheight 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.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Region, zu deren Rand die Distanz berechnet werden
soll.
Rückgabebild, das die Distanz-Information enthält.
Rückgabebild, das die Koordinaten der nächstgelegenen
Punkte enthält.
Metrik, die bei der Nächste-Punkte-Transformation
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"
Berechnung der Distanzen innerhalb ('true'"true""true""true""true""true")
oder außerhalb ('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"
Modus, in dem die Koordinaten der nächstgelegenen
Punkte zurückgeliefert werden.
Defaultwert:
'absolute'
"absolute"
"absolute"
"absolute"
"absolute"
"absolute"
Werteliste: 'absolute'"absolute""absolute""absolute""absolute""absolute", 'relative'"relative""relative""relative""relative""relative"
Breite der Ausgabebilder.
Defaultwert: 640
Wertevorschläge: 160, 192, 320, 384, 640, 768
Typischer Wertebereich: 1
≤
Width
Width
Width
Width
Width
width
Höhe der Ausgabebilder.
Defaultwert: 480
Wertevorschläge: 120, 144, 240, 288, 480, 576
Typischer Wertebereich: 1
≤
Height
Height
Height
Height
Height
height
Die Laufzeit-Komplexität ist O(WidthWidthWidthWidthWidthwidth*HeightHeightHeightHeightHeightheight).
closest_point_transformclosest_point_transformClosestPointTransformclosest_point_transformClosestPointTransformClosestPointTransform liefert 2 (H_MSG_TRUE) zurück, wenn alle
Parameter korrekt sind.
thresholdthresholdThresholdthresholdThresholdThreshold,
dyn_thresholddyn_thresholdDynThresholddyn_thresholdDynThresholdDynThreshold,
regiongrowingregiongrowingRegiongrowingregiongrowingRegiongrowingRegiongrowing
thresholdthresholdThresholdthresholdThresholdThreshold,
vector_field_to_realvector_field_to_realVectorFieldToRealvector_field_to_realVectorFieldToRealVectorFieldToReal
distance_transformdistance_transformDistanceTransformdistance_transformDistanceTransformDistanceTransform
skeletonskeletonSkeletonskeletonSkeletonSkeleton
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.
Foundation