如何检查二维滤波器/信号/矩阵的可分离性

信息处理 图像处理 离散信号 线性代数 svd 可分离性
2022-01-03 01:00:25

鉴于:

    x(n1,n2) = {1 ,n1=0,n2=0 ;
                2 ,n1=1,n2=0 ;
                3 ,n1=0,n2=1 ; 
                6 ,n1=1,n2=1 }

如何证明它是可分离的?

1个回答

Nilesh Padhi,欢迎来到 DSP 社区。

可分离的经典定义意味着由XRm×n给出的数据(2D)可以写成:

X=σuvT

其中 这称为 Rank 1 矩阵。σRuRmvRn

,如何获得这些参数和向量 好吧,奇异值分解(SVD) 就是用来保存数据的。X

的 SVD 由下式给出:X

X=UΣVT=σiuiviT

for时,您可以看到这些匹配 所以你应该做的是:σj=0j2

epsThr = 1e-7;
[mU, mD, mV] = svd(mX);
vD = diag(mD);
if(all(vD(2:end) < epsThr))
    vU = mU(:, 1);
    vV = mV(:, 1);
end

我们检查了 2 及以后的奇异值是否确实很小。
如果他们这样做(您可以通过 来决定小到什么程度epsThr),那么它是可分离的,并且向量是vUvV

在你的情况下:

mX = [1, 3; 2, 6];
[mU, mD, mV] = svd(mX);

vD = diag(mD);
disp(vD);

结果是:

vD =

    7.0711
    0.0000

由于vD除第一个元素(仅单个非消失奇异值)之外的值为零,因此它是可分离的。

确实,您可以看到:

mD(1) * mU(:, 1) * mV(:, 1).'

ans =

    1.0000    3.0000
    2.0000    6.0000

正如预期的那样。

当我们想要与 2D 内核进行卷积时,这种方法在图像处理中非常有用,并且我们发现它是可分离的,因此我们可以使用 2 个 1D 卷积(沿列/行)来应用 2D 卷积。

在这种情况下,我们定义其中是奇异值。 然后我们沿列卷积\u^=σ1uv^=σ1vσ1
u^v^T