У меня есть альбомное изображение с формой (1056, 2000, 3).
- Высота (ось 0): 1056
- Ширина (Ось 1): 2000
Проблема: Когда я устанавливаю width_shift_range=0.4, изображение смещается по вертикали (вверх и вниз), а не по горизонтали. И наоборот, когда я устанавливаю height_shift_range=0.4, изображение смещается по горизонтали (влево и вправо).
Похоже, что Keras неправильно сопоставляет ширину с осью 0 и высоту с осью 1, хотя входной массив соответствует стандартному формату (H, W, C), и imshow отображает его правильно.
Вот мой фрагмент кода:
Код: Выделить всё
import cv2
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# Image shape is (1056, 2000, 3)
img = cv2.imread('my_image.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
def show_aug_image(img, generator, n_img=4):
img_batch = np.expand_dims(img, axis=0)
generator.fit(img_batch)
gen_iter = generator.flow(img_batch)
fig, axes = plt.subplots(1, n_img, figsize=(24, 8))
for i in range(n_img):
aug_batch = next(gen_iter)
print(aug_batch.shape)
aug = np.squeeze(aug_batch)
print(aug.shape)
aug = aug.astype('int')
axes[i].imshow(aug)
print(img_batch.shape)
# This shifts the image UP/DOWN (Vertically)
gen = ImageDataGenerator(width_shift_range=0.4, fill_mode='constant', cval=0)
show_aug_image(img, gen)
# This shifts the image LEFT/RIGHT (Horizontally)
# gen = ImageDataGenerator(height_shift_range=0.4, fill_mode='constant', cval=0)
# show_aug_image(img, gen)
Код: Выделить всё
(1, 1056, 2000, 3)
(1056, 2000, 3)
(1, 1056, 2000, 3)
(1056, 2000, 3)
(1, 1056, 2000, 3)
(1056, 2000, 3)
(1, 1056, 2000, 3)
(1056, 2000, 3)
(1, 1056, 2000, 3)
Окружающая среда:
Код: Выделить всё
tensorflow version : 2.20.0
keras version : 3.13.2
python version : 3.12.9
OS : window 11
Подробнее здесь: https://stackoverflow.com/questions/798 ... orrect-inp
Мобильная версия