MATLAB imread bmp图像不正确

时间:2015-11-02 17:23:08

标签: image matlab image-processing imread

我有一张灰度图像。

当我在MATLAB中加载它时,我发现灰度级与原始图像不匹配。使用MATLAB读入的图像比原始图像更亮。我究竟做错了什么?我该如何解决?

左边一个是读取matlab,右边一个是原始

enter image description here

The original bmp file can be downloaded here.

1 个答案:

答案 0 :(得分:4)

事实证明你的图像有一个相关的颜色图。当您执行X = imread('Lena.bmp');时,您正在阅读索引图片。这意味着每个值都是索引到颜色图中 - 这与实际强度本身不同。

因此,使用颜色映射读入图像,然后将带有颜色映射的索引图像转换为实际图像。您必须调用imread的两个输出变体,然后使用ind2rgb相应地转换索引图像:

[X,map] = imread('Lena.bmp');
im = ind2rgb(X,map);
imshow(im);

我得到的图片与您的右图相符:

enter image description here

将来,如果您不确定图像是否带有颜色贴图,请调用双输出变体,然后检查包含颜色贴图的第二个输出是否为非空。如果是,请相应地致电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);