【问题标题】:Deconvolution Between Matrix and Sub Matrix矩阵和子矩阵之间的反卷积
【发布时间】:2012-06-27 14:29:13
【问题描述】:

我有一个矩阵a=[[1 2 3]; [4 5 6]; [7 8 9]] 和一个子矩阵b=[[5 6];[8 9]]

matlab 中是否有反卷积(a,b) 的方法?

我正在寻找一种方法来识别可能的巨型矩阵中是否存在子矩阵。通过某种反卷积,我希望得到一个矩阵,周围都是零,1 在子矩阵所在的地方。

在上面的例子中,1 在右下角。

【问题讨论】:

  • 目前还不清楚卷积是从哪里进入讨论的。你是说你有一个矩阵c=conv2(a,b) 并且你想从字面上解卷积?如果不能,您可以使用比“反卷积”更准确的术语吗?似乎这只是在矩阵中找到一个子矩阵。
  • 好的。一个有2个问题。第一个是关于matlab的。如果我有c=conv2(a,b),如何通过反卷积 c 和 a 来恢复 b?第二个更“哲学”。假设a是对象之间交互(卷积)的结果。假设您不知道这些对象。只需对其中一个进行建模即可。我想在a(大图)和我假设的对象表示之间应用一种反卷积。我的目标是获得一个矩阵(与a 大小相同),其中/如果对象可以出现在a 中。
  • 不幸的是,这两个问题都没有清楚地表达出来。如果您真的想要答案,请提出更准确的问题。

标签: matlab image-processing convolution deconvolution


【解决方案1】:

有更好的解释here


为简单起见,让我们谈谈一维反卷积。

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

例如:

您的矢量/信号是:

    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 存在,则需要计算它,并将其应用于结果。


对于 2D 的情况,它有点复杂,但思路是一样的。

【讨论】:

  • A 看起来像一个 Toeplitz 矩阵。已知如果我们有两个信号abc=conv2(a,b)=A*b',其中Aa的托普利兹矩阵。问题是A 的列数必须等于b 的列数,如果我们想通过b'=A^-1*cc,A 进行反卷积,A 必须是正方形的。我不太清楚如何操纵这些尺寸......
  • @NasserM.Abbasi,A 是正方形 - 它是两个维度上的信号大小。过滤器大小是非零对角线的数量。
【解决方案2】:

如果您想找到另一个小矩阵内部的存在或存在的可能性,那么您正在寻找相关性,而不是反卷积。

最简单的方法是使用normxcorr2,它返回一个值矩阵 [-1..1],其中 1 表示找到小矩阵的像素。

缺点/好处是 normxcorr2 对增益不敏感,这意味着如果您正在寻找 [1 2 3 4],那么您也会找到 [2 4 6 8]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多