rgbImage = grayImage / max(max(grayImage));
或
rgbImage = grayImage / 255;
上述哪一项是正确的,还有原因?
答案 0 :(得分:23)
要将grayscale image转换为RGB image,您必须解决两个问题:
double
数据类型时,图像像素值应为0到1范围内的浮点数。当存储为uint8
数据类型时,图像像素值应为整数范围为0到255.您可以使用函数class
检查图像矩阵的数据类型。以下是您可能遇到的3种典型情况:
要将uint8
或double
灰度图像转换为相同数据类型的RGB图像,您可以使用函数repmat
或cat
:
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
时要小心。如果grayImage
为uint8
,那么您将在255*grayImage/max(grayImage(:))
操作中失去一些精确度。
此外,规范化grayImage
取决于数据。在您的问题中,您使用了两种方法:
rgbImage = grayImage / max(max(grayImage));
对灰度图像进行标准化,使图像中的最大值为1
和
rgbImage = grayImage / 255;
仅在grayImage
中的值位于0-255
范围内时才有意义。
所以这真的取决于你想做什么。但是,如果您想要RGB图像,则需要将单通道矩阵转换为3通道矩阵。