sách gpt4 ai đã đi

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

In lại 作者:太空宇宙 更新时间:2023-11-03 20:19:16 32 4
mua khóa gpt4 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 Câu trả lời

我将使用的基本步骤是:

  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));
kết thúc
kết thúc

形状减法

这基本上是一个逻辑 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/

32 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com