IPSDK 4.1
IPSDK : Image Processing Software Development Kit
Fast Cross-Correlation 3d
imagefastCrossCorrelation3dImg (inImg3d,inTemplateImg)

Detailed Description

3D Cross correlation calculated in the Fourier domain

This algorithm computes the three dimensional Cross-Correlation (CC) between an image $ InImg3d $ and a template $ InTemplateImg $. To speed up the process, the calculation is performed in the frequency domain as follows :

\[ CC = \mathcal{F}^{-1}\left((\mathcal{F}(InImg3d - \mu_{InImg3d}) \overline{\mathcal{F}(InTemplateImg - \mu_{InTemplateImg})}\right) \]

Where $ \overline{I} $ is the configate of $I$, $ \mathcal{F}(I) $ represents the Fourier transform of an image $I$, $\mu_{InImg3d}$ is the local mean intensity of the input image in the neighbourhood defined by the template, $\mu_{InTemplateImg}$ is the template global mean intensity and $ \mathcal{F}^{-1} $ the inverse Fourier tranform.

The algorithm needs 4 working images with Real32 data to compute the Fourier transforms. If the template image is smaller than the reference image, it is padded before calculating its Fourier transform and two additional working images are used to store the padded template image.

Please, note that the results are not strictly identical to the Normalized Cross-Correlation 2d (NCC) and the maximum of the CC is located at the origin of the template whereas it is located at the template center coordinates for the NCC.

A 2d example of CC result is available at Normalized Cross-Correlation 2d.

See also
http://en.wikipedia.org/wiki/Cross-correlation

Example of Python code :

Example imports

import PyIPSDK
import PyIPSDK.IPSDKIPLFiltering as filter

Code Example

# opening of input images
inImg = PyIPSDK.loadTiffImageFile(inputImgPath)
# normalized cross correlation 2d computation
outImg = filter.fastCrossCorrelation3dImg(inImg, templateImg)

Example of C++ code :

Example informations

Header file

#include <IPSDKIPL/IPSDKIPLFiltering/Processor/FastCrossCorrelation3dImg/FastCrossCorrelation3dImg.h>

Code Example

// Generate a random image
ImagePtr pInImg = loadTiffImageFile(inputImgPath);
// Compute the NCC
ImagePtr pOutImg = fastCrossCorrelation3dImg(pInImg, pTemplateImg);