image - MATLAB imread bmp 图像不正确

标签 image matlab image-processing imread

我有一个灰度图像。

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

左一张是看的matlab,右一张是原创

enter image description here

The original bmp file can be downloaded here.

最佳答案

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

因为你的图像是灰度的,如果你想把它转换成单 channel ,要么使用 rgb2gray , 或从图像中提取任何 channel 。灰度的工作原理是使 RGB 图像中的每个 channel 完全相同。

因此:

im = rgb2gray(im); 
%// Or
%im = im(:,:,1);

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

im = im2uint8(im);

关于image - MATLAB imread bmp 图像不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33483343/

相关文章:

css - 用于图像、css 和 js 的暂存服务器 .htaccess

asp.net - 使用 itext (itextsharp) 替换一个 PDF 模板页面上的多个不同图像

android - 有什么方法可以使用路径查找图像吗? MediaStore.Images.Thumbnails (Android)

c - 将代码从 MATLAB 移植到 C(OpenCV)

matlab 不允许 sinc(0)

c++ - 多 channel 核图像卷积

c# - 如何在 Windows 应用程序的电子邮件正文中附加多图像?

c++ - 图像颜色转换

c++ - 如何使用 OpenCV 检测大量白色像素的区域?

matlab - 根据给定矩阵的对角线和反对角线创建新矩阵