矩阵和子矩阵之间的反卷积

4
我有一个矩阵a=[[1 2 3]; [4 5 6]; [7 8 9]]和一个子矩阵b=[[5 6];[8 9]]
在matlab中是否有一种方法可以对(a,b)进行去卷积?
我正在寻找一种方法来识别可能巨大的矩阵中是否存在子矩阵。通过某种形式的去卷积,我希望获得周围都是零且子矩阵存在的地方为1的矩阵。
在上面的示例中,右下角为1

2
这里真的不清楚卷积是怎么进入讨论的。你是在说你有一个矩阵 c=conv2(a,b),然后想要进行反卷积吗?如果不是,你能不能使用一个更准确的术语来代替“反卷积”?看起来这只是在一个矩阵中找到一个子矩阵。 - Chris A.
好的。这里有两个问题。第一个是关于Matlab的。如果我有c=conv2(a,b),如何通过反卷积c和a来恢复b? 第二个问题更加"哲学性"。假设a是物体之间相互作用(卷积)的结果。假设您不知道这些物体。只需对其中一个建模。我想在a(大图)和我的假设对象表示之间应用某种反卷积。我的目标是获得一个矩阵(与a大小相同),其中包含对象可能存在于a中的地方/位置上显示为1。 - no_name
1
很遗憾,这两个问题都没有清晰地表达出来。如果你真的想要答案,请提出更精确的问题。 - Chris A.
还可以查看:http://dsp.stackexchange.com/questions/2969/deconvolution-of-1d-signals/3560#3560 - Andrey Rubshtein
2个回答

6

这里有一个更好的解释,请点击此处


为了简单起见,我们来谈一谈一维去卷积。

您的信号可以表示为向量,卷积是与三对角矩阵相乘。

例如:

您的向量/信号是:

    V1
    V2
    ...
    Vn

您的滤波器(卷积元素)是:
  [b1 b2 b3];

所以矩阵是nxn的:(称其为A):
[b2 b3 0  0  0  0.... 0]
[b1 b2 b3 0  0  0.... 0]
[0  b1 b2 b3 0  0.... 0]
.....
[0  0  0  0  0  0...b2 b3]

卷积是:

  A*v;

反卷积是指将模糊的图像恢复成原始清晰的图像。
  A^(-1) * ( A) * v;

很明显,有些情况下反卷积是不可能的。这时候你会得到奇异的 A。 但如果 A^-1 存在,你需要计算它,并将其应用于结果。
对于二维情况,稍微复杂一些,但思路是相同的。

A 似乎是一个托普利茨矩阵。已知如果我们有两个信号 ab,则 c=conv2(a,b)=A*b',其中 Aa 的托普利茨矩阵。问题在于 A 的列数必须等于 b 的列数,并且如果我们想通过 b'=A^-1*cc,A 进行反卷积,那么 A 必须是方阵。我不太清楚如何操作这些大小... - no_name
1
@NasserM.Abbasi,A是正方形 - 它在两个维度上的信号大小相同。滤波器大小是非零对角线的数量。 - Andrey Rubshtein

3
如果你想要寻找一个小矩阵在另一个矩阵中的存在或可能性,那么你需要用的是相关性而不是反卷积。
最简单的方法是使用“normxcorr2”,它返回一个值矩阵[-1..1],其中1表示找到了小矩阵的像素点。
缺点/好处在于“normxcorr2”对增益不敏感,这意味着如果你在寻找[1 2 3 4],则也会找到[2 4 6 8]。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接