【问题标题】:Best way to implement matrix padding实现矩阵填充的最佳方法
【发布时间】:2013-10-25 22:36:46
【问题描述】:

我正在尝试用最接近边界的像素处的值填充边界处用零填充的矩阵,例如:

A = rand(5);
Z = zeros(9);
Z(3:7, 3:7) = A;

现在我想通过以下方式完成矩阵边框:

我正在寻找一个没有任何 for 循环的好解决方案

编辑:

应该是这样的:

【问题讨论】:

  • 目前还不清楚您到底想做什么。你能详细说明一下吗?
  • 添加到 Phonon 的评论中,您的矩阵与图像有何关系?为什么有两行/列零?
  • 嗯...我想以底部图片描述的方式将内部 5x5 矩阵中的值复制到 2 个边框行和列。突出显示的框对应于这个 5x5 矩阵。希望这会有所帮助。

标签: matlab matrix padding


【解决方案1】:

您希望 padarray 带有 'replicate' 选项。例如要在所有边复制 2x2 边框,

>> A = [1 2; 3 4];
>> B = padarray(A,[2 2],'replicate','both')
B =
     1     1     1     2     2     2
     1     1     1     2     2     2
     1     1     1     2     2     2
     3     3     3     4     4     4
     3     3     3     4     4     4
     3     3     3     4     4     4

【讨论】:

  • 我查看了padarray,但我不知道如何正确复制它。到目前为止,如果我使用padarray(Z, [2 2], 'replicate'),只会复制我的零
  • @Schnigges - 在没有零的矩阵上使用padarray。无需先将矩阵嵌入零。如果您只有已经存在零的矩阵,请像 padarray(Z(3:7, 3:7), [2 2], 'replicate') 一样运行它
  • 谢谢,但事实上我必须使用边界处已经包含零的图像。
  • @Schnigges - 好的,所以你可以使用padarray(Z(3:7, 3:7), [2 2], 'replicate')
【解决方案2】:
% Create a random image
I = round(rand(8)*70);

% Number of pixels to pad on each side
padSize = 3;

% Create a resulting image matric
sizeY = size(I,1);
sizeX = size(I,2);

J = zeros( sizeY + padSize*2, sizeX + padSize*2 );

% Fill in the original
J( (padSize+1):(padSize+sizeY) , (padSize+1):(padSize+sizeX) ) = I;

% Fill in areas above, below and to the sides or original
%top
J( 1:padSize, (padSize+1):(padSize+sizeX) ) = repmat(I(1,:),padSize,1);
%bottom
J( (padSize+sizeX+1):end, (padSize+1):(padSize+sizeX) ) = repmat(I(end,:),padSize,1);
%left
J( (padSize+1):(padSize+sizeY), 1:padSize ) = repmat(I(:,1),1,padSize);
%right
J( (padSize+1):(padSize+sizeY), (padSize+sizeY+1):end ) = repmat(I(:,end),1,padSize);

% Fill in the corners
J(1:padSize, 1:padSize)                         = I(1,1);
J((padSize+sizeY+1):end, 1:padSize)             = I(end,1);
J(1:padSize, (padSize+sizeX+1):end)             = I(1,end);
J((padSize+sizeY+1):end, (padSize+sizeX+1):end) = I(end,end);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    相关资源
    最近更新 更多