【问题标题】:How to display RGB images in Matlab, where each channel is separate matrix?如何在 Matlab 中显示 RGB 图像,每个通道都是单独的矩阵?
【发布时间】:2013-04-14 18:21:34
【问题描述】:

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

矩阵的大小是60x60x3x1000,也就是说, 图像尺寸为 60x60,每个图像 RGB 有 3 个通道, 并且有 1000 个这样的图像。

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

谢谢

【问题讨论】:

  • image(x(:, :, :, ii)) 怎么样?
  • 我收到错误:TrueColor CData 包含超出范围 0.0 的元素
  • 试试 :image(squeeze(x(:, :, :, i)))。

标签: matlab computer-vision face-recognition


【解决方案1】:

看起来好像数据在 [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 );

【讨论】:

    【解决方案2】:

    你试过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 表示。

    【讨论】:

      猜你喜欢
      • 2014-05-11
      • 1970-01-01
      • 2011-07-17
      • 2019-03-24
      • 2011-08-23
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多