我们如何将矩阵重塑为矩阵矩阵

时间:2017-02-05 14:33:11

标签: matlab

我有一个10*1300矩阵,其中每个10*10值块都是一个图像。我们可以说我们连续有130张图片。我想重新排列此矩阵,以便在13行和10列中重新排列所有这些图像,其中每个(row,col)位置都是10*10图像。如何才能做到这一点?提前谢谢。

示例:

  

我有一个10*1300矩阵,row=1:10col=1:10表示   第一张图片,row=1:10col=11:20代表第二张图片,所以   上。因此,我们将130图像水平并排排列。我希望以这样的方式排列这些130图像:第一个10图像排列在第一个水平窗格中,下一个10图像排列在第二个水平窗格中,依此类推13个水平窗格,每个窗格中都有10个图片。

2 个答案:

答案 0 :(得分: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);

如果您愿意,可以将这三行合并为一行,但我将它们扩展为更好地了解正在发生的事情。

第一行产生一个3D数组,每个输出矩阵的10x100行是一个平面。第二行置换此矩阵,使平面成为列,第三行重新整形为2D数组。

答案 1 :(得分: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矩阵就是你想要的。