【问题标题】:Expand and crop a matrix展开和裁剪矩阵
【发布时间】:2011-04-03 04:00:56
【问题描述】:

如何扩展边缘为零的矩阵,然后在进行一些操作后将其裁剪回相同的大小?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    你可以这样做:

    octave:1> x = ones(3, 4)
    x =
    
       1   1   1   1
       1   1   1   1
       1   1   1   1
    
    octave:2> y = zeros(rows(x)+2, columns(x)+2);
    octave:3> y(2:rows(x)+1, 2:columns(x)+1) = x
    y =
    
       0   0   0   0   0   0
       0   1   1   1   1   0
       0   1   1   1   1   0
       0   1   1   1   1   0
       0   0   0   0   0   0
    
    octave:4> y = y.*2  (manipulation)
    y =
    
       0   0   0   0   0   0
       0   2   2   2   2   0
       0   2   2   2   2   0
       0   2   2   2   2   0
       0   0   0   0   0   0
    
    octave:5> x = y(2:rows(x)+1, 2:columns(x)+1)
    x =
    
       2   2   2   2
       2   2   2   2
       2   2   2   2
    

    【讨论】:

    • 我的示例根据 OP 的规范扩展和裁剪任意大小的矩阵。如果您错过了我的答案,我想您可能已经阅读了我的答案 *&^%ing。
    【解决方案2】:

    如果您有图像处理工具箱,可以使用PADARRAY 填充数组。

    否则,您可以通过以下方式填充和收缩:

    smallArray = rand(10); %# make up some random data
    border = [2 3]; %# add 2 rows, 3 cols on either side
    
    smallSize = size(smallArray);
    
    %# create big array and fill in small one
    bigArray = zeros(smallSize + 2*border);
    bigArray(border(1)+1:end-border(1),border(2)+1:end-border(2)) = smallArray;
    
    %# perform calculation here
    
    %# crop the array
    newSmallArray = bigArray(border(1)+1:end-border(1),border(2)+1:end-border(2));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-20
      • 2012-01-15
      • 2020-08-26
      • 2012-05-08
      • 2015-03-16
      • 2013-12-30
      • 1970-01-01
      • 2013-10-05
      相关资源
      最近更新 更多