下午好,
运行以下代码时:
testImage = double(imread(testfile));
figure; imshow(testImage)
greyTestImage = rgb2gray(testImage);
figure; imshow(greyTestImage)
我不清楚,大多数是空白的图像,我无法使用色彩图来表达它。以下是原始图像和两个结果数字:
1:
2:
3:
答案 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)
答案 2 :(得分:1)
这可能是您要加载的图片的问题。
rgb2gray
函数的输入需要是3通道彩色图像(R,G,B通道的MxNx3矩阵)。
如果您使用内置的Matlab示例图像,则可以有效地执行:
imdata = imread('ngc6543a.jpg');
figure; imshow(imdata)
然后:
test = rgb2gray(imdata);
答案 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]。