CrossCorrNorm
Computes a normalized cross-correlation between an image and a template.
Syntax
Case 1: Operating on data with integer output
IppStatus ippiCrossCorrNorm_8u_C1RSfs(const Ipp8u*
pSrc
, int
srcStep
, IppiSize
srcRoiSize
, const Ipp8u*
pTpl
, int
tplStep
, IppiSize
tplRoiSize
, Ipp8u*
pDst
, int
dstStep
, int
scaleFactor
, IppEnum
algType
, Ipp8u*
pBuffer
);
Case 2: Operating on data with floating-point output
IppStatus ippiCrossCorrNorm_<mod>(const Ipp<srcDatatype>*
pSrc
, int
srcStep
, IppiSize
srcRoiSize
, const Ipp<srcDatatype>*
pTpl
, int
tplStep
, IppiSize
tplRoiSize
, Ipp32f*
pDst
, int
dstStep
, IppEnum
algType
, Ipp8u*
pBuffer
);
Supported values for
mod
:32f_C1R | 8u32f_C1R | 16u32f_C1R |
Case 3: Operating on data with integer output with TL functions
IppStatus ippsCrossCorrNorm_ 8u_C1RSfs_T (const Ipp8u*
pSrc
, int
srcStep
, IppiSize
srcRoiSize
, const Ipp8u*
pTpl
, int
tplStep
, IppiSize
tplRoiSize
, Ipp8u*
pDst
, int
dstStep
, int
scaleFactor
, IppEnum
algType
, Ipp8u*
pBuffer
);
Case 4: Operating on data with floating-point output with TL functions
IppStatus ippsCrossCorrNorm_ <mod>_T (const Ipp<srcDatatype>*
pSrc
, int
srcStep
, IppiSize
srcRoiSize
, const Ipp<srcDatatype>*
pTpl
, int
tplStep
, IppiSize
tplRoiSize
, Ipp32f*
pDst
, int
dstStep
, IppEnum
algType
, Ipp8u*
pBuffer
);
Supported values for
mod
:
32f_C1R | 8u32f_C1R | 16u32f_C1R |
Include Files
ippi.h
Domain Dependencies
Headers:
ippcore.h
,
ippvm.h
,
ipps.h
Libraries:
ippcore.lib
,
ippvm.lib
,
ipps.lib
Parameters
- pSrc
- Pointer to the source image ROI.
- srcStep
- Distance, in bytes, between the starting points of consecutive lines in the source image.
- srcRoiSize
- Size of the source ROI in pixels.
- pTpl
- Pointer to the template image.
- tplStep
- Distance, in bytes, between the starting points of consecutive lines in the template image.
- tplRoiSize
- Size of the template ROI in pixels.
- pDst
- Pointer to the destination image ROI.
- dstStep
- Distance, in bytes, between the starting points of consecutive lines in the destination image.
- scaleFactor
- Scale factor.
- algType
- Bit-field mask for the algorithm type definition. Possible values are the results of composition of theIppAlgType,IppiROIShape, andIppiNormOpvalues.
- pBuffer
- Pointer to the work buffer.
Description
This function operates with ROI.
Depending on the
IppiNormOp
value set to the algType
parameter, the function calculates the following results:IppiNormOp Value | Result |
---|---|
ippiNormNone | Cross-correlation values R tx r,c ) |
ippiNorm | Normalized cross-correlation values ρ tx r,c ) |
ippiNormCoefficient | Normalized correlation coefficients γ tx r,c ) |
For more information about how each value is calculated, see Image Proximity Measures.
The size of the resulting matrix depends on the
IppiROIShape
value:IppiROIShape Value | Matrix Size |
---|---|
ippiROIFull | ( W s W t * (H s H t |
ippiROISame | W s * H s |
ippiROIValid | ( W s W t * (H s H t |
where
- W,sHis the width and height of the source images
- W,tHis the width and height of the template imaget
Before using this function, you need to compute the size of the work buffer using the
ippiCrossCorrNormGetBufferSize
function.Return Values
- ippStsNoErr
- Indicates no error.
- ippStsNullPtrErr
- Indicates an error when any of the specified pointers is NULL.
- ippStsStepErr
- Indicates an error when the value ofsrcStep,tplStep, ordstStepis negative, or equal to zero.
- ippStsSizeErr
- Indicates an error when:
- thesrcRoiSizeortplRoiSizeis negative, or equal to zero.
- the value ofsrcRoiSizeis less than the corresponding value of thetplRoiSize.
- ippStsAlgTypeErr
- Indicates an error when:
- the result of the bitwise AND operation between thealgTypeandippAlgMaskdiffers from theippAlgAuto,ippAlgDirect, orippAlgFFTvalues.
- the result of the bitwise AND operation between thealgTypeandippiROIMaskdiffers from theippiROIFull,ippiROISame, orippiROIValidvalues.
- the result of the bitwise AND operation between thealgTypeandippiNormMaskdiffers from theippiNormNone,ippiNorm, orippiNormCoefficientvalues.
Example
The code example below demonstrates how to use the
ippiCrossCorrNormGetBufferSize
and ippiCrossCorrNorm
functions.IppStatus CrossCorrNormExample() { IppStatus status; IppiSize srcRoiSize = {5,4}; IppiSize tplRoiSize = {3,3}; IppiSize dstRoiSize = {5,4};// same as src Ipp32f pSrc[5*4] = { 1.0f, 2.0f, 1.5f, 4.1f, 3.6f, 0.2f, 3.2f, 2.5f, 1.5f, 10.0f, 5.0f, 6.8f, 0.5f, 4.1f, 1.1f, 7.1f, 4.2f, 2.2f, 8.7f, 10.0f}; Ipp32f pTpl[3*3] = {2.1f, 3.5f, 7.7f, 0.4f, 2.3f, 5.5f, 1.4f, 2.8f, 3.1f}; Ipp32f pDst[5*4]; int srcStep = 5*sizeof(Ipp32f); int tplStep = 3*sizeof(Ipp32f); int dstStep = 5*sizeof(Ipp32f); IppEnum funCfg = (IppEnum)(ippAlgAuto|ippiROISame|ippiNorm); Ipp8u *pBuffer; int bufSize; status = ippiCrossCorrNormGetBufferSize(srcRoiSize, tplRoiSize, ipp32f, funCfg, &bufSize); if ( status != ippStsNoErr ) return status; pBuffer = ippsMalloc_8u( bufSize ); status = ippiCrossCorrNorm_32f_C1R(pSrc, srcStep, srcRoiSize, pTpl, tplStep, tplRoiSize, pDst, dstStep, funCfg, pBuffer); printf_2D_32f("pDst", pDst, dstRoiSize); ippsFree( pBuffer ); return status; }
The result is as follows:
pDst -> 0.53 0.54 0.58 0.50 0.30 0.68 0.62 0.68 0.83 0.38 0.77 0.55 0.60 0.81 0.42 0.81 0.46 0.70 0.62 0.24