Discrete 2D convolution with a kernel K of size (2k+1)×(2k+1), centered on the origin, is:
O(x, y) = Σᵢ₌₋ₖ^k Σⱼ₌₋ₖ^k I(x+i, y+j) · K(i, j)
The notation hides a subtlety. Mathematicians often define convolution with a flipped kernel: (I * K)(x, y) = Σ I(x−i, y−j) K(i, j). Image-processing engineers usually leave the kernel unflipped, which is technically a correlation, and for symmetric kernels such as Gauss and Laplace the distinction vanishes. Asymmetric kernels such as Sobel are usually written with no flip in mind. The StrataQuest reference does not say whether Custom filter flips the kernel, so for an asymmetric kernel, check the sign of the response on a known edge before relying on it.
Linearity makes convolutional filters composable. (K₁ + K₂) * I = K₁ * I + K₂ * I lets you build a complex filter by adding simpler ones. (K₁ * K₂) * I = K₁ * (K₂ * I) lets you apply one combined kernel instead of two sequential filters, which is useful when the combined kernel is small but the individual ones aren't.