MF_xcorr MD_xcorr ME_xcorr
MFb_xcorr MDb_xcorr MEb_xcorr
FunktionRäumliche Kreuzkorrelationsfunktion
Syntax C/C++#include <MFstd.h>
void MF_xcorr( fMatrix MC, fMatrix MA, fMatrix MB, ui ht, ui len ); void MFb_xcorr( fMatrix MC, fMatrix MA, fMatrix MB, ui ht, ui len, fVector Buf );
C++ MatObj#include <OptiVec.h>
void matrix<T>::xcorr( const matrix<T>& MA, const matrix<T>& MB ); void matrix<T>::b_xcorr( const matrix<T>& MA, const matrix<T>& MB, vector<T>& Buf );
Pascal/Delphiuses MFstd;
procedure MF_xcorr( MC, MA, MB:fMatrix; ht, len:UIntSize ); procedure MFb_xcorr( MC, MA, MB:fMatrix; ht, len:UIntSize; Buf:fVector );
CUDA-Funktion C/C++#include <cudaMFstd.h>
int cudaMF_xcorr( fMatrix d_MC, fMatrix d_MA, fMatrix d_MB, ui ht, ui len );
void MFcu_xcorr( fMatrix h_MC, fMatrix h_MA, fMatrix h_MB, ui ht, ui len );
CUDA-Funktion Pascal/Delphiuses MFstd;
function cudaMF_xcorr( d_MC, d_MA, d_MB:fMatrix; ht, len:UIntSize ): IntBool;
procedure MFcu_xcorr( h_MC, h_MA, h_MB:fMatrix; ht, len:UIntSize );
BeschreibungDie räumliche Kreuzkorrelationsfunktion (engl.: spatial cross-correlation function, SCCF) von MA und MB wird in MC in der folgenden Weise gespeichert: Die Zeilenelemente MCi,0 bis MCi,len/2-1 enthalten die SCCF für 0 und für positive x-Verschiebungen. Beginnend mit der größten negativen Verschiebung in MCi,len/2+1 enthalten die Elemente bis zu MCi,len-1 die SCCF für negative Verschiebungen. Da diese Funktion MA und MB als periodisch annimmt, ist die SCCF für die größte positive Verschiebung gleich der SCCF für die größte negative Verschiebung und wird als MCi,len/2 gespeichert.
In ähnlicher Weise enthalten die Spaltenelemente MC0,j bis MClen/2-1,j die SCCF für 0 und für positive y-Verschiebungen. Beginnend mit der größten negativen Verschiebung in MClen/2+1,j enthalten die Elemente bis zu MClen-1,j die SCCF für negative Verschiebungen.
Um die SCCF in normale Reihenfolge zu bringen, rufe man
MF_Rows_rotate( MC, ht, len, len/2 );
MF_Cols_rotate( MC, ht, len, ht/2 );

Hiernach befindet sich der Nullpunkt an der Stelle MCht/2,len/2.
Falls MA oder MB nicht-periodisch sind, sollten Randeffekte mit den bei MF_convolve beschriebenen Methoden vermieden werden.
Die Dimensionen aller drei beteiligter Matrizen sind gleich. Dabei müssen sowohl ht als auch len ganzzahlige Potenzen von 2 sein.

Intern benötigt MF_xcorr 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_xcorr zu verwenden. Die Größe von Buf muss dabei für C/C++ >= 2*ht*(len+2) sein, fü Pascal/Delphi >= 2*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.

FehlerbehandlungFalls entweder len oder ht nicht eine Potenz von 2 ist, meldet sich VF_FFT (worauf MF_xcorr basiert) mit der Fehlermeldung "Size must be an integer power of 2" und bricht das Programm ab.
QuerverweisMF_autocorr,   Kap. 12

MatrixLib Inhaltsverzeichnis  OptiVec Home