gpt4 book ai didi

matlab - 获取矩阵子集的边界单元格的索引。软件

转载 作者:太空宇宙 更新时间:2023-11-03 20:19:16 29 4
gpt4 key购买 nike

给定一个矩阵,其中 1 是当前子集

test =

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

是否有函数或快速方法将子集更改为当前子集的边界?

例如。从上面的“测试”中获取此子集

test =

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

最后我只想获得矩阵子集周围的最小单元格。当然,我可以遍历并获得边界的最小值(逐个单元格),但必须有一种方法可以使用我在上面显示的方法来完成。

注意子集将被连接,但可能不是矩形的。这可能是个大收获。

这是一个可能的子集....(将用 NaN 边框填充它)

test =

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

想法?

最佳答案

我将使用的基本步骤是:

  1. 对形状执行膨胀以获得新区域,即形状加上其边界
  2. 从扩张后的形状中减去原始形状,只留下边界
  3. 使用边界索引您的数据矩阵,然后取最小值。

膨胀

我想在这里做的是在每个单元格上传递一个 3x3 窗口,并在该窗口中取最大值:

[m, n] = size(A); % assuming A is your original shape matrix
APadded = zeros(m + 2, n + 2);
APadded(2:end-1, 2:end-1) = A; % pad A with zeroes on each side
ADilated = zeros(m + 2, n + 2); % this will hold the dilated shape.

for i = 1:m
for j = 1:n
mask = zeros(size(APadded));
mask(i:i+2, j:j+2) = 1; % this places a 3x3 square of 1's around (i, j)
ADilated(i + 1, j + 1) = max(APadded(mask));
end
end

形状减法

这基本上是一个逻辑 AND 和一个逻辑 NOT 来删除交集:

ABoundary = ADilated & (~APadded);

在这个阶段,您可能想要删除我们为进行膨胀而添加的边框,因为我们不再需要它了。

ABoundary = ABoundary(2:end-1, 2:end-1);

沿着边界找到最小数据点

我们可以使用我们的逻辑边界将原始数据索引到一个向量中,然后取该向量的最小值。

dataMinimum = min(data(ABoundary));

关于matlab - 获取矩阵子集的边界单元格的索引。软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13616842/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com