Почему изменение размера изображения приводит к увеличению каналов? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть изображения в оттенках серого разных размеров, поэтому мне нужно преобразовать их в одно измерение (скажем, 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)

Мне не нужно последнее измерение.Как это происходит?Я получаю аналогичные результаты даже с "из resizeimage import resizeimage".

1 Ответ

0 голосов
/ 08 февраля 2019

Существует ряд проблем с вашим кодом ...


Если вы ожидаете получить изображение в оттенках серого, убедитесь, что это именно то, что вы получите.Итак, измените это:

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.

...