MATLAB imread bmp 图像不正确
MATLAB imread bmp image is not correct
我有一张灰度图。
当我在 MATLAB 中加载它时,我发现灰度级与原始图像不匹配。使用 MATLAB 读入的图像比原始图像更亮。我究竟做错了什么?我该如何解决?
左一张是看matlab的,右一张是原创的
原来你的图片有一个关联的颜色图。当您执行 X = imread('Lena.bmp');
时,您正在阅读 索引 图像。这意味着每个值都是色图中的 索引 - 这与实际强度本身不同。
因此,读入带有色图的图像,然后将带有色图的索引图像转换为实际图像。您必须调用 imread
, then convert the indexed image accordingly with ind2rgb
:
的两个输出变体
[X,map] = imread('Lena.bmp');
im = ind2rgb(X,map);
imshow(im);
我收到这张图片,与您的右图相符:
以后,如果您不确定您的图像是否带有色图,请调用双输出变体,然后检查包含色图的第二个输出是否是非空。如果是,则相应地调用 ind2rgb
:
[im, map] = imread('...'); %// Place your input image location here
if ~isempty(map)
im = ind2rgb(im,map);
end
因为你的图像是灰度的,如果你想把它转换成单通道,要么使用rgb2gray
,要么从图像中提取任何通道。灰度使得 RGB 图像中的每个通道完全相同。
因此:
im = rgb2gray(im);
%// Or
%im = im(:,:,1);
图像也将是 double
类型,因此要转换为 uint8
(最常见的类型),只需执行以下操作:
im = im2uint8(im);
我有一张灰度图。
当我在 MATLAB 中加载它时,我发现灰度级与原始图像不匹配。使用 MATLAB 读入的图像比原始图像更亮。我究竟做错了什么?我该如何解决?
左一张是看matlab的,右一张是原创的
原来你的图片有一个关联的颜色图。当您执行 X = imread('Lena.bmp');
时,您正在阅读 索引 图像。这意味着每个值都是色图中的 索引 - 这与实际强度本身不同。
因此,读入带有色图的图像,然后将带有色图的索引图像转换为实际图像。您必须调用 imread
, then convert the indexed image accordingly with ind2rgb
:
[X,map] = imread('Lena.bmp');
im = ind2rgb(X,map);
imshow(im);
我收到这张图片,与您的右图相符:
以后,如果您不确定您的图像是否带有色图,请调用双输出变体,然后检查包含色图的第二个输出是否是非空。如果是,则相应地调用 ind2rgb
:
[im, map] = imread('...'); %// Place your input image location here
if ~isempty(map)
im = ind2rgb(im,map);
end
因为你的图像是灰度的,如果你想把它转换成单通道,要么使用rgb2gray
,要么从图像中提取任何通道。灰度使得 RGB 图像中的每个通道完全相同。
因此:
im = rgb2gray(im);
%// Or
%im = im(:,:,1);
图像也将是 double
类型,因此要转换为 uint8
(最常见的类型),只需执行以下操作:
im = im2uint8(im);