S = isfilterseparable(H) [S, HCOL, HROW]
= isfilterseparable(H)

Description

S = isfilterseparable(H) takes
in the filter kernel H and returns 1 (true)
when the filter is separable, and 0 (false) otherwise.

[S, HCOL, HROW]
= isfilterseparable(H) uses the filter
kernel, H, to return its vertical coefficients HCOL and
horizontal coefficients HROW when the filter
is separable. Otherwise, HCOL and HROW are
empty.

Input Arguments

H

H numeric or logical, 2-D, and nonsparse.

Output Arguments

HCOL

HCOL is the same data type as input H when H is
either single or double floating point. Otherwise, HCOL becomes
double floating point. If S is true, HCOL is
a vector of vertical filter coefficients. Otherwise, HCOL is
empty.

HROW

HROW is the same data type as input H when H is
either single or double floating point. Otherwise, HROW becomes
double floating point. If S is true, HROW is
a vector of horizontal filter coefficients. Otherwise, HROW is
empty.

S

Logical variable that is set to true, when
the filter is separable, and false, when it is
not.

Examples

Determine if the Gaussian filter created using the fspecial function is separable.

% Create a gaussian filter
two_dimensional_filter = fspecial('gauss');
% Test with isfilterseparable
[isseparable, hcol, hrow] = ...
isfilterseparable(two_dimensional_filter)

When you run this example, notice that hcol*hrow equals
the two_dimensional_filter. This result is expected
for a Gaussian filter.

Separable two-dimensional filters reflect
the outer product of two vectors. Separable filters help reduce the
number of calculations required.

A two-dimensional convolution calculation requires a number
of multiplications equal to the widthheight for
each output pixel. The general case equation for a two-dimensional
convolution is:

If the filter H is
separable then,

Shifting the filter
instead of the image, the two-dimensional equation becomes:

This
calculation requires only (width + height) number of multiplications
for each pixel.