IPSDK 4.1.0.2
IPSDK : Image Processing Software Development Kit
Normalized Cross-Correlation Measure 2d
scalarnormalizedCrossCorrelationMsr2d (inImg1,inImg2)

Detailed Description

measures the global Normalized Cross-Correlation between two images

This algorithms computes the global Nocmalized Cross-Correlation (NCC) between the two input images. In opposition to the Normalized Cross-Correlation 2d algorithm which returns an image, the result of this algorithm is a a single scalar value.

The 2D NCC is calculated according to the following formula :

\[ NCC(InImg1(\textbf{x}), InImg2(\textbf{x})) = \frac{\sum_{\textbf{x} \in \Omega} (InImg1(\textbf{x}) - \overline{InImg1}) (InImg2(\textbf{x}) - \overline{InImg2}) } {\sqrt{\sum_{\textbf{x} \in \Omega} (InImg1(\textbf{x}) - \overline{InImg1})^2 \sum_{\textbf{x} \in \Omega} (InImg2(\textbf{x}) - \overline{InImg2})^2}} \]

Where $\Omega = (sizeX, sizeY)$ is the image domain definition.

The result belongs to $[-1, 1]$, and equals 1 when the images exactly matches, -1 when the images are exactly inverted and 0 when the images are totally different from each other.

The figure below illustrates the NCC behaviour for several cases. First, we show the NCC between an image and its rotation by 45° : the NCC equals approximately 0.226. Then, we calculates the NCC between an image and the ame image with the intensity inversed. The result is approximately -1. Finally, we computes the correlation between two different images. The result is approximately 0.1, i.e. close to 0.

normalizedCrossCorrelationMsr2d.png

If the input images has several slices along the Z, C or T dimensions, the result is not a scalar but a collection of ipsdk::imaproc::attr::NCCResult. This data structure stores the actual result in its Result field. The other fields can be ignored as long as they are used for the calculation.

See also
https://en.wikipedia.org/wiki/Cross-correlation for more details

Example of Python code :

Example imports

import PyIPSDK
import PyIPSDK.IPSDKIPLGlobalMeasure as glbmsr

Code Example

# retrieve measurement results
nccValue = glbmsr.normalizedCrossCorrelationMsr2d(inImg1, inImg2)
print("Global NCC value = " + str(nccValue))

Example of C++ code :

Example informations

Header file

#include <IPSDKIPL/IPSDKIPLGlobalMeasure/Processor/NormalizedCrossCorrelationMsr2d/NormalizedCrossCorrelationMsr2d.h>

Code Example

const ipReal64 ncc = normalizedCrossCorrelationMsr2d(pInImg1, pInImg2);