如何在MATLAB中将灰度矩阵转换为RGB矩阵?

时间:2010-04-12 03:04:20

标签: image matlab matrix rgb grayscale

rgbImage = grayImage / max(max(grayImage));

rgbImage = grayImage / 255;

上述哪一项是正确的,还有原因?

2 个答案:

答案 0 :(得分:23)

要将grayscale image转换为RGB image,您必须解决两个问题:

  • Grayscale images是2-D,而RGB images是3-D,因此您必须复制灰度图像数据三次,并沿三维连接三个副本。
  • 图像数据可以存储在许多不同的data types中,因此您必须相应地转换它们。当存储为double数据类型时,图像像素值应为0到1范围内的浮点数。当存储为uint8数据类型时,图像像素值应为整数范围为0到255.您可以使用函数class检查图像矩阵的数据类型。

以下是您可能遇到的3种典型情况:

  • 要将uint8double灰度图像转换为相同数据类型的RGB图像,您可以使用函数repmatcat

    rgbImage = repmat(grayImage,[1 1 3]);
    rgbImage = cat(3,grayImage,grayImage,grayImage);
    
  • 要将uint8灰度图像转换为double RGB图像,您应首先转换为double,然后再缩放255:

    rgbImage = repmat(double(grayImage)./255,[1 1 3]);
    
  • 要将double灰度图像转换为uint8 RGB图像,您应首先缩放255,然后转换为uint8

    rgbImage = repmat(uint8(255.*grayImage),[1 1 3]);
    

答案 1 :(得分:2)

根据定义,RGB图像有3个通道,这意味着您需要一个三维矩阵来表示图像。所以,正确的答案是:

rgbImage = repmat(255*grayImage/max(grayImage(:)),[1 1 3]);

正常化grayImage时要小心。如果grayImageuint8,那么您将在255*grayImage/max(grayImage(:))操作中失去一些精确度。

此外,规范化grayImage取决于数据。在您的问题中,您使用了两种方法:

rgbImage = grayImage / max(max(grayImage));

对灰度图像进行标准化,使图像中的最大值为1

rgbImage = grayImage / 255;

仅在grayImage中的值位于0-255范围内时才有意义。

所以这真的取决于你想做什么。但是,如果您想要RGB图像,则需要将单通道矩阵转换为3通道矩阵。