我有一个灰度图像,我希望这个图像作为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');
图像全白。如何使用正确的格式保存图像?
答案 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中有关图像处理轻松的所有步骤。