Поверните пакет изображений, используя `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
, который принимает одно изображение в качестве входных данных.