Matlab - 周围元素的总和

use*_*012 3 matlab sum

我想计算矩阵中给定元素周围元素的总和.到目前为止,我已经写了这些代码行:

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.同样,你可以为你的目的设计任何滤波器,例如平均所有邻居而不是求和它们.

有关详细信息,请参阅维基百科中的卷积文章.