为什么调整图像大小会导致通道增加?

Why resizing image lead to increase in channels?

我有不同尺寸的灰度图像,因此我需要将它们转换为相同尺寸(比如 28*28)以用于我的实验。我尝试使用不同的方法来做到这一点并且我能够做到,但我观察到图像大小的调整会导致通道数量的增加。我是 python 和图像处理的新手,所以请帮忙。

from PIL import Image

image = Image.open('6.tif')
image = image.resize((28, 28), Image.ANTIALIAS)
image.save('6.png', 'PNG', quality=100)

然后下面的代码显示了不同的维度:

import imageio

image_data = imageio.imread("6.tif").astype(float)
print(image_data.shape)

image_data = imageio.imread("6.png").astype(float)
print(image_data.shape)

结果是:

(65, 74)
(28, 28, 4)

我不需要最后一个维度。这是怎么来的?即使 "from resizeimage import resizeimage".

我也得到了类似的结果

您的代码存在许多问题...


如果您需要灰度图像,请确保您得到的是灰度图像。所以,改变这个:

image = Image.open('6.tif')

至:

image = Image.open('6.tif').convert('L')

调整图像大小时,需要使用其中一种正确的重采样方法:

  • PIL.Image.NEAREST
  • PIL.Image.BOX
  • PIL.Image.BILINEAR
  • PIL.Image.HAMMING
  • PIL.Image.BICUBIC
  • PIL.Image.LANCZOS

因此,您需要将 ANTI_ALIAS 替换为上面列表中的内容:

image = image.resize((28, 28), Image.ANTIALIAS)

保存为 PNG 时,始终 无损。品质因数与 JPEG 图像的工作方式不同,因此您应该忽略它,除非您很好地理解它如何影响 PNG 编码器。


如果您进行这些更改,特别是第一个,我认为您的问题就会消失。请记住,尽管 PNG 编码器 可能 获取 RGB 图像并将其保存为托盘化图像,或者它可能获取灰度图像并将其编码为 RGB 或 RGB alpha。