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

mad*_*mad 3 matlab image 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
Run Code Online (Sandbox Code Playgroud)

您可以看到上面的代码有效,但是当我执行以下命令时:

imwrite(rgb_image,'rgb_image.ppm');
Run Code Online (Sandbox Code Playgroud)

图像全是白色的.如何使用正确的格式保存图像?

Sha*_*hai 5

问题原因:

gray_image是类型uint8rgb_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');
Run Code Online (Sandbox Code Playgroud)

或者,您可以转换gray_image为double

gray_image = im2double( gray_image );
Run Code Online (Sandbox Code Playgroud)