Name
fft_genericfft_genericFftGenericfft_genericFftGenericFftGeneric — Schnelle Fouriertransformation.
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)
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:
M-1 N-1
--- ---
1 \ \ s*2*pi*i*(k*m/M+l*n/N)
F(m,n) = - * / / e * f(k,l)
c --- ---
k=0 l=0
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
sqrt(M*N) 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.
Die Berechnung erfolgt immer für das gesamte Bild, d.h., der
Definitionsbereich des Eingabebildes wird ignoriert.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
- Automatisch parallelisiert auf Kanalebene.
- Automatisch parallelisiert auf interner Datenebene.
Fouriertransformiertes Bild.
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"
Vorzeichen des Exponenten.
Defaultwert: -1
Werteliste: -1, 1
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"
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"
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"
/* 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");
}
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.
optimize_fft_speedoptimize_fft_speedOptimizeFftSpeedoptimize_fft_speedOptimizeFftSpeedOptimizeFftSpeed,
read_fft_optimization_dataread_fft_optimization_dataReadFftOptimizationDataread_fft_optimization_dataReadFftOptimizationDataReadFftOptimizationData
convol_fftconvol_fftConvolFftconvol_fftConvolFftConvolFft,
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
fft_imagefft_imageFftImagefft_imageFftImageFftImage,
fft_image_invfft_image_invFftImageInvfft_image_invFftImageInvFftImageInv,
rft_genericrft_genericRftGenericrft_genericRftGenericRftGeneric
Foundation