我想计算矩阵中给定元素周围元素的总和.到目前为止,我已经写了这些代码行:
for i=1:m,
rij(1:n)=0
for j=1:n,
alive = tijdelijk(i-1,j)+tijdelijk(i+1,j)+tijdelijk(i-1,j-1)+tijdelijk(i+1,j-1)+tijdelijk(i,j+1)+tijdelijk(i,j-1)+tijdelijk(i-1,j+1)+tijdelijk(i+1,j+1)
Run Code Online (Sandbox Code Playgroud)
这导致错误,因为例如,对于i = 1,i-1变为零.任何人都知道如何在不收到此错误的情况下执行此操作?
pet*_*hor 12
您可以通过过滤对元素求和.conv2
可以这种方式使用.
让我举个例子.我创建了一个样本矩阵
>> A = reshape(1:20, 4, 5)
A =
1 5 9 13 17
2 6 10 14 18
3 7 11 15 19
4 8 12 16 20
Run Code Online (Sandbox Code Playgroud)
然后,我创建一个过滤器.过滤器就像一个掩码,您将中心放在当前单元格上,并将与1's
过滤器上对应的位置相加.对于八连通邻居情况,过滤器应如下:
>> B = [1 1 1; 1 0 1; 1 1 1]
B =
1 1 1
1 0 1
1 1 1
Run Code Online (Sandbox Code Playgroud)
然后,您只需使用此小矩阵对矩阵进行卷积.
>> conv2(A, B, 'same')
ans =
13 28 48 68 45
22 48 80 112 78
27 56 88 120 83
18 37 57 77 50
Run Code Online (Sandbox Code Playgroud)
如果你想要四个连接的邻居,你可以使滤波器的角为0.同样,你可以为你的目的设计任何滤波器,例如平均所有邻居而不是求和它们.
有关详细信息,请参阅维基百科中的卷积文章.