Learn R Programming

spatstat.geom (version 3.3-2)

convolve.im: Convolution of Pixel Images

Description

Computes the convolution of two pixel images.

Usage

convolve.im(X, Y=X, ..., reflectX=FALSE, reflectY=FALSE)

Value

A pixel image (an object of class "im") representing the convolution of X and Y.

Arguments

X

A pixel image (object of class "im".

Y

Optional. Another pixel image.

...

Ignored.

reflectX,reflectY

Logical values specifying whether the images X and Y (respectively) should be reflected in the origin before computing the convolution.

Author

Adrian Baddeley Adrian.Baddeley@curtin.edu.au and Rolf Turner rolfturner@posteo.net

Details

The convolution of two pixel images \(X\) and \(Y\) in the plane is the function \(C(v)\) defined for each vector \(v\) as $$ C(v) = \int X(u)Y(v-u)\, {\rm d}u $$ where the integral is over all spatial locations \(u\), and where \(X(u)\) and \(Y(u)\) denote the pixel values of \(X\) and \(Y\) respectively at location \(u\).

This command computes a discretised approximation to the convolution, using the Fast Fourier Transform. The return value is another pixel image (object of class "im") whose greyscale values are values of the convolution.

If reflectX = TRUE then the pixel image X is reflected in the origin (see reflect) before the convolution is computed, so that convolve.im(X,Y,reflectX=TRUE) is mathematically equivalent to convolve.im(reflect(X), Y). (These two commands are not exactly equivalent, because the reflection is performed in the Fourier domain in the first command, and reflection is performed in the spatial domain in the second command).

Similarly if reflectY = TRUE then the pixel image Y is reflected in the origin before the convolution is computed, so that convolve.im(X,Y,reflectY=TRUE) is mathematically equivalent to convolve.im(X, reflect(Y)).

See Also

imcov, reflect

Examples

Run this code
  if(interactive()) {
    X <- as.im(letterR)
    Y <- as.im(square(1))
  } else {
    ## coarser image for testing
    X <- as.im(letterR, dimyx=32)
    Y <- as.im(square(1), dimyx=32)
  }
  plot(convolve.im(X, Y))
  plot(convolve.im(X, Y, reflectX=TRUE))
  plot(convolve.im(X))

Run the code above in your browser using DataLab