我正在尝试使用 Matlab 将 Sobel 滤波器分解为两个向量(列和行)。
如果我们的 Sobel 滤波器是
A = [1 0 -1; 2 0 -2; 1 0 -1]
我们可以在 Matlab 中得到 U、S、V 矩阵
[U, S, V] = svd(A)
哪个返回
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
现在,根据如何分解可分离过滤器?,我们的行向量和列向量应该是
sqrt(3.4641)*u1和sqrt(3.464)*v1.'
但是这些操作并没有返回答案,应该是
[1; 2; 1]和[1 0 -1]