This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.


Determine whether filter coefficients are separable


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


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 numeric or logical, 2-D, and nonsparse.

Output Arguments


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 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.


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


collapse all

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

Create a Gaussian filter.

twoDimensionalFilter = fspecial('gauss');

Test the filter.

[isseparable,hcol,hrow] = isfilterseparable(twoDimensionalFilter)
isseparable =



hcol =


hrow =

   -0.1065   -0.7870   -0.1065

More About

collapse all

Separable two dimensional filters

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 width × height 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.


The isfilterseparable function uses the singular value decomposition svd function to determine the rank of the matrix.

Introduced in R2006a

Was this topic helpful?