Поверните пакет изображений, используя `scipy.ndimage.interpolation.rotate`

Давайте предположим, что X это numpy.ndarray тензор, содержащий набор цветных изображений. Например, Xформа (100, 3, 32, 32); то есть у нас есть 100 изображений 32x32 rgb (например, предоставленных набором данных CIFAR).

Я хочу повернуть изображения в X и я узнал, что это можно сделать с помощью функции scipy.ndimage.interpolation.rotate.

Тем не менее, я могу сделать это правильно только для одного изображения и одного цветового канала каждый раз, в то время как я хотел бы применить функцию для всех изображений и всех цветовых каналов одновременно.

То, что я пробовал и до сих пор работает, заключается в следующем:

import scipy.ndimage.interpolation

image = X[0,0,:,:]
rotated_image = scipy.ndimage.interpolation.rotate(input=image, angle=45, reshape=False)

но что я хочу сделать, что может выглядеть так

X_rot = scipy.ndimage.interpolation.rotate(input=X, angle=45, reshape=False)

не работает.

Есть ли способ подать заявку scipy.ndimage.interpolation.rotate для серии изображений, таких как тензор numpy.ndarray X?

В любом случае, есть ли лучший способ повернуть пакет изображений (хранится в numpy.ndarray) эффективно?

1 ответ

Если вы хотите однострочный,

      import scipy.ndimage.interpolation as intrp

rotated_imgs = [intrp.rotate(input=img, angle=45, reshape=False) for img in X]

предположил, что ваш X имеет более стандартную форму (n_images, w, h, color_channels).

Если вы хотите получить в свои руки матрицы, я предлагаю вам создать матрицу вращения с помощью cv2.getRotationMatrix2D, скопируйте/сложите его вдоль первой оси, а затем примените к своему X, но это может усложниться без cv2.warpAffine, который принимает одно изображение в качестве входных данных.

Другие вопросы по тегам