PIL Bicubi c Интерполяция с - PullRequest
0 голосов
/ 31 января 2020

Итак, у меня есть ndarray формы: (28, 28, 1), и я хочу использовать интерполяцию bicubi c, чтобы увеличить ее до (33, 33, 1). Вот что я получил, выполнив поиск в Интернете:

import numpy as np
from PIL import Image as pil_image

...

img = np.array(pil_image.fromarray(img).resize(intermediate_dim, pil_image.BICUBIC))
# print(img.shape) -> (28, 28, 1), print(intermediate_dim) -> (33, 33)

Но я получаю сообщение об ошибке:

Traceback (последний вызов был последним): Файл "filters.py", строка 256, в visualize_layer (mnist, LAYER_NAME) Файл "filters.py", строка 232, в visualize_layer img_loss = _generate_filter_image (input_img, output_layer.output, f) Файл "filters.py", строка 161, в _generate_filter_image img = np.array (pil_image.fromarray (img) .resize (промежуточный_дим, pil_image.BICUBI C)) Файл "BlaBlaBla \ Python37 \ site-packages \ PIL \ Image.py", строка 2682, в формате fromarray повысить TypeError («Не удается обработать этот тип данных:% s,% s»% typekey) Ошибка типа: не удается обработать этот тип данных: (1, 1, 1), | u1

Увидев это, я попытался использовать img.astype(np.uint8), но ничего не помогло. Что я делаю не так?

PS Я уверен, что массив содержит допустимые значения (целые числа из [0, 255])

1 Ответ

0 голосов
/ 31 января 2020

Массив, из которого вы пытаетесь создать изображение PIL, имеет форму:

(28,28,1)

, и это не та форма, которая нравится PIL. Ему нравится:

(M,N) for greyscale images
(M,N,3) for RGB images
(M,N,4) for RGBA images

Итак, вы можете использовать следующее, чтобы выбрать первый канал этого последнего неиспользованного измерения:

img = np.array(pil_image.fromarray(img[...,0]).resize(intermediate_dim, pil_image.BICUBIC))
...