MATLAB imread() 错误的灰度图

MATLAB imread() wrong gray scale

我用 paint.net 制作了一个简单的灰度图像:

然后我简单地使用 MATLAB imread() 读取图像并得到类似这样的结果(对于 Octave 也是如此):

我检查了背景值,它是 55 而不是 255。

然后我在 Python 中使用 pyplot.imread() 尝试了同样的事情并得到了预期的结果:

即使我在 MATLAB 中阅读像 Lena 这样的东西时,我也看到过几次——灰度完全混乱了。有谁知道 imread 在 MATLAB(和 Octave)中有什么问题?

您的 PNG 图片是 RGB 图片,不是灰度图片。它被保存为索引图像,这意味着 56 个不同的 RGB 值存储在 table 中,图像通过为每个像素指定索引来引用这些 RGB 值。

您看到的图像包含颜色 table 的索引,而不是保存的实际 RGB 值。

您需要阅读指数和色图如下:

[img,cm] = imread('https://i.stack.imgur.com/rke2o.png');

接下来,您可以使用ind2rgb, or, given that you are looking for a gray-value image, you can recover the gray-values using ind2gray恢复原始RGB图像:

img = ind2gray(img,cm);