Operator Reference

correlation_fftcorrelation_fftCorrelationFftCorrelationFftcorrelation_fft (Operator)

correlation_fftcorrelation_fftCorrelationFftCorrelationFftcorrelation_fft — Multiply one image with the complex conjugate of another image in the frequency domain.

Signature

correlation_fft(ImageFFT1, ImageFFT2 : ImageCorrelation : : )

Herror correlation_fft(const Hobject ImageFFT1, const Hobject ImageFFT2, Hobject* ImageCorrelation)

Herror T_correlation_fft(const Hobject ImageFFT1, const Hobject ImageFFT2, Hobject* ImageCorrelation)

void CorrelationFft(const HObject& ImageFFT1, const HObject& ImageFFT2, HObject* ImageCorrelation)

HImage HImage::CorrelationFft(const HImage& ImageFFT2) const

static void HOperatorSet.CorrelationFft(HObject imageFFT1, HObject imageFFT2, out HObject imageCorrelation)

HImage HImage.CorrelationFft(HImage imageFFT2)

def correlation_fft(image_fft1: HObject, image_fft2: HObject) -> HObject

Description

As part of calculating the correlation between two images, correlation_fftcorrelation_fftCorrelationFftCorrelationFftcorrelation_fft multiplies the Fourier transform of the first image ImageFFT1ImageFFT1ImageFFT1imageFFT1image_fft1 with the complex conjugate of the Fourier-transformed second image ImageFFT2ImageFFT2ImageFFT2imageFFT2image_fft2.

According to the correlation theorem, the non-normalized correlation of two images in pixel space can be obtained in three steps:

  1. Transforming the images into frequency space using a Fourier transform (see, e.g., fft_genericfft_genericFftGenericFftGenericfft_generic).

  2. Multiplying one transformed image with the complex conjugate of the other transformed image (pixel-wise).

  3. Transforming the result back into pixel space using an inverse Fourier transform (see, e.g., fft_genericfft_genericFftGenericFftGenericfft_generic).

The operator correlation_fftcorrelation_fftCorrelationFftCorrelationFftcorrelation_fft is used to perform the second step, i.e., ImageFFT1ImageFFT1ImageFFT1imageFFT1image_fft1 is pixel-wise multiplied with the complex conjugate of ImageFFT2ImageFFT2ImageFFT2imageFFT2image_fft2.

It should be noted that in order to achieve a correct scaling of the correlation in the spatial domain, the operators fft_genericfft_genericFftGenericFftGenericfft_generic or rft_genericrft_genericRftGenericRftGenericrft_generic with NormNormNormnormnorm = 'none'"none""none""none""none" must be used for the forward transform (step 1) and fft_genericfft_genericFftGenericFftGenericfft_generic or rft_genericrft_genericRftGenericRftGenericrft_generic with NormNormNormnormnorm = 'n'"n""n""n""n" for the reverse transform (step 3). If ImageFFT1ImageFFT1ImageFFT1imageFFT1image_fft1 and ImageFFT2ImageFFT2ImageFFT2imageFFT2image_fft2 contain the same number of images, the corresponding images are multiplied pairwise. Otherwise, ImageFFT2ImageFFT2ImageFFT2imageFFT2image_fft2 must contain only one single image. In this case, the multiplication is performed for each image of ImageFFT1ImageFFT1ImageFFT1imageFFT1image_fft1 with ImageFFT2ImageFFT2ImageFFT2imageFFT2image_fft2.

Attention

The filtering is always performed on the entire image, i.e., the domain of the image is ignored.

Execution Information

  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).
  • Multithreading scope: global (may be called from any thread).
  • Automatically parallelized on tuple level.
  • Automatically parallelized on channel level.

Parameters

ImageFFT1ImageFFT1ImageFFT1imageFFT1image_fft1 (input_object)  (multichannel-)image(-array) objectHImageHObjectHObjectHobject (complex)

Fourier-transformed input image 1.

ImageFFT2ImageFFT2ImageFFT2imageFFT2image_fft2 (input_object)  (multichannel-)image(-array) objectHImageHObjectHObjectHobject (complex)

Fourier-transformed input image 2.

Number of elements: ImageFFT2 == ImageFFT1 || ImageFFT2 == 1

ImageCorrelationImageCorrelationImageCorrelationimageCorrelationimage_correlation (output_object)  image(-array) objectHImageHObjectHObjectHobject * (complex)

Result in the frequency domain.

Example (HDevelop)

* Compute the auto-correlation of an image.
get_image_size(Image,Width,Height)
rft_generic(Image,ImageFFT,'to_freq','none','complex',Width)
correlation_fft(ImageFFT,ImageFFT,Correlation)
rft_generic(Correlation,AutoCorrelation,'from_freq','n','real',Width)

Result

correlation_fftcorrelation_fftCorrelationFftCorrelationFftcorrelation_fft returns 2 ( H_MSG_TRUE) if all parameters are correct. If the input is empty the behavior can be set via set_system(::'no_object_result',<Result>:)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>). If necessary, an exception is raised.

Possible Predecessors

fft_genericfft_genericFftGenericFftGenericfft_generic, fft_imagefft_imageFftImageFftImagefft_image, rft_genericrft_genericRftGenericRftGenericrft_generic

Possible Successors

fft_genericfft_genericFftGenericFftGenericfft_generic, fft_image_invfft_image_invFftImageInvFftImageInvfft_image_inv, rft_genericrft_genericRftGenericRftGenericrft_generic

Alternatives

phase_correlation_fftphase_correlation_fftPhaseCorrelationFftPhaseCorrelationFftphase_correlation_fft

Module

Foundation