我有一个矩阵a=[[1 2 3]; [4 5 6]; [7 8 9]]
和一个子矩阵b=[[5 6];[8 9]]
。
matlab中是否有解卷积(a,b)
的方法?
我正在寻找一种识别可能的巨型矩阵中存在子矩阵的方法。通过一种反卷积,我期望得到类似于矩阵的东西,其中零和1
在子矩阵存在的位置。
在上面的示例中,右下角有一个1
。
答案 0 :(得分:5)
有一个更好的解释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情况,它有点复杂,但想法是一样的。
答案 1 :(得分:2)
如果你想在另一个内部找到小矩阵的存在或存在的可能性,那么你正在寻找相关性,而不是去卷积。
最简单的方法是使用normxcorr2
,它返回一个值矩阵[-1..1],其中1表示找到小矩阵的像素。
缺点/好处是normxcorr2对增益不敏感,这意味着如果你正在寻找[1 2 3 4]那么你也会发现[2 4 6 8]