【问题标题】:Matlab - Sum of surrounding elementsMatlab - 周围元素的总和
【发布时间】:2013-02-27 19:05:42
【问题描述】:

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

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)

这会导致错误,因为例如 i=1 时 i-1 变为零。有人知道如何在不出现此错误的情况下执行此操作吗?

【问题讨论】:

    标签: matlab sum


    【解决方案1】:

    您可以在边缘做很多事情。您所做的具体取决于您的问题,并且因用例而异。典型的事情:

    1. 如果 (i-1) 或 (i+1) 超出范围,则忽略该元素。这相当于用外部零填充矩阵并相应地调整循环限制
    2. 环绕边缘。换句话说,对于 MxN 矩阵,如果 (i-1) 将您带到 0,那么您将采用元素 (M, j) 而不是采用元素 (i-1, j) = (0, j)。

    由于您的代码提到“您的老师”,我猜您可以询问边缘应该发生什么(或者以合理的方式解决它可能是任务的一部分!!)。

    【讨论】:

    • 那么环绕边缘怎么样?可以使用 conv2blkproc 以简单的方式完成吗?
    • 老实说,我不确定。我认为 conv2 在边缘零填充,但我不能确定。
    【解决方案2】:

    您可以通过过滤对元素求和。 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
    

    然后,我创建一个过滤器。过滤器就像一个掩码,您将中心放在当前单元格上,并将过滤器上与1's 对应的位置相加。对于八连通邻居的情况,过滤器应该如下:

    >> B = [1 1 1; 1 0 1; 1 1 1]
    
    B =
    
     1     1     1
     1     0     1
     1     1     1
    

    然后,您只需将矩阵与这个小矩阵进行卷积。

    >> 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
    

    如果您想要四个连接的邻居,您可以将过滤器的角设为 0。同样,您可以根据您的目的设计任何过滤器,例如对所有邻居进行平均而不是求和。

    详情请参阅维基百科中的convolution article

    【讨论】:

    • 哈,写的是一样的东西!
    • :) 如果它对您有用,您可以接受答案作为您问题的解决方案。
    • 非常有帮助,所以这样做了:)
    • 我想你对 Stackoverflow 不熟悉。点击答案左上角的勾号即可接受答案。
    【解决方案3】:

    两种可能性:将循环的限制更改为i=k:(m-k)j=k:(n-k) 或使用blkproc

    例如:

    计算每个 8×8 块的二维 DCT

    I = imread('cameraman.tif');
    fun = @dct2;
    J = blkproc(I,[8 8],fun);
    imagesc(J), colormap(hot)
    

    【讨论】:

    • 或者使用,如果你有图像处理工具箱,blkproc methinks
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2021-11-30
    • 2012-09-26
    相关资源
    最近更新 更多