KlassenKlassenKlassenKlassen | | | | Operatoren

fft_genericfft_genericFftGenericfft_genericFftGenericFftGeneric (Operator)

Name

fft_genericfft_genericFftGenericfft_genericFftGenericFftGeneric — Schnelle Fouriertransformation.

Signatur

fft_generic(Image : ImageFFT : Direction, Exponent, Norm, Mode, ResultType : )

Herror fft_generic(const Hobject Image, Hobject* ImageFFT, const char* Direction, const Hlong Exponent, const char* Norm, const char* Mode, const char* ResultType)

Herror T_fft_generic(const Hobject Image, Hobject* ImageFFT, const Htuple Direction, const Htuple Exponent, const Htuple Norm, const Htuple Mode, const Htuple ResultType)

Herror fft_generic(Hobject Image, Hobject* ImageFFT, const HTuple& Direction, const HTuple& Exponent, const HTuple& Norm, const HTuple& Mode, const HTuple& ResultType)

HImage HImage::FftGeneric(const HTuple& Direction, const HTuple& Exponent, const HTuple& Norm, const HTuple& Mode, const HTuple& ResultType) const

HImageArray HImageArray::FftGeneric(const HTuple& Direction, const HTuple& Exponent, const HTuple& Norm, const HTuple& Mode, const HTuple& ResultType) const

void FftGeneric(const HObject& Image, HObject* ImageFFT, const HTuple& Direction, const HTuple& Exponent, const HTuple& Norm, const HTuple& Mode, const HTuple& ResultType)

HImage HImage::FftGeneric(const HString& Direction, Hlong Exponent, const HString& Norm, const HString& Mode, const HString& ResultType) const

HImage HImage::FftGeneric(const char* Direction, Hlong Exponent, const char* Norm, const char* Mode, const char* ResultType) const

void HOperatorSetX.FftGeneric(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*ImageFFT, [in] VARIANT Direction, [in] VARIANT Exponent, [in] VARIANT Norm, [in] VARIANT Mode, [in] VARIANT ResultType)

IHImageX* HImageX.FftGeneric(
[in] BSTR Direction, [in] Hlong Exponent, [in] BSTR Norm, [in] BSTR Mode, [in] BSTR ResultType)

static void HOperatorSet.FftGeneric(HObject image, out HObject imageFFT, HTuple direction, HTuple exponent, HTuple norm, HTuple mode, HTuple resultType)

HImage HImage.FftGeneric(string direction, int exponent, string norm, string mode, string resultType)

Beschreibung

fft_genericfft_genericFftGenericfft_genericFftGenericFftGeneric berechnet die schnelle Fouriertransformation des Eingabebildes ImageImageImageImageImageimage. Da in der Literatur mehrere Definitionen der Hin- und Rücktransformation der Fouriertransformation existieren, erlaubt diese Prozedur dem Benutzer die Auswahl der für seine Bedürfnisse geeigneten Version.

Die allgemeine Version einer Fouriertransformation sieht wie folgt aus:

In der Literatur herrscht keine Einigkeit, ob das Vorzeichen s im Exponenten für die Hintransformation mit 1 oder -1 zu besetzen ist. Ebenso wenig Klarheit herrscht über den Normierungsfaktor c. Dieser wird manchmal für die Hintransformation mit 1 angegeben, manchmal mit M*N, manchmal wird er auch (für die unitäre FFT) zu gesetzt. Insbesondere in der Bildverarbeitung wird außerdem manchmal der konstante Term der FFT (im englischen DC-Term genannt) in die Bildmitte verschoben.

fft_genericfft_genericFftGenericfft_genericFftGenericFftGeneric erlaubt es, diese Auswahlmöglichkeiten individuell anzupassen. Mit DirectionDirectionDirectionDirectionDirectiondirection kann die logische Richtung der FFT bestimmt werden. (Dieser Parameter ist nicht überflüssig; Er dient dazu, zu unterscheiden, wie das Bild verschoben werden muss, falls der DC-Term in der Mitte des Bildes liegen soll.) Mögliche Werte sind 'to_freq'"to_freq""to_freq""to_freq""to_freq""to_freq" und 'from_freq'"from_freq""from_freq""from_freq""from_freq""from_freq". Mit dem Parameter ExponentExponentExponentExponentExponentexponent kann der Exponent der Transformation festgelegt werden. Er kann die Werte 1 und -1 annehmen. Mit NormNormNormNormNormnorm kann die gewünschte Normierung angegeben werden. Zulässige Werte sind 'none'"none""none""none""none""none", 'sqrt'"sqrt""sqrt""sqrt""sqrt""sqrt" und 'n'"n""n""n""n""n". Mit ModeModeModeModeModemode kann angegeben werden, wo der DC-Term der FFT liegen soll. Dabei kann zwischen 'dc_center'"dc_center""dc_center""dc_center""dc_center""dc_center" und 'dc_edge'"dc_edge""dc_edge""dc_edge""dc_edge""dc_edge" gewählt werden.

In jedem Fall ist auf die konsistente Verwendung der Parameter zu achten. D.h., die Normierungsfaktoren bei der Hin- und Rücktransformation müssen aufmultipliziert M*N ergeben. Bei der Rücktransformation ist ein anderes Vorzeichen für den Exponenten zu wählen als bei der Hintransformation. ModeModeModeModeModemode muss für beide Transformationen gleich gewählt werden.

Eine sinnvolle Kombination ist z.B. '(to_freq,-1,n,dc_edge)'"(to_freq,-1,n,dc_edge)""(to_freq,-1,n,dc_edge)""(to_freq,-1,n,dc_edge)""(to_freq,-1,n,dc_edge)""(to_freq,-1,n,dc_edge)" für die Hintransformation und '(from_freq,1,none,dc_edge)'"(from_freq,1,none,dc_edge)""(from_freq,1,none,dc_edge)""(from_freq,1,none,dc_edge)""(from_freq,1,none,dc_edge)""(from_freq,1,none,dc_edge)" für die Rücktransformation. In diesem Fall kann die FFT als Interpolation mit trigonometrischen Basisfunktionen interpretiert werden. Eine andere mögliche Kombination ist '(to_freq,-1,sqrt,dc_center)'"(to_freq,-1,sqrt,dc_center)""(to_freq,-1,sqrt,dc_center)""(to_freq,-1,sqrt,dc_center)""(to_freq,-1,sqrt,dc_center)""(to_freq,-1,sqrt,dc_center)" und '(from_freq,1,sqrt,dc_center)'"(from_freq,1,sqrt,dc_center)""(from_freq,1,sqrt,dc_center)""(from_freq,1,sqrt,dc_center)""(from_freq,1,sqrt,dc_center)""(from_freq,1,sqrt,dc_center)".

Der Parameter ResultTypeResultTypeResultTypeResultTypeResultTyperesultType erlaubt es, bei der Rücktransformation (DirectionDirectionDirectionDirectionDirectiondirection = 'from_freq'"from_freq""from_freq""from_freq""from_freq""from_freq") den Ergebnisbildtyp festzulegen. Bei der Hintransformation (DirectionDirectionDirectionDirectionDirectiondirection = 'to_freq'"to_freq""to_freq""to_freq""to_freq""to_freq") muss ResultTypeResultTypeResultTypeResultTypeResultTyperesultType auf 'complex'"complex""complex""complex""complex""complex" gesetzt werden.

Achtung

Die Berechnung erfolgt immer für das gesamte Bild, d.h., der Definitionsbereich des Eingabebildes wird ignoriert.

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject (byte / direction / cyclic / int1 / int2 / uint2 / int4 / real / complex)

Eingabebild im Ortsraum.

ImageFFTImageFFTImageFFTImageFFTImageFFTimageFFT (output_object)  image(-array) objectHImageHImageHImageHImageXHobject * (byte / direction / cyclic / int1 / int2 / uint2 / int4 / real / complex)

Fouriertransformiertes Bild.

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

Hin- oder Rücktransformation.

Defaultwert: 'to_freq' "to_freq" "to_freq" "to_freq" "to_freq" "to_freq"

Werteliste: 'from_freq'"from_freq""from_freq""from_freq""from_freq""from_freq", 'to_freq'"to_freq""to_freq""to_freq""to_freq""to_freq"

ExponentExponentExponentExponentExponentexponent (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (Hlong) (Hlong)

Vorzeichen des Exponenten.

Defaultwert: -1

Werteliste: -1, 1

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

Normierung des Ergebnisbildes.

Defaultwert: 'sqrt' "sqrt" "sqrt" "sqrt" "sqrt" "sqrt"

Werteliste: 'n'"n""n""n""n""n", 'none'"none""none""none""none""none", 'sqrt'"sqrt""sqrt""sqrt""sqrt""sqrt"

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

Position der Nullfrequenz im Frequenzraum.

Defaultwert: 'dc_center' "dc_center" "dc_center" "dc_center" "dc_center" "dc_center"

Werteliste: 'dc_center'"dc_center""dc_center""dc_center""dc_center""dc_center", 'dc_edge'"dc_edge""dc_edge""dc_edge""dc_edge""dc_edge"

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

Bildtyp des Ausgabebildes.

Defaultwert: 'complex' "complex" "complex" "complex" "complex" "complex"

Werteliste: 'byte'"byte""byte""byte""byte""byte", 'complex'"complex""complex""complex""complex""complex", 'cyclic'"cyclic""cyclic""cyclic""cyclic""cyclic", 'direction'"direction""direction""direction""direction""direction", 'int1'"int1""int1""int1""int1""int1", 'int2'"int2""int2""int2""int2""int2", 'int4'"int4""int4""int4""int4""int4", 'real'"real""real""real""real""real", 'uint2'"uint2""uint2""uint2""uint2""uint2"

Beispiel (C)

/* simulation of fft_image */
void my_fft(Hobject In, Hobject *Out)
{
  fft_generic(In,Out,"to_freq",-1,"sqrt","dc_center","complex");
}

/* simulation of fft_image_inv */
void my_fft_image_inv(Hobject In, Hobject *Out)
{
  fft_generic(In,Out,"from_freq",1,"sqrt","dc_center","byte");
}

Ergebnis

Sind alle Parameterwerte korrekt, dann liefert fft_genericfft_genericFftGenericfft_genericFftGenericFftGeneric den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels set_system(::'no_object_result',<Result>:)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

optimize_fft_speedoptimize_fft_speedOptimizeFftSpeedoptimize_fft_speedOptimizeFftSpeedOptimizeFftSpeed, read_fft_optimization_dataread_fft_optimization_dataReadFftOptimizationDataread_fft_optimization_dataReadFftOptimizationDataReadFftOptimizationData

Nachfolger

convol_fftconvol_fftConvolFftconvol_fftConvolFftConvolFft, correlation_fftcorrelation_fftCorrelationFftcorrelation_fftCorrelationFftCorrelationFft, phase_correlation_fftphase_correlation_fftPhaseCorrelationFftphase_correlation_fftPhaseCorrelationFftPhaseCorrelationFft, convol_gaborconvol_gaborConvolGaborconvol_gaborConvolGaborConvolGabor, convert_image_typeconvert_image_typeConvertImageTypeconvert_image_typeConvertImageTypeConvertImageType, power_bytepower_bytePowerBytepower_bytePowerBytePowerByte, power_realpower_realPowerRealpower_realPowerRealPowerReal, power_lnpower_lnPowerLnpower_lnPowerLnPowerLn, phase_degphase_degPhaseDegphase_degPhaseDegPhaseDeg, phase_radphase_radPhaseRadphase_radPhaseRadPhaseRad, energy_gaborenergy_gaborEnergyGaborenergy_gaborEnergyGaborEnergyGabor

Alternativen

fft_imagefft_imageFftImagefft_imageFftImageFftImage, fft_image_invfft_image_invFftImageInvfft_image_invFftImageInvFftImageInv, rft_genericrft_genericRftGenericrft_genericRftGenericRftGeneric

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren