4

我有一个灰度图像。

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

左一张是读matlab,右一张是原文

在此处输入图像描述

原始的 bmp 文件可以在这里下载。

4

1 回答 1

5

事实证明,您的图像具有关联的颜色图。当您这样做时X = imread('Lena.bmp');,您正在阅读索引图像。这意味着每个值都是颜色映射的索引- 这与实际强度本身不同。

因此,读入带有颜色图的图像,然后将带有颜色图的索引图像转换为实际图像。您必须调用 的两个输出变量imread,然后相应地转换索引图像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);

图像也将是 type double,因此要转换为uint8(最常见的类型),只需执行以下操作:

im = im2uint8(im);
于 2015-11-02T17:35:41.650 回答