MF_filter
| MD_filter |
ME_filter |
MCF_filter |
MCD_filter |
MCE_filter |
MFb_filter
| MDb_filter |
MEb_filter |
MCFb_filter |
MCDb_filter |
MCEb_filter |
|
Funktion | Raumfrequenz-Filterung |
|
Syntax C/C++ | #include <MFstd.h>
void MF_filter( fMatrix Y, fMatrix X, fMatrix Flt, ui ht, ui len );
void MFb_filter( fMatrix Y, fMatrix X, fMatrix Flt, ui ht, ui len, fVector Buf ); |
C++ MatObj | #include <OptiVec.h>
void matrix<T>::filter( const matrix<T>& MX, const matrix<T>& MFlt );
void matrix<T>::b_filter( const matrix<T>& MX, const matrix<T>& MFlt, vector<T>& Buf ); |
Pascal/Delphi | uses MFstd;
procedure MF_filter( MY, MX, MFlt:fMatrix; ht, len:UIntSize );
procedure MFb_filter( MY, MX, MFlt:fMatrix; ht, len:UIntSize; Buf:fVector ); |
|
CUDA-Funktion C/C++ | #include <cudaMFstd.h>
int cudaMF_filter( fMatrix d_MY, fMatrix d_MX, fMatrix d_MFlt, ui ht, ui len );
void MFcu_filter( fMatrix h_MY, fMatrix h_MX, fMatrix h_MFlt, ui ht, ui len );
|
CUDA-Funktion Pascal/Delphi | uses MFstd;
function cudaMF_filter( d_MY, d_MX, d_MFlt:fMatrix; ht, len:UIntSize ): IntBool;
procedure MFcu_filter( h_MY, h_MX, h_MFlt:fMatrix; ht, len:UIntSize );
|
|
Beschreibung | Der Raumfrequenz-Filer MFlt wird auf die Matrix X angewandt. Intern geschieht dies durch Multiplikation der Fourier-Transformierten von MX mit MFlt und Rücktransformation des Produktes.
Komplexe Versionen: MX, MY und der Filter MFlt sind komplexe Matrizen.
Reelle Versionen: MX und MY sind reell. MFlt muss in dem gepackt-komplexen Format vorliegen, das man durch Fourier-Transformation einer reellen Matrix mit MF_FFT oder durch Aufruf von MF_convolve erhält. Siehe MF_FFT bezüglich des gepackt-komplexen Formates.
Falls MX nicht-periodisch ist, kann das Filter-Ergebnis durch Randeffekte beeinträchtigt sein. Siehe VF_convolve bezüglich der Vermeidung von Randeffekten. Wie dort für Vektoren beschrieben, sollte auch die Matrix X eventuell in eine größere Matrix eingebettet oder mögliche lineare Trends in beiden Dimensionen beseitigt werden.
Intern benötigt MF_filter zusätzlichen Pufferspeicher, der automatisch reserviert und wieder freigegeben wird. Bei wiederholten Aufrufen wäre dies ineffizient. Es wird empfohlen, für solche Fälle stattdessen MFb_filter zu verwenden. Für die Größe von Buf gilt dabei:
C/C++, reell: | sizeof(Buf) >= ht*(len+4) |
C/C++, komplex: | sizeof(Buf) >= ht*len |
Pascal/Delphi, reell oder komplex: | sizeof(Buf) >= ht*len |
Außerdem muss Buf 128-bit (P8) bzw. 256-bit( P9) ausgerichtet sein. Um dies zu garantieren, sollte man nur Vektoren als Buf verwenden, die mit der VF_vector-Familie alloziert wurden.
|
|
Fehlerbehandlung | Falls entweder len oder ht nicht eine Potenz von 2 ist, meldet sich VF_FFT (worauf MF_filter basiert) mit der Fehlermeldung "Size must be an integer power of 2" und bricht das Programm ab. |
|
|