我有一个10*1300
矩阵,其中每个10*10
值块都是一个图像。我们可以说我们连续有130
张图片。我想重新排列此矩阵,以便在13
行和10
列中重新排列所有这些图像,其中每个(row,col)
位置都是10*10
图像。如何才能做到这一点?提前谢谢。
示例:
我有一个
10*1300
矩阵,row=1:10
和col=1:10
表示 第一张图片,row=1:10
和col=11:20
代表第二张图片,所以 上。因此,我们将130
图像水平并排排列。我希望以这样的方式排列这些130
图像:第一个10
图像排列在第一个水平窗格中,下一个10
图像排列在第二个水平窗格中,依此类推13
个水平窗格,每个窗格中都有10
个图片。
答案 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
矩阵就是你想要的。