convolution2D {imagine} | R Documentation |
Make convolution calculations from numeric matrix
Description
This function takes a matrix
object, and for each cell
multiplies its neighborhood by the kernel
. Finally, it returns for
each cell the mean of the kernel-weighted sum.
Usage
convolution2D(X, kernel, times = 1, normalize = FALSE)
convolutionQuantile(X, kernel, probs, times = 1, normalize = FALSE)
convolutionMedian(X, kernel, times = 1)
Arguments
X |
A numeric |
kernel |
A little matrix used as mask for each cell of |
times |
How many times do you want to apply the filter? |
normalize |
|
probs |
|
Details
Convolution is a mathematical operation that combines two arrays of numbers to produce an array of the same structure. The output will consist of only valid values, meaning those where both arrays have non-missing data. Consequently, any missing values (NAs) in the input matrix will propagate outwards to the extent of the convolution kernel.
Through normalization, the output of each convolution window is scaled by
dividing it by the sum of the absolute values of the kernel
(sum(abs(as.numeric(kernel)))
, disabled by default).
Value
convolution2D
returns a matrix
object with the same
dimensions of X
.
convolutionQuantile
uses the kernel but, for each cell, it
returns the position of quantile 'probs' (value between 0 and 1).
convolutionMedian
is a wrapper of convolutionQuantile
with probs = 0.5.
Examples
# Generate example matrix
nRows <- 50
nCols <- 100
myMatrix <- matrix(runif(nRows*nCols, 0, 100), nrow = nRows, ncol = nCols)
kernel <- diag(3)
# Make convolution
myOutput1 <- convolution2D(myMatrix, kernel)
myOutput2 <- convolutionQuantile(myMatrix, kernel, probs = 0.7)
# Plot results
par(mfrow = c(2, 2))
image(myMatrix, zlim = c(0, 100))
image(myOutput1, zlim = c(0, 100))
image(myOutput2, zlim = c(0, 100))