展开并裁剪矩阵

时间:2011-04-02 19:54:20

标签: matlab

如何在边缘周围用零填充矩阵,然后在进行一些操作后将其裁剪回相同的尺寸?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

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

答案 1 :(得分:3)

要填充数组,如果您有图像处理工具箱,则可以使用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));