MATLAB中imshow()和rgb2gray()的问题

时间:2013-07-29 12:57:57

标签: matlab image-processing

下午好,

运行以下代码时:

testImage = double(imread(testfile));
figure; imshow(testImage)
greyTestImage = rgb2gray(testImage);
figure; imshow(greyTestImage)

我不清楚,大多数是空白的图像,我无法使用色彩图来表达它。以下是原始图像和两个结果数字:

1:original image

2:result of imshow

3:image after rgb2gray

4 个答案:

答案 0 :(得分:5)

您必须知道您尝试阅读的图像的格式。为了确保这一点,当我想将用户定义的图像从未知格式转换为uint8灰度时,我总是在我的程序中使用以下代码:

    % load image
    [filename, pathname] = uigetfile({'*.*'},'image file');
    fullFilename = [pathname filename];
    % Get image info, read it accordingly
    info = imfinfo(fullFilename);
    if(strcmp('truecolor',info.ColorType))
        I = imread(fullFilename);
        Igray = uint8(rgb2gray(I));
        clear I
    elseif(strcmp('grayscale',info.ColorType))
        Igray = uint8(imread(fullFilename));
    elseif(strcmp('indexed',info.ColorType))
        [I,map] = imread(fullFilename);
        Igray = uint8(ind2gray(I,map));
        clear I map
    else
        error('statPart:FormatImage','Image format error');
    end
    clear info

此外,如果您假设testfile是uint8并且希望将其转换为double(双倍强度范围从0到1),则testImage = double(imread(testfile));将不起作用。你必须testImage = double(imread(testfile)) / 255;

希望得到这个帮助。

干杯

答案 1 :(得分:2)

您是否尝试过转换为8位无符号整数?

testImage = double(imread('PEYXW.jpg'));
figure; imshow(uint8(testImage))
greyTestImage = rgb2gray(uint8(testImage));
figure; imshow(greyTestImage) 

first image

second image

答案 2 :(得分:1)

这可能是您要加载的图片的问题。

rgb2gray函数的输入需要是3通道彩色图像(R,G,B通道的MxNx3矩阵)。

如果您使用内置的Matlab示例图像,则可以有效地执行:

imdata = imread('ngc6543a.jpg');

figure; imshow(imdata)

enter image description here

然后:

test = rgb2gray(imdata);

enter image description here

答案 3 :(得分:1)

实际上,Matlab提供函数Im2double而不是double来将图像转换为双精度:

testImage = im2double(imread(testfile));
figure; imshow(testImage)
greyTestImage = rgb2gray(testImage);
figure; imshow(greyTestImage)

在双精度中,图像RGB值介于0和1之间,对于uint8,它们的范围介于0和127之间。使用double函数时,所有RGB值都保持其值,但它们具有双精度。这意味着任何值为> = 1的RBG tiple将导致double> = 1,从而在图像中产生空白区域。 im2double实际上将值缩放到范围[0 1]。