gpt4 book ai didi

matlab - 在 MATLAB 中扩展矩阵的边界并复制边界元素

转载 作者:行者123 更新时间:2023-12-01 19:49:19 25 4
gpt4 key购买 nike

我得到以下矩阵B:

B = 

1 4 7
2 5 8
3 6 9

我想填充这个矩阵,以便有一个 1 元素边框围绕它,并复制边框元素。本质上,我想要这个结果:

B =                 
1 1 4 7 7
1 1 4 7 7
2 2 5 8 8
3 3 6 9 9
3 3 6 9 9

如何在 MATLAB 中执行此操作?

最佳答案

如果您有图像处理工具箱,请使用padarray ,特别是 replicate 标志。如果你没有,有人在 Github 上做了一个实现:https://github.com/gpeyre/matlab-toolboxes/blob/master/toolbox_nlmeans/toolbox/ordfilt2/padarray.m 。您可以下载并使用该功能供您自己使用。

padarray 创建一个更大的矩阵,源矩阵位于这个更大的矩阵的中心。对于如何使用额外的边框元素,您有多种选择。默认行为是将它们设置为 0。但是,我们可以指定 replicate 标志,该标志沿着矩阵的原始边界复制值,并将它们沿着这个新矩阵的额外边界元素放置。因为您想要从 3 x 3 变为 5 x 5,所以您只需要沿两个维度都有一个 1 元素边框。您可以使用 padarray 的第二个参数来指定它。 replicate 标志是第三个参数:

>> B = reshape(1:9, 3, 3);
>> B2 = padarray(B, [1 1], 'replicate')

B2 =

1 1 4 7 7
1 1 4 7 7
2 2 5 8 8
3 3 6 9 9
3 3 6 9 9

编辑

如果您不想使用padarray,您可以使用scatteredInterpolant class 代替,使用 nearest 作为插值标志。您将构建一个 3 x 3 2D 空间坐标网格,映射到 B 中的每个值,然后我们指定一个 5 x 5 空间坐标网格,其中边框元素超出了原来的 3 x 3 网格。像这样的事情:

>> [X,Y] = meshgrid(1:3,1:3);
>> [X2,Y2] = meshgrid(0:4,0:4);
>> F = scatteredInterpolant(X(:),Y(:),B(:),'nearest');
>> B2 = F(X2, Y2)

B2 =

1 1 4 7 7
1 1 4 7 7
2 2 5 8 8
3 3 6 9 9
3 3 6 9 9

关于matlab - 在 MATLAB 中扩展矩阵的边界并复制边界元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29554216/

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