使用matlab将灰度图像转换为RGB图像

3
我有一张灰度图像,我希望将其作为RGB图像的三个波段。换句话说,新RGB图像的每个波段都将是这个灰度图像。
这是我迄今为止尝试过的:
gray_image=imread('image.pgm');
rgb_image=zeros(size(gray_image,1),size(gray_image,2),3);
rgb_image(:,:,1)=gray_image;
rgb_image(:,:,2)=gray_image;
rgb_image(:,:,3)=gray_image;


>> rgb_image(1,2,1)

 ans = 44

>> rgb_image(1,2,2)

 ans = 44

>> rgb_image(1,2,3)

ans = 44

您可以看到上面的代码是有效的,但当我执行以下命令时:
imwrite(rgb_image,'rgb_image.ppm');

图片全部是白色。如何以正确的格式保存图片?
2个回答

5

问题原因:

gray_image 的类型为 uint8,而 rgb_image 的类型为 double,但两者的值都在 [0..255] 范围内。当 matlab 保存双精度图像时,它期望其值在范围 [0..1] 内,所有大于 1 的值都将被截断为最亮的可能值 1。这就是为什么保存双精度 rgb_image 会导致完全白色的图像。

更正方法:

同样使用 uint8 类型来处理 rgb_image

rgb_image=zeros(size(gray_image,1),size(gray_image,2),3,'uint8');

另外,您可以将gray_image转换为double类型

gray_image = im2double( gray_image );

太好了。再次感谢。 - mad
这就是为什么保存双精度rgb_image会导致完全白色图像的原因。@Shai 我认为这件事在Matlab 2016a中已经改变了。为什么是白色图像?imgGray = imread(...); imgRGB = im2double( imgGray); figure, imshow(imgRGB);。这里是灰度图像。如果同时进行rgb_image=zeros(size(gray_image,1),size(gray_image,2),3,'uint8');,则为黑色图像。原始图像是我想要着色的灰度图像,但我没有成功。 - Léo Léopold Hertz 준영

1

我在Matlab 2016a中成功创建了一张RGB图像,原始图像大部分颜色为灰色

imgGray = imread('Ceres-Bright-Spots-4_500-miles.jpg');  

[r g b]=size(imgGray);
rgb=zeros(r,g,3); 
rgb(:,:,1)=imgGray;
rgb(:,:,2)=rgb(:,:,1);
rgb(:,:,3)=rgb(:,:,1);
imgRGB=rgb/255; 
figure,imshow(imgRGB);

执行Shai的命令并不足够。我准备好了数据,以完成关于图像处理易如反掌指南中的所有步骤。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接