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

标签 matlab

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

相关文章:

arrays - 提取数组中大于零的值集的索引

matlab - 如何在 MATLAB 中的进程之间共享内存?

matlab - 获取一条线的像素 - :- MATLAB

matlab - 如何在 MATLAB 绘图图例中添加独立文本

matlab - 如何获取单选按钮的选定值?

windows - MATLAB:防止数字被激活

MATLAB:数据点无法连接?

MATLAB - 如何比较两个对象是否相同或不同

c++ - 使用 MS Visual C++ 2010 'sys/resource.h' : No such file 编译 C

matlab - 以编程方式向图形添加文本注释