0

たとえば、境界に最も近いピクセルの値を使用して、境界でゼロで満たされた行列をパディングしようとしています。

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

ここに画像の説明を入力

ここで、次の方法でマトリックスの境界線を完成させたいと思います。

ここに画像の説明を入力

forループのない素敵なソリューションを探しています

編集:

次のようになります。

ここに画像の説明を入力

4

2 に答える 2

5

オプション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
于 2013-10-25T23:03:12.157 に答える
1
% 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);
于 2013-10-25T23:08:58.070 に答える