2

こんにちは、

次のコードを実行すると:

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

不明瞭でほとんど空白の画像が表示されます。カラーマップを使用して修正できませんでした。以下は、元の画像と 2 つの結果の図です。

1:元の画像

2:imshow の結果

3:rgb2gray 後の画像

4

4 に答える 4

5

読み取ろうとしている画像の形式を知っている必要があります。これを確実にするために、ユーザー定義の画像を不明な形式から uint8 grayscale に変換する場合は、常にプログラムで次のコードを使用します。

    % 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 であると想定し、それを double に変換したい場合には機能しません (double の強度は 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) 

最初の画像

2番目の画像

于 2013-07-29T17:17:20.623 に答える
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 タイルは double >= 1 になり、画像に空白が生成されることを意味します。 im2double実際には値を [0 1] の範囲にスケーリングします。

于 2013-07-29T17:33:51.700 に答える