Home  |  About Us  |  Link To Us  |  FAQ  |  Contact

# Separable N-Dimensional Convolution 1.0

Date Added: July 16, 2013  |  Visits: 234

This function is an implementation of N-dimensional convolution for the special case when the convolution kernel is separable.A continuous function f(x1, x2, ... xN) is considered separable if there exist N functions f1, f2, ... fN such that f(x1, x2, ... xN) = f1(x1)f2(x2)f3(x3)...fN(xN).In two dimensions, a discrete version of the separability condition is as follows: a 2D matrix is separable if it can be expressed as an outer product of two 1D vectors:a=[-1 0 1]; b=[1 0 -1]; H=a'*bIn this case, supplying Matlab's conv2 function with the two vectors a & b (one to convolve the rows with, the second to convolve the columns with) results in a faster computation than supplying conv2 with the outer product H.Convnsep.m extends this functionality to an arbitrary number of dimensions.This may be useful for applications such as:1. Smoothing a 3D image with separable filters2. Bilateral filtering (requires 4D convolution for filtering a 3D image)Notes and caveats:- As the total size of the variable being convolved increases towards the largest size allowable by Matlab (platform/architecture dependent), performance significantly degrades due to memory limitations, and may become worse than that of convn. Because Matlab requires a contiguous block of memory to allocate space for a variable, the maximum size for which performance is reasonable may be significantly lower than the "theoretical" size limit (which is 1.5 GB on my platform).- For convolution types other than 'full' (no discarding of any samples), only odd-sized kernels are currently working properly.

 Requirements: No special requirements Platforms: Matlab Keyword: Allowable,  Caveats,  Degrades,  Dependent,  Filtering,  Imagenotes,  Increases,  Largest,  Limitations,  Matlab,  Memory,  Performance,  Platformarchitecture,  Requires,  Significantly,  Total,  Variable,  Worse Users rating: 0/10