2

I am trying to decompose a Sobel filter into two vectors (column and a row) using Matlab.

If our Sobel filter is

A = [1 0 -1; 2 0 -2; 1 0 -1]

we can get the U, S, V matrices in Matlab with

[U, S, V] = svd(A)

Which returns

U =

-0.4082 0.9129 -0.0000 -0.8165 -0.3651 -0.4472 -0.4082 -0.1826 0.8944

S =

3.4641         0         0
     0    0.0000         0
     0         0         0


V =

-0.7071 -0.7071 0 0 0 -1.0000 0.7071 -0.7071 0

Now, according to How to Decompose a Separable Filter?, our row and column vectors should be

sqrt(3.4641)*u1 and sqrt(3.464)*v1.'

but these operations do not return the answer, which should be

[1; 2; 1] and [1 0 -1]

Marcus Müller
  • 30,525
  • 4
  • 34
  • 58
100Large
  • 23
  • 4

2 Answers2

6

The decomposition of a separable filter is not unique, since $u v' = (u a) (v a^{-1})'$

The solution you are expecting is found by using a $-\sqrt{2}$ factor, namely -U(:,1) .* S(1,1) ./ sqrt(2) and -sqrt(2)*V(:,1).

Bob
  • 2,348
  • 4
  • 11
3

The SVD solution is a bit of an overkill. If a matrix is a product of two vectors, it shall be of rank one (or less, but that is trivial then). Therefore, the matrix should have at least self-evident vector on rows OR on columns. Here, due to the integer entries, $[1,\,2,\,1]$ or $[-1,\,0,\,1]$ easily pop-up. And once one is chosen, the other follows easily. Here are other SE.DSP posts on this topic:

As already said by @Bob, the decomposition is not unique. Why not $[3,\,6,\,3]$ or $[2,\,0,\,-2]$? Possibly because of some subconscious notion of simplicity. And this notion can be complicated.

Indeed, because of rounding errors, floating point, a matrix is rarely of rank one, at least numerically. A little $1e^{-17}$ can break a rank one matrix. Therefore, there still are works on appropriately telling whether a matrix is separable (wrt errors), and the question may involved quite complex optimization issues, see: Nonconvex Matrix Factorization from Rank-One Measurements, or the 2021 preprint Rank-one matrix estimation: analytic time evolution of gradient descent dynamics.

MBaz
  • 15,314
  • 9
  • 30
  • 44
Laurent Duval
  • 31,850
  • 3
  • 33
  • 101