使用灰度图像用matlab创建RGB图像

时间:2013-12-03 10:28:12

标签: image matlab image-processing

我有一个灰度图像,我希望这个图像作为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 个答案:

答案 0 :(得分:5)

问题原因:

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

校正:

同时使用uint8 rgb_imge类型:

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

或者,您可以将gray_image转换为双倍

gray_image = im2double( gray_image );

答案 1 :(得分: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的命令是不够的。我准备了数据以完成指南here中有关图像处理轻松的所有步骤。