reconstruct_height_field_from_gradientT_reconstruct_height_field_from_gradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientreconstruct_height_field_from_gradient (Operator)

Name

reconstruct_height_field_from_gradientT_reconstruct_height_field_from_gradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientreconstruct_height_field_from_gradient — Rekonstruieren einer Oberfläche aus Oberflächengradienten.

Signatur

reconstruct_height_field_from_gradient(Gradient : HeightField : ReconstructionMethod, GenParamName, GenParamValue : )

Herror T_reconstruct_height_field_from_gradient(const Hobject Gradient, Hobject* HeightField, const Htuple ReconstructionMethod, const Htuple GenParamName, const Htuple GenParamValue)

void ReconstructHeightFieldFromGradient(const HObject& Gradient, HObject* HeightField, const HTuple& ReconstructionMethod, const HTuple& GenParamName, const HTuple& GenParamValue)

HImage HImage::ReconstructHeightFieldFromGradient(const HString& ReconstructionMethod, const HTuple& GenParamName, const HTuple& GenParamValue) const

HImage HImage::ReconstructHeightFieldFromGradient(const char* ReconstructionMethod, const HTuple& GenParamName, const HTuple& GenParamValue) const

HImage HImage::ReconstructHeightFieldFromGradient(const wchar_t* ReconstructionMethod, const HTuple& GenParamName, const HTuple& GenParamValue) const   (Nur Windows)

static void HOperatorSet.ReconstructHeightFieldFromGradient(HObject gradient, out HObject heightField, HTuple reconstructionMethod, HTuple genParamName, HTuple genParamValue)

HImage HImage.ReconstructHeightFieldFromGradient(string reconstructionMethod, HTuple genParamName, HTuple genParamValue)

def reconstruct_height_field_from_gradient(gradient: HObject, reconstruction_method: str, gen_param_name: Sequence[str], gen_param_value: Sequence[Union[int, float, str]]) -> HObject

Beschreibung

reconstruct_height_field_from_gradientreconstruct_height_field_from_gradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientreconstruct_height_field_from_gradient rekonstruiert eine Oberfläche aus den Gradienten, die in GradientGradientGradientGradientgradientgradient übergeben werden. Die Oberfläche wird als Höhenmodell zurückgegeben, d.h., die Grauwerte jedes einzelnen Bildpunktes entsprechen der relativen Höhe der Oberfläche.

Die Rekonstruktion erfolgt durch die Integration der Gradienten durch verschiedene Algorithmen, die im Parameter ReconstructionMethodReconstructionMethodReconstructionMethodReconstructionMethodreconstructionMethodreconstruction_method ausgewählt werden können. Da Gradientenfelder typischerweise nicht integrierbar sind, z.B. aufgrund von Rauschen, liefern die verschiedenen zur Verfügung stehenden Algorithmen eine Lösung im Sinne der kleinsten Quadrate. Die verfügbaren Algorithmen unterscheiden sich in der Art, wie sie die Randbedingungen modellieren. Zur Zeit werden drei verschiedene Algorithmen unterstützt: 'fft_cyclic'"fft_cyclic""fft_cyclic""fft_cyclic""fft_cyclic""fft_cyclic", 'rft_cyclic'"rft_cyclic""rft_cyclic""rft_cyclic""rft_cyclic""rft_cyclic" und 'poisson'"poisson""poisson""poisson""poisson""poisson".

Rekonstruktion mittels schneller Fourier Transformation

Die Verfahren 'fft_cyclic'"fft_cyclic""fft_cyclic""fft_cyclic""fft_cyclic""fft_cyclic" und 'rft_cyclic'"rft_cyclic""rft_cyclic""rft_cyclic""rft_cyclic""rft_cyclic" nehmen an, dass die Bildfunktion an den Rändern zyklisch ist. Dies kann an den Bildrändern zu Artefakten führen, weswegen in den meisten Fällen die Rekonstruktion nach Poisson vorzuziehen ist.

Der Unterschied zwischen 'fft_cyclic'"fft_cyclic""fft_cyclic""fft_cyclic""fft_cyclic""fft_cyclic" und 'rft_cyclic'"rft_cyclic""rft_cyclic""rft_cyclic""rft_cyclic""rft_cyclic" ist, dass die rft Version eine schnellere Verarbeitungszeit hat und weniger Speicher benötigt als die fft Version. Dafür ist die fft Version, obwohl fft und rft eigentlich das gleiche Ergebnis liefern sollten, numerisch geringfügig genauer. Da reconstruct_height_field_from_gradientreconstruct_height_field_from_gradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientreconstruct_height_field_from_gradient intern eine schnelle Fourier Transformation benutzt, kann die Laufzeit des Operators durch einen vorherigen Aufruf von optimize_fft_speedoptimize_fft_speedOptimizeFftSpeedOptimizeFftSpeedOptimizeFftSpeedoptimize_fft_speed oder optimize_rft_speedoptimize_rft_speedOptimizeRftSpeedOptimizeRftSpeedOptimizeRftSpeedoptimize_rft_speed beeinflusst werden.

Rekonstruktion nach Poisson

Der 'poisson'"poisson""poisson""poisson""poisson""poisson"-Algorithmus nimmt an, dass das Bild konstante Gradienten am Bildrand hat. In den meisten Fällen bietet er die geeignetere Rekonstruktionsmethode für reconstruct_height_field_from_gradientreconstruct_height_field_from_gradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientreconstruct_height_field_from_gradient. Seine Laufzeit kann nur durch Setzen von GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name auf 'optimize_speed'"optimize_speed""optimize_speed""optimize_speed""optimize_speed""optimize_speed" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value auf 'standard'"standard""standard""standard""standard""standard", 'patient'"patient""patient""patient""patient""patient" oder 'exhaustive'"exhaustive""exhaustive""exhaustive""exhaustive""exhaustive" beeinflusst werden. Für die Bedeutung dieser Parameter sei auf die Beschreibung von optimize_fft_speedoptimize_fft_speedOptimizeFftSpeedOptimizeFftSpeedOptimizeFftSpeedoptimize_fft_speed verwiesen.

Der 'poisson'"poisson""poisson""poisson""poisson""poisson"-Algorithmus verwendet standardmäßig einen Cache, der von der Größe des Bildes abhängt und die Rekonstruktion deutlich beschleunigt, vorausgesetzt, alle zu verarbeitenden Bilder haben die gleiche Größe. Der Cache wird beim ersten Aufruf des 'poisson'"poisson""poisson""poisson""poisson""poisson"-Algorithmus aufgebaut. Deshalb benötigt der erste Aufruf immer länger als nachfolgende Aufrufe. Der zusätzlich benötigte Speicherplatz entspricht dem Speicher, der für ein Bild benötigt wird. Es ist zu beachten, dass der Aufruf des Operators mit verschiedenen Bildgrößen zum Reallokieren des Caches führt, was wiederum zu längeren Verarbeitungszeiten führt. In diesem Fall kann es von Vorteil sein, das Caching nicht zu verwenden. Zum Deaktivieren des Cachings kann der Parameter GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name auf 'caching'"caching""caching""caching""caching""caching" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value auf 'no_cache'"no_cache""no_cache""no_cache""no_cache""no_cache" gesetzt werden. Der Cache kann explizit durch Setzen von GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name auf 'caching'"caching""caching""caching""caching""caching" und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value auf 'free_cache'"free_cache""free_cache""free_cache""free_cache""free_cache" deallokiert werden. In den meisten Fällen wird das Verwenden des Caches aber empfohlen, d.h., der Parameter 'caching'"caching""caching""caching""caching""caching" kann ignoriert werden bzw. seinen Default-Wert beibehalten.

Speichern und Laden von Optimierungsparametern

Die Optimierungsparameter für alle Algorithmen können durch write_fft_optimization_datawrite_fft_optimization_dataWriteFftOptimizationDataWriteFftOptimizationDataWriteFftOptimizationDatawrite_fft_optimization_data und read_fft_optimization_dataread_fft_optimization_dataReadFftOptimizationDataReadFftOptimizationDataReadFftOptimizationDataread_fft_optimization_data gespeichert und geladen werden.

Nicht offensichtliche Anwendungen

reconstruct_height_field_from_gradientreconstruct_height_field_from_gradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientreconstruct_height_field_from_gradient hat einige nicht offensichtliche Anwendungsfelder, insbesondere im Bereich der "gradient domain manipulation technique". In vielen Anwendungen haben die Werte der Gradienten, die dem Operator übergeben werden, nicht die Semantik von Oberflächengradienten (d.h., den ersten Ableitungen der Höhen) sondern entsprechen den ersten Ableitungen anderer Parametertypen, typischerweise Grauwerten. D.h., die Gradienten haben die Semantik von Grauwertkanten. Wenn diese Gradienten auf unterschiedliche Arten verarbeitet werden, z.B. durch das Addieren oder Subtrahieren von Bildern oder durch eine Filterung, werden die ursprünglichen Gradienten verändert und ein nachfolgender Aufruf von reconstruct_height_field_from_gradientreconstruct_height_field_from_gradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientreconstruct_height_field_from_gradient liefert ein verändertes Bild, in dem z.B. unerwünschte Kanten entfernt wurden oder der Kontrast lokal geändert wurde. Typische Anwendungen sind das Entfernen von Rauschen, die nahtlose Verschmelzung von Bildern oder die HDR (high dynamic range) Kompression.

Achtung

reconstruct_height_field_from_gradientreconstruct_height_field_from_gradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientreconstruct_height_field_from_gradient berücksichtigt die Werte aller Pixel von GradientGradientGradientGradientgradientgradient, auch außerhalb seiner Region. Falls GradientGradientGradientGradientgradientgradient einen eingeschränkten Definitionsbereich hat, könnte man den relevanten viereckigen Bereich ausschneiden und daraus ein neues Bild mit voller Region erzeugen.

Ausführungsinformationen

Parameter

GradientGradientGradientGradientgradientgradient (input_object)  singlechannelimage objectHImageHObjectHImageHobject (vector_field)

Gradientenfeld der Oberfläche.

HeightFieldHeightFieldHeightFieldHeightFieldheightFieldheight_field (output_object)  image objectHImageHObjectHImageHobject * (real)

Rekonstruiertes Höhenmodell.

ReconstructionMethodReconstructionMethodReconstructionMethodReconstructionMethodreconstructionMethodreconstruction_method (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Typ der Rekonstruktionsmethode.

Defaultwert: 'poisson' "poisson" "poisson" "poisson" "poisson" "poisson"

Werteliste: 'fft_cyclic'"fft_cyclic""fft_cyclic""fft_cyclic""fft_cyclic""fft_cyclic", 'poisson'"poisson""poisson""poisson""poisson""poisson", 'rft_cyclic'"rft_cyclic""rft_cyclic""rft_cyclic""rft_cyclic""rft_cyclic"

GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name (input_control)  string-array HTupleSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Namen der generischen Parameter.

Defaultwert: []

Werteliste: 'caching'"caching""caching""caching""caching""caching", 'optimize_speed'"optimize_speed""optimize_speed""optimize_speed""optimize_speed""optimize_speed"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value (input_control)  integer-array HTupleSequence[Union[int, float, str]]HTupleHtuple (integer / real / string) (int / long / double / string) (Hlong / double / HString) (Hlong / double / char*)

Werte der generischen Parameter.

Defaultwert: []

Werteliste: 'exhaustive'"exhaustive""exhaustive""exhaustive""exhaustive""exhaustive", 'free_cache'"free_cache""free_cache""free_cache""free_cache""free_cache", 'no_cache'"no_cache""no_cache""no_cache""no_cache""no_cache", 'patient'"patient""patient""patient""patient""patient", 'standard'"standard""standard""standard""standard""standard", 'use_cache'"use_cache""use_cache""use_cache""use_cache""use_cache"

Ergebnis

Sind die Parameterwerte korrekt, dann liefert reconstruct_height_field_from_gradientreconstruct_height_field_from_gradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientReconstructHeightFieldFromGradientreconstruct_height_field_from_gradient den Wert TRUE, sonst eine Fehlermeldung.

Literatur

M. Kazhdan, M. Bolitho, and H. Hoppe: „Poisson Surface Reconstruction.“ Symposium on Geometry Processing (June 2006).

Modul

3D Metrology