У меня есть альбомное изображение с формой (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)
(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: 2.20.0
версия Keras: 3.13.2
версия Python: 3.12.9
ОС: окно 11
Я уже проверил tf.keras.backend.image_data_format() и подтверждается как «channels_last». Почему ImageDataGenerator меняет поведение сдвигов ширины и высоты? Это известная ошибка для изображений с широким соотношением сторон?
Будем благодарны за любую помощь.
Подробнее здесь: https://stackoverflow.com/questions/798 ... orrect-inp