こんにちは、
次のコードを実行すると:
testImage = double(imread(testfile));
figure; imshow(testImage)
greyTestImage = rgb2gray(testImage);
figure; imshow(greyTestImage)
不明瞭でほとんど空白の画像が表示されます。カラーマップを使用して修正できませんでした。以下は、元の画像と 2 つの結果の図です。
1:
2:
3:
こんにちは、
次のコードを実行すると:
testImage = double(imread(testfile));
figure; imshow(testImage)
greyTestImage = rgb2gray(testImage);
figure; imshow(greyTestImage)
不明瞭でほとんど空白の画像が表示されます。カラーマップを使用して修正できませんでした。以下は、元の画像と 2 つの結果の図です。
1:
2:
3:
読み取ろうとしている画像の形式を知っている必要があります。これを確実にするために、ユーザー定義の画像を不明な形式から 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;
この助けを願っています。
乾杯
8 ビットの符号なし整数に変換してみましたか?
testImage = double(imread('PEYXW.jpg'));
figure; imshow(uint8(testImage))
greyTestImage = rgb2gray(uint8(testImage));
figure; imshow(greyTestImage)
実際、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] の範囲にスケーリングします。