【问题标题】:MATLAB imread bmp image is not correctMATLAB imread bmp 图像不正确
【发布时间】:2016-02-02 16:10:57
【问题描述】:

我有一张灰度图像。

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

左边是读matlab,右边是原版

The original bmp file can be downloaded here.

【问题讨论】:

    标签: image matlab image-processing imread


    【解决方案1】:

    事实证明,您的图像具有与之关联的颜色图。当您执行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);
    

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

    im = im2uint8(im);
    

    【讨论】:

    • map后如何将rgb表变成单灰度表?
    • @ShineZero 都是灰度,所以你可以使用im = rgb2gray(im);,也可以只提取一个通道:im = im(:,:,1);。无论哪种方式,它都会是一样的。我已经相应地编辑了我的答案。让我知道它是否有效!
    • 还有一个小问题,能不能把表值改成0~255?
    • 只需执行im = uint8(255*im);。或者,如果您很懒惰,请使用im = im2uint8(im);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2015-10-14
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    相关资源
    最近更新 更多