# Name

cnv - calculate the circulant convolution function between two images using multiplication in Fourier space.

# Usage

output = cnv(image, ref, center=True)

## Input

- image
- input image, can be either real or Fourier
- ref
- second input image, can be either real or Fourier.
- center
- if set to True (default), the origin of the result is at the center; if set to False, the origin is at (0,0), the option is much faster, but the result is difficult to use

## Output

- output
- circulant convolution function between image and ref. Real. The origin of the convolution function (term cnv(0,0,0)) is located at (int[n/2], int[n/2], int[n/2]) in 3D, (int[n/2], int[n/2]) in 2D, and at int[n/2] in 1D.

# Method

Calculation of the circulant convolution function between image

*f*and reference image*g*is performed in Fourier space as``hat(f)hat(g)``

- In real space, this corresponds to:
``cnv(n)=sum_(k=0)^(n_x-1)f((-k+n+n_x)(mod\n_x))g(k)````n = -(n_x)/2, ..., (n_x)/2``Note: for image size

*nx*and object size*m*, the circulant*cnv*is valid only within``+//- (n_x-m/2)``pixels from the origin. More distant*cnv*values are corrupted by the "wrap around" artifacts.

# Reference

Pratt, W. K., 1992. Digital image processing. Wiley, New York.

# Author / Maintainer

Pawel A. Penczek

# Keywords

- category 1
- FUNDAMENTALS
- category 2
- FOURIER

# Files

fundamentals.py

# Maturity

- stable
- works for most people, has been tested; test cases/examples available.

# Bugs

None. It is perfect.