在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。您可以下载它并使用该功能供自己使用。

CCD_ 4创建较大的矩阵,其中源矩阵以该较大的矩阵为中心。关于如何使用额外的边界元素,您有几个选项。默认行为是将这些值设置为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类,将nearest作为插值标志。您将构建一个映射到B中每个值的3 x 3 2D坐标空间网格,然后我们将指定一个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

问题是明确地添加一个元素作为边界,所以试试这个(不需要工具箱):

B = [1 4 7; 2 5 8; 3 6 9] % or use  B=rand(3,4), etc. to try something else.
B2 = B([1 1:end end],[1 1:end end])

这是结果(根据需要):

B =
    1   4   7
    2   5   8
    3   6   9
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

最新更新