Я пытался дополнить некоторые тренировочные данные и соответствующие метки с помощью ImageDataGenerator.
Вот как я подошел (извиняюсь, если форматирование немного отключено)
def create_morph():
i = 0
img_type = 'png'
#get the path to all the images to be morphed
print ('getting morph path...')
imgs = glob(OG_PATH + "/*." + img_type)
#check how many images are in the morph path
print('length of imgs')
print(len(imgs))
#make two identical structured numpy arrays (num of images, rows, cols, binary). This is for loading into later
rows = 208
cols = 336
imgdatas = np.ndarray((len(imgs),rows,cols,1), dtype=np.uint8)
imglabels = np.ndarray((len(imgs),rows,cols,1), dtype=np.uint8)
#image-wise
for imgname in imgs:
print('inside for-loop')
midname = imgname[imgname.rindex("/")+1:]
img = load_img(OG_PATH + "/" + midname,grayscale = True)
label = load_img(GT_PATH + "/" + midname,grayscale = True)
#convert images to arrays
img = img_to_array(img)
label = img_to_array(label)
#make a big npy array
imgdatas[i] = img
imglabels[i] = label
if i % 100 == 0:
print('Done: {0}/{1} images'.format(i, len(imgs)))
i += 1
#setup the morph paramaters
morphData = dict(
horizontal_flip = True,
vertical_flip = True)
#assign the morphing to each label and og image
morph_img = ImageDataGenerator(**morphData)
morph_label = ImageDataGenerator(**morphData)
#apply morph to og images
print('saving to file')
a = 0
b = 0
for batch in morph_img.flow(
imgdatas,
save_to_dir = MORPHED_PATH + '/augment_results_im/',
batch_size = 1,
save_prefix = 'batch',
save_format = 'png'):
a+=1
if a > len(imgdatas):
break
print ('done with the OGs')
#apply morph to label images
for batch in morph_label.flow(
imglabels,
save_to_dir = MORPHED_PATH + '/augment_results_labels/',
batch_size = 1,
save_prefix = 'batch',
save_format = 'png'):
b+=1
if b > len(imgdatas):
break
print('done with labels')
Этот код работает для меня так, как я получаю перевернутые изображения, но проблема, с которой я сталкиваюсь, заключается в том, что он будет переворачивать только первые два изображения, но не остальные изображения в моих массивах imgdatas и imglabels.Остальные выходят пустыми.См. здесь для примера.Я изучил этот пост и этот об итерации по .flow (), но все еще не уверен, почему только 2 изображения работают, когда я итерирую по .flow ().Есть идеи?
Также я не уверен в том, что означают названия изображений, похоже, это случайное число, но не уверен, где оно было определено.
Спасибо за вашу помощь