我得到以下矩阵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/