fft_genericfft_genericFftGenericFftGeneric (Operator)

Name

fft_genericfft_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)

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)

Beschreibung

fft_genericfft_genericFftGenericFftGenericFftGeneric berechnet die schnelle Fouriertransformation des Eingabebildes ImageImageImageImageimage. 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_genericFftGenericFftGenericFftGeneric erlaubt es, diese Auswahlmöglichkeiten individuell anzupassen. Mit DirectionDirectionDirectionDirectiondirection 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" und 'from_freq'"from_freq""from_freq""from_freq""from_freq". Mit dem Parameter ExponentExponentExponentExponentexponent kann der Exponent der Transformation festgelegt werden. Er kann die Werte 1 und -1 annehmen. Mit NormNormNormNormnorm kann die gewünschte Normierung angegeben werden. Zulässige Werte sind 'none'"none""none""none""none", 'sqrt'"sqrt""sqrt""sqrt""sqrt" und 'n'"n""n""n""n". Mit ModeModeModeModemode kann angegeben werden, wo der DC-Term der FFT liegen soll. Dabei kann zwischen 'dc_center'"dc_center""dc_center""dc_center""dc_center" und '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. ModeModeModeModemode 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)" 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)" 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)" 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)".

Der Parameter ResultTypeResultTypeResultTypeResultTyperesultType erlaubt es, bei der Rücktransformation (DirectionDirectionDirectionDirectiondirection = 'from_freq'"from_freq""from_freq""from_freq""from_freq") den Ergebnisbildtyp festzulegen. Bei der Hintransformation (DirectionDirectionDirectionDirectiondirection = 'to_freq'"to_freq""to_freq""to_freq""to_freq") muss ResultTypeResultTypeResultTypeResultTyperesultType auf '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

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

Eingabebild im Ortsraum.

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

Fouriertransformiertes Bild.

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

Hin- oder Rücktransformation.

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

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

ExponentExponentExponentExponentexponent (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Vorzeichen des Exponenten.

Defaultwert: -1

Werteliste: -1, 1

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

Normierung des Ergebnisbildes.

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

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

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

Position der Nullfrequenz im Frequenzraum.

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

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

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

Bildtyp des Ausgabebildes.

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

Werteliste: 'byte'"byte""byte""byte""byte", 'complex'"complex""complex""complex""complex", 'cyclic'"cyclic""cyclic""cyclic""cyclic", 'direction'"direction""direction""direction""direction", 'int1'"int1""int1""int1""int1", 'int2'"int2""int2""int2""int2", 'int4'"int4""int4""int4""int4", 'real'"real""real""real""real", '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_genericFftGenericFftGenericFftGeneric 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>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

optimize_fft_speedoptimize_fft_speedOptimizeFftSpeedOptimizeFftSpeedOptimizeFftSpeed, read_fft_optimization_dataread_fft_optimization_dataReadFftOptimizationDataReadFftOptimizationDataReadFftOptimizationData

Nachfolger

convol_fftconvol_fftConvolFftConvolFftConvolFft, correlation_fftcorrelation_fftCorrelationFftCorrelationFftCorrelationFft, phase_correlation_fftphase_correlation_fftPhaseCorrelationFftPhaseCorrelationFftPhaseCorrelationFft, convol_gaborconvol_gaborConvolGaborConvolGaborConvolGabor, convert_image_typeconvert_image_typeConvertImageTypeConvertImageTypeConvertImageType, power_bytepower_bytePowerBytePowerBytePowerByte, power_realpower_realPowerRealPowerRealPowerReal, power_lnpower_lnPowerLnPowerLnPowerLn, phase_degphase_degPhaseDegPhaseDegPhaseDeg, phase_radphase_radPhaseRadPhaseRadPhaseRad, energy_gaborenergy_gaborEnergyGaborEnergyGaborEnergyGabor

Alternativen

fft_imagefft_imageFftImageFftImageFftImage, fft_image_invfft_image_invFftImageInvFftImageInvFftImageInv, rft_genericrft_genericRftGenericRftGenericRftGeneric

Modul

Foundation