【问题标题】:Matlab: how to plot from 4-d matrixMatlab:如何从 4-d 矩阵绘图
【发布时间】:2019-04-29 18:48:38
【问题描述】:

我有一个包含 1000 张图片的 4 维矩阵。 矩阵的形状为1000*32*32*3(1000为图片数量,32*32为二维像素值,3为RGB-3通道)。

我想知道如何为一张图片显示一个通道的 32*32 值?还是3通道32*32*3?

matlab 可以绘制 32*32 的图吗?还是3张32*32通道的3张图片?

【问题讨论】:

  • RGB-3 通道?您是指32 X 32 是彩色图片的像素数吗?如果是这样,您可以简单地使用imshow() 来查看图像。您还想展示您拥有的 1000 张图片中的一张吗?
  • thx,我只是想展示一张图片作为示例,看看它是什么样子的。
  • 好吧,直接用imshow(A(1,:,:,:));
  • 我建议对数据集 (newA = permute(A, 2,3,4,1);) 进行置换,以便图像 ID 位于最后。然后,如果你想用所有通道绘制某个图像,你可以访问newA(:,:,:,404),如果你只想要一个通道,你可以使用newA(:,:,2,404),不再需要挤压它。
  • @HansHirse 可能应该颠倒过来。保留答案并删除评论。

标签: matlab


【解决方案1】:

通常,您使用imshow 命令来显示图像,单通道(灰度)或多通道(彩色)。如果您有多个图像以您描述的方式存储,您需要索引特定(灰度或彩色)图像(或颜色通道),并且可能需要 squeeze 命令删除长度为 1 的维度,这可能导致imshow 出现问题。

请看以下代码 sn-p 使用一些模型数据:

% Mock-up data.
A = uint8(round(255 * rand(1000, 32, 32, 3)));

% Select I-th image.
I = 25;

figure(1);

% Show I-th RGB image.
subplot(2, 2, 1);
imshow(squeeze(A(I, :, :, :)));

% Show I-th red channel image.
subplot(2, 2, 2);
imshow(squeeze(A(I, :, :, 1)));

% Show I-th green channel image.
subplot(2, 2, 3);
imshow(squeeze(A(I, :, :, 2)));

% Show I-th blue channel image.
subplot(2, 2, 4);
imshow(squeeze(A(I, :, :, 3)));

输出:

【讨论】:

  • 答案起草得很好,努力也很好。但我看不出使用squeeze 的原因。可以的话,能详细点吗?
  • @RC0993 我想确保imshow 得到一个正确的M x N(灰度图像)或M x N x 3(彩色图像)数组作为输入(没有单一维度),这不是简单使用A(I, :, :, :)的情况。
猜你喜欢
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多