我得到了一个 Matlab 格式的人脸数据集,但是在我将数据集导入 Matlab 之后,我不知道如何显示图像。
矩阵的大小为 60x60x3x1000,即图像尺寸为 60x60,每个图像 RGB 有 3 个通道,这样的图像有 1000 张。
我不知道如何进行基本操作,例如以彩色显示第 i 个面。
谢谢
我得到了一个 Matlab 格式的人脸数据集,但是在我将数据集导入 Matlab 之后,我不知道如何显示图像。
矩阵的大小为 60x60x3x1000,即图像尺寸为 60x60,每个图像 RGB 有 3 个通道,这样的图像有 1000 张。
我不知道如何进行基本操作,例如以彩色显示第 i 个面。
谢谢
看起来好像数据在 [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 );
你试过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 表示。