0

我得到了一个 Matlab 格式的人脸数据集,但是在我将数据集导入 Matlab 之后,我不知道如何显示图像。

矩阵的大小为 60x60x3x1000,即图像尺寸为 60x60,每个图像 RGB 有 3 个通道,这样的图像有 1000 张。

我不知道如何进行基本操作,例如以彩色显示第 i 个面。

谢谢

4

2 回答 2

0

看起来好像数据在 [0..255] 范围内给出,但类型为 double(而不是uint8)。

因此,要获得您需要的第 k 个图像

Im_k = uint8( squeeze( Images(:,:,:,k) ) );

或者,如果你想使用双精度浮点

Im_k = squeeze( Images(:,:,:,k) ) / 255;

(我不是 100% 确定你需要squeeze在这种情况下使用)。

显示图像

figure('Name', 'Showing k-th face');
imshow( Im_k );
于 2013-04-23T11:44:55.937 回答
0

你试过image(1:60, 1:60, Images(:, :, :, i))吗?

要获得单个频道,您可以执行以下操作:

colormap(gray)
image(Images(:,:,1,i))

或者

colormap(gray)
image(Images(:,:,2,i))

或者

colormap(gray)
image(Images(:,:,3,i))

这应该为您分离通道并将单个颜色分量缩放到正确的饱和度水平。

此外,如果您收到关于它超出范围的错误,请尝试:

imagesc(1:60, 1:60, Images(:, :, :, i)) 

也就是说,我很难相信你的教授或同事没有给你标准 [0,255] 格式的 RGB 数据。但是,如果您这样做,那么imagesc并排比较颜色通道将毫无用处。

查看每个颜色矩阵中的某些值的样子也可能会有所帮助。如果您给我以下输出,我们可以看到:

min(Images(:, :, 1, 1))
max(Images(:, :, 1, 1))

如果实际上它们是某种浮点数,我可以向您展示如何将其缩放为标准整数 RGB 表示。

于 2013-04-23T10:19:36.830 回答