Main Page | Report this Page
Science Forum Index  »  Image Processing Forum  »  Determining if a kernel is seperable?...
Page 1 of 1    

Determining if a kernel is seperable?...

Author Message
fdm...
Posted: Wed Sep 16, 2009 3:14 am
Guest
I am currently working with 2D image interpolation and is experimenting with
BSpline and gaussian kernels. I have read that if a kernel is seperable the
"inner" weights can be determined using the separability property of the
kernel:

x02 - - o12 - - o22
| | |
x01 - - o11 - - o21
| | |
x00 - - x10 - - x20

In this case:

o11 = x10*x01
o21 = x20*x01
o12 = x10*x02
o22 = x20*x02

But how does one determine of a kernel is separable?
 
Nicolas Bonneel...
Posted: Wed Sep 16, 2009 3:39 am
Guest
fdm a écrit :
[quote:815d954f74]I am currently working with 2D image interpolation and is experimenting
with BSpline and gaussian kernels. I have read that if a kernel is
seperable the "inner" weights can be determined using the separability
property of the kernel:

x02 - - o12 - - o22
| | |
x01 - - o11 - - o21
| | |
x00 - - x10 - - x20

In this case:

o11 = x10*x01
o21 = x20*x01
o12 = x10*x02
o22 = x20*x02

But how does one determine of a kernel is separable?
[/quote:815d954f74]
A (symmetric) separable kernel is such that K = x*transpose(x), with x a
column vector. So, the space spanned by the matrix is generated by a
single vector. The matrix is thus rank 1.
I would guess than reciprocally, any rank 1 matrix represents a
separable kernel....


--
Nicolas Bonneel
http://www-sop.inria.fr/reves/Nicolas.Bonneel/
 
aruzinsky...
Posted: Wed Sep 16, 2009 5:28 am
Guest
On Sep 16, 3:14 am, "fdm" <f... at (no spam) gk.com> wrote:
[quote:b00f8c4944]I am currently working with 2D image interpolation and is experimenting with
BSpline and gaussian kernels. I have read that if a kernel is seperable the
"inner" weights can be determined using the separability property of the
kernel:

x02 - - o12 - - o22
|              |          |
x01 - - o11 - - o21
|              |          |
x00 - - x10 - - x20

In this case:

o11 = x10*x01
o21 = x20*x01
o12 = x10*x02
o22 = x20*x02

But how does one determine of a kernel is separable?
[/quote:b00f8c4944]
As a practical matter, you want to include cases that are almost
separable so that you can approximate them with separable kernels. In
that case, you should use Singular Value Decomposition (SVD), A UDV. If only one element of the D matrix is nonzero, the matrix is
separable. If the absolute value of one element is much larger than
any of the others which are nonzero, it can be approximated by a
separable matrix. Also, some kernels can be approximated by the sum
of separable kernels using SVD.
 
Martin Brown...
Posted: Wed Sep 16, 2009 6:45 am
Guest
fdm wrote:
[quote:92dc3d3f38]I am currently working with 2D image interpolation and is experimenting
with BSpline and gaussian kernels. I have read that if a kernel is
seperable the "inner" weights can be determined using the separability
property of the kernel:

x02 - - o12 - - o22
| | |
x01 - - o11 - - o21
| | |
x00 - - x10 - - x20

In this case:

o11 = x10*x01
o21 = x20*x01
o12 = x10*x02
o22 = x20*x02

But how does one determine of a kernel is separable?
[/quote:92dc3d3f38]
For a kernel to be separable every column must be a linear multiple of
every other column, and the same rule applies for every row.

So if a kernel is separable you should be able to sum the rows and
columns to get a pair of vectors which when multiplied together give the
original kernel to within a normalising factor.


Regards,
Martin Brown
 
Johann Blaser...
Posted: Wed Sep 16, 2009 11:28 am
Guest
thats surely necessary, but not sufficient.
the sobel-kernel is clearly separable, but if i sum the derivative
direction i get zeros.

an easy way to separate a kernel by using a computer is doing a
lu-factorization. the first column of the l-matrix and the first
row of the u-matrix give the two 1d-kernels. by multiplying
the two 1d-kernels and comparing with the original matrix
separability can be checked.

Regards,
Johann


[quote:ed326fc780]But how does one determine of a kernel is separable?

For a kernel to be separable every column must be a linear multiple of
every other column, and the same rule applies for every row.

So if a kernel is separable you should be able to sum the rows and
columns to get a pair of vectors which when multiplied together give the
original kernel to within a normalising factor.


Regards,
Martin Brown[/quote:ed326fc780]
 
Nicolas Bonneel...
Posted: Wed Sep 16, 2009 1:29 pm
Guest
Johann Blaser a écrit :
[quote:6f035a03ca]thats surely necessary, but not sufficient.
the sobel-kernel is clearly separable, but if i sum the derivative
direction i get zeros.

an easy way to separate a kernel by using a computer is doing a
lu-factorization. the first column of the l-matrix and the first
row of the u-matrix give the two 1d-kernels. by multiplying
the two 1d-kernels and comparing with the original matrix
separability can be checked.
[/quote:6f035a03ca]
Isn't LU supposed to work only on full rank matrices ? Otherwise the
pivot is 0 at some point.. isn't it ? But you can check for the presence
of a 0 in the pivot, and if it happens after the computation of the 1st
row/column, then the matrix is rank 1 and thus separable.
Note that for symmetric matrices, Cholesky is at least 2 faster.

Cheers


--
Nicolas Bonneel
http://www-sop.inria.fr/reves/Nicolas.Bonneel/
 
 
Page 1 of 1    
All times are GMT - 5 Hours
The time now is Mon Nov 23, 2009 11:52 am