【问题标题】:Identifying properties of neigbouring elements in a matrix识别矩阵中相邻元素的属性
【发布时间】:2018-10-04 16:28:53
【问题描述】:

有一个看起来像这样的矩阵

9 9 1 9 9 9 9 1
9 9 1 9 9 9 9 9
9 9 9 9 9 9 9 9
9 9 1 9 9 9 9 9
9 9 9 9 9 1 1 1
9 9 9 9 9 1 9 9
9 9 9 1 9 9 9 9
9 9 1 9 1 9 9 9

我想检测矩阵中的每个位置,如果至少有一个值1 围绕有问题的矩阵,这样对于{2, 2} 中的元素我想检查{1,1}, {1,2}, {1,3}, {2,1}, {2,3}, {3,1}, {3,2}, {3,3} 中的值,如果有的话提到的位置包含 1,然后我将 {2,2} 中的元素存储在单独的变量中。

我不知道如何解决这个问题,想知道是否有任何 python 函数或方法可以做到这一点?

【问题讨论】:

标签: python python-3.x matlab numpy matrix


【解决方案1】:

您可以从this question 获得灵感并使用conv2

在 MATLAB 中(您说“pythonic”但标记为 MATLAB)如下所示:

numneighbours = conv2( A==1, [1 1 1; 1 0 1; 1 1 1], 'same' );

现在你想要numneighbours > 0的任何元素

output = A(numneighbours > 0);

这当然可以在 1 行中完成。


This answer 建议 convolve2d 是 Python 等价于 MATLAB 的 conv2

【讨论】:

    【解决方案2】:

    一个可能的解决方案是dilating 一个掩码,它指示一个值在哪里,用一个正方形 3x3 structuring element,如下所示:

    onesMask = mat==1;
    res = imdilate(mask,strel('square',3)) & ~onesMask;
    

    结果:

     0     1     0     1     0     0     1     0
     0     1     0     1     0     0     1     1
     0     1     1     1     0     0     0     0
     0     1     0     1     1     1     1     1
     0     1     1     1     1     0     0     0
     0     0     1     1     1     0     1     1
     0     1     1     0     1     1     1     0
     0     1     0     1     0     1     0     0
    

    【讨论】:

    • 值得注意的是imdilate需要MATLAB中的图像处理工具箱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2015-05-20
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    相关资源
    最近更新 更多