fft_genericfft_genericFftGenericFftGenericfft_generic (Operator)

Name

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

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

HImage HImage::FftGeneric(const wchar_t* Direction, Hlong Exponent, const wchar_t* Norm, const wchar_t* Mode, const wchar_t* ResultType) const   (Nur Windows)

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)

def fft_generic(image: HObject, direction: str, exponent: int, norm: str, mode: str, result_type: str) -> HObject

Beschreibung

fft_genericfft_genericFftGenericFftGenericFftGenericfft_generic 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_genericFftGenericFftGenericFftGenericfft_generic 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 ResultTypeResultTypeResultTypeResultTyperesultTyperesult_type 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 ResultTypeResultTypeResultTypeResultTyperesultTyperesult_type 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.

Ausführungsinformationen

Parameter

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

Eingabebild im Ortsraum.

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

Fouriertransformiertes Bild.

DirectionDirectionDirectionDirectiondirectiondirection (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (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 HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Vorzeichen des Exponenten.

Defaultwert: -1

Werteliste: -1, 1

NormNormNormNormnormnorm (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (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 HTuplestrHTupleHtuple (string) (string) (HString) (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"

ResultTypeResultTypeResultTypeResultTyperesultTyperesult_type (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (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_genericFftGenericFftGenericFftGenericfft_generic den Wert 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>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

optimize_fft_speedoptimize_fft_speedOptimizeFftSpeedOptimizeFftSpeedOptimizeFftSpeedoptimize_fft_speed, read_fft_optimization_dataread_fft_optimization_dataReadFftOptimizationDataReadFftOptimizationDataReadFftOptimizationDataread_fft_optimization_data

Nachfolger

convol_fftconvol_fftConvolFftConvolFftConvolFftconvol_fft, correlation_fftcorrelation_fftCorrelationFftCorrelationFftCorrelationFftcorrelation_fft, phase_correlation_fftphase_correlation_fftPhaseCorrelationFftPhaseCorrelationFftPhaseCorrelationFftphase_correlation_fft, convol_gaborconvol_gaborConvolGaborConvolGaborConvolGaborconvol_gabor, convert_image_typeconvert_image_typeConvertImageTypeConvertImageTypeConvertImageTypeconvert_image_type, power_bytepower_bytePowerBytePowerBytePowerBytepower_byte, power_realpower_realPowerRealPowerRealPowerRealpower_real, power_lnpower_lnPowerLnPowerLnPowerLnpower_ln, phase_degphase_degPhaseDegPhaseDegPhaseDegphase_deg, phase_radphase_radPhaseRadPhaseRadPhaseRadphase_rad, energy_gaborenergy_gaborEnergyGaborEnergyGaborEnergyGaborenergy_gabor

Alternativen

fft_imagefft_imageFftImageFftImageFftImagefft_image, fft_image_invfft_image_invFftImageInvFftImageInvFftImageInvfft_image_inv, rft_genericrft_genericRftGenericRftGenericRftGenericrft_generic

Modul

Foundation