MATLAB imread()错误的灰度

MATLAB imread()错误的灰度,matlab,png,imread,paint.net,Matlab,Png,Imread,Paint.net,我用paint.net制作了一个简单的灰度图像: 然后我使用MATLAB imread()读取图像,得到如下结果(对于倍频程也是如此): 我检查了背景值,它是55而不是255 然后,我使用pyplot.imread()在Python中尝试了同样的方法,得到了预期的结果: 我看过好几次,甚至当我在MATLAB中读到类似Lena的东西时——灰度完全搞砸了。有人知道MATLAB中的imread(和倍频程)有什么问题吗?您的PNG图像是RGB图像,而不是灰度图像。它被保存为索引图像,这意味着56个

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

然后我使用MATLAB imread()读取图像,得到如下结果(对于倍频程也是如此):

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

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


我看过好几次,甚至当我在MATLAB中读到类似Lena的东西时——灰度完全搞砸了。有人知道MATLAB中的imread(和倍频程)有什么问题吗?

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

您看到的图像由颜色表中的索引组成,而不是保存的实际RGB值

您需要阅读索引和颜色贴图,如下所示:

[img,cm] = imread('https://i.stack.imgur.com/rke2o.png');
接下来,您可以使用恢复原始RGB图像,或者,如果您正在查找灰度值图像,则可以使用以下方法恢复灰度值:


这很有趣。但是我需要处理真实图像的实际灰度值,当我执行imread()时,很多值被强制为相同的值。哇,这解释了一切。显然,在绘图软件中,图像模式默认为“索引”。谢谢
img = ind2gray(img,cm);