matlab - 在 MatLab 中查找通过 boolean 矩阵的路径长度

标签 matlab matrix path boolean

我有一组 5x5 boolean 矩阵,例如下面的一个:

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

我想要一种方法来输出,对于每个连接的 1 系列(连接意味着一个 1 在另一个 1 的左边、右边、上面或下面,对角线不算数)它在 x 轴上占据的长度以及它在 y 轴上所占的长度。例如。对于这个矩阵,会有一个从左到右一直延伸,所以 x 中有 5 个单位,y 中有 4 个单位:

  1
1 1 1
1     1 1
1 1 1 1

右上角还会有一个集合,它在 x 轴上有 2 个单位,在 y 轴上只有 1 个单位:

      1 1

在右下角会有一个,只在 x 和 y 中占用 1。

我想为这个矩阵输出一些 xmax1=5 ymax1=4 的东西, xmax2=2 ymax2=1, xmax3=1 ymax3=1。我已经设法编写了一些正确的代码,但仅适用于简单矩阵。例如。其中只有一组连接的 1,并且 xmax 和 ymax 只是简单的直线,例如我可以这样做:

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

因为最长的 x 路径是一条穿过顶部的直线,而最长的 y max 是一条向下的直线。但是,如果它开始“蛇行”,例如:

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

我会得到 ymax=3 和 xmax=3 的结果,因为它们是最长的直线,而不是实际应该是距离最远的直线的长度,所以在这种情况下应该是 ymax= 5 和 xmax=4

我是 MatLab 的新手,正在尝试自学,因此我认为我可以想到很多可行的方法,但我想不出如何实现它们。我尝试了多种方法,但我不太清楚如何正确实现它们。

感谢您的帮助。

最佳答案

使用 bwconncomp() 识别4-connected 组件 及其特征,然后调用 regionprops() 以简化这些组件的某些属性的计算组件:

A = [0 1 0 1 1
     1 1 1 0 0
     1 0 0 1 1
     1 1 1 1 0
     0 0 0 0 1]

s = regionprops(bwconncomp(A,4),'BoundingBox');

s 是非标量结构,将包含每个组件的边界框 参数,即 [左上角 x,左上角 y , xwidth, ywidth].

例如:

s(1)
ans = 
    BoundingBox: [0.5 0.5 5 4]

请注意,有 3 个连通分量(单个元素也算在内):

bwconncomp(A,4)
ans = 
    Connectivity: 4
       ImageSize: [5 5]
      NumObjects: 3
    PixelIdxList: {[11x1 double]  [2x1 double]  [25]}

关于matlab - 在 MatLab 中查找通过 boolean 矩阵的路径长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18368386/

相关文章:

arrays - 如何强制函数返回 int32 整数?

linux - BSUB 将多个 matlab 作业集中到一个集群中?

Matlab 固定宽度的文本扫描

c++ - GLSL 和 GLM 之间的矩阵数学不一致,或者是否存在诸如 "bad" View 矩阵之类的东西

c++ - 运送源代码时省略未使用的 boost src 文件的策略

java - Macintosh El Capitan 上的 Java JDK 在哪里?

python - 将从 os.walk 接收到的路径放入 cmd 中以在 Windows 终端上运行 - python

matlab - 验证文件夹内容

laravel - 仅获取 Laravel 5 中的文件名

matlab - 从相应的最大矩阵中选取值