关于图像处理:MATLAB Reshape imaqmontage输出

MATLAB Reshape imaqmontage output

如何在MATLAB中重塑imaqmontage命令的输出。 因此,结尾处没有黑色正方形。 我想将输出调整为5列和3行。 而不是4行4列。

1
imaqmontage(uint8(imageStore(:,:,:,i,:)));

我想在哪里上课。

输出:

output of imaqmonatage


简短答案:

使用图像处理工具箱中的montage函数代替:

1
montage(uint8(squeeze(imageStore(:, :, :, i, :))), 'Size', [3 5]);

长答案:

除非实际编辑imaqmontage函数,否则无法对其进行更改。在内部,该函数计算输入data的帧数,如下所示:

1
[width, height, bands, nFrames] = size(data);

您的数据似乎是[M N 3 1 15]的大小,因此nFrames将是从4到ndims(data)或15的所有维度的乘积。它随后调用局部函数localDisplay,该函数计算轴如下(请注意,这是来自MATLAB版本R2016b):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
% Determine the number of axis rows and columns.
axCols = sqrt(nFrames);
if (axCols<1)
    % In case we have a slim image.
    axCols = 1;
end
axRows = nFrames/axCols;
if (ceil(axCols)-axCols) < (ceil(axRows)-axRows),
    axCols = ceil(axCols);
    axRows = ceil(nFrames/axCols);
else
    axRows = ceil(axRows);
    axCols = ceil(nFrames/axRows);
end

如您所见,行和列的数量完全由nFrames的值确定,这导致了方形排列。如果要更改结果,则必须相应地编辑imaqmontage

中等答案,需要更多工作:

您可以通过自己连接图像来重新创建上述功能,从而很容易地完成操作,如此处所示。例如,以下内容沿图像的每一行从上到下分布:

1
2
3
imageSet = uint8(squeeze(imageStore(:, :, :, i, :)));
montImage = cell2mat(reshape(num2cell(imageSet, 1:3), [5 3]).');
imshow(montImage);

这会将它们从左到右分布在每一列中:

1
2
3
imageSet = uint8(squeeze(imageStore(:, :, :, i, :)));
montImage = cell2mat(reshape(num2cell(imageSet, 1:3), [3 5]));
imshow(montImage);