2

下午好,

运行以下代码时:

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

我不清楚并且大部分是空白图像,我无法使用颜色图对其进行修复。以下是原始图像和两个结果图:

1:原始图像

2:imshow的结果

3:rgb2gray后的图像

4

4 回答 4

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

此外,testImage = double(imread(testfile));如果您假设 testfile 是 uint8 并且想要将其转换为双倍(双倍强度应从 0 到 1),则此 : 将不起作用。你所要做的testImage = double(imread(testfile)) / 255;

希望这有帮助。

干杯

于 2013-07-29T13:18:57.567 回答
2

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

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

第一张图片

第二张图片

于 2013-07-29T17:17:20.623 回答
1

这可能是您正在加载的图像的问题。

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

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

imdata = imread('ngc6543a.jpg');

figure; imshow(imdata)

在此处输入图像描述

然后:

test = rgb2gray(imdata);

在此处输入图像描述

于 2013-07-29T13:11:30.630 回答
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 提示将导致双精度 >= 1 并因此在图像中产生空白。 im2double实际上将值缩放到范围 [0 1]。

于 2013-07-29T17:33:51.700 回答