2017-02-05 10 views
0

10*10値の各ブロックが画像である10*1300行列があります。私たちは、130の画像が連続していると言うことができます。この行列を並べ替えて、13の行と10の列に並べ替えたこれらの画像をすべて取得します。各(row,col)の位置は10*10です。これはどうすればできますか?前もって感謝します。行列を行列の行列に再構成するには

例:

Iはrow=1:10col=1:10が 最初の画像を表す10*1300マトリックスを有し、row=1:10col=11:20は、第2の画像とそう 上を表します。したがって、水平方向に並んだ画像が130個あります。最初に10の画像が最初の水平枠に配置され、次に10画像が第2の水平枠などに配置されるように、130画像を配置したいとします。の画像を各枠に10の画像で表示します。

+0

13行と10列は130データですが、元のセットは13000です。 –

+0

@il_raffa質問を編集しました。親切にチェックしてください。ところで、質問自体はこの編集なしでは自明であった。 – Navdeep

+0

問題を小さなものに分解し、実際の行列/ cesで説明できますか? –

答えて

4

あなたがリシェイプと並び替えるの組み合わせでこれを行うことができます。

blk_size = 10; % # of rows/columns in each block 
blks_in_row = 10; 

% reshape M matrix -> output in N 
% you should first check that the dimensions of M are correct 
N = reshape(M, blk_size, blk_size*blks_in_row, []); 
N = permute(N, [1 3 2]); 
N = reshape(N, [], blk_size*blks_in_row); 

をご希望の場合は、一つにこれらの3行を組み合わせることができますが、私は何が起こっているのより良いアイデアを与えるためにそれらを拡大しました。

出力行列の各10x100行の3D配列を1つのプレーンにします。 2番目の行は、この行列を平面が列になり、3番目が2次元配列に再構成されるようにこの行列を置換します。

+0

ありがとうございます。それは本当に良い方法です。 – Navdeep

0

あなたの行列を再配置するために、このコードを使用することができます:

% suppose image is a defined matrix which is 10x1300 

rearranged = []; 
for i = 0:12 
    startIndex = 100 * i + 1; 
    endIndex = startIndex + 100 - 1; 
    rearranged = [rearranged; image(:, startIndex:endIndex)]; 
end 

rearrangedマトリックスは、あなたが望むものです。

+0

どのような目的ですか?私たちはすでに、再編成で得たものを初期行列にしています。 – Navdeep

+0

あなたは130x100の行列を得るでしょう。あなたの言語では、各行に10枚の画像があります。 – OmG

関連する問題