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);
我用 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);