如何在keras或tensorflow中使用ImageDataGenerator获取相同的增强图像?

时间:2018-04-04 14:23:12

标签: python image-processing tensorflow keras

我正在处理尺寸为grayscale的{​​{1}}张图片,并希望使用75 by 75执行一些增强技术。

但是想知道如果我们多次运行,我们是否可以重复ImageDataGenerator。我不是在谈论时代,而是像运行整个代码来模仿完全相同的增强图像以获得相同的结果。

我正在附加output consistently

enter image description here

sample grayscale image

如何在上面的代码中一致地重复增强输出?

我知道这段代码编写得很糟糕,对代码优化的任何建议也非常感谢。

谢谢,

戈皮

2 个答案:

答案 0 :(得分:3)

您可以将seed设置为flow方法:

aug_iter = gen.flow(image, seed = 0)

通过将此参数设置为特定的整数,您将始终获得相同的随机改组/转换序列。

答案 1 :(得分:1)

您可以运行生成器并保存图像,然后只需加载图像:

# Trial #1
# Generate batches of augmented images from this image
aug_iter = gen.flow(image)
# Get 10 samples of augmented images
aug_images1 = [next(aug_iter)[0].reshape(75,75).astype(np.uint8) for i in range(10)]

如果内存不是问题,可以使用numpy保存:

aug_images1 = np.array(aug_images1)
np.save(filename, aug_images1)

然后加载它:

aug_images1 = np.load(filename)

如果您愿意,可以使用Pillow等图像库将每个图像保存为正确的图像文件(占用的内存较少):

from PIL import Image

for (im,filename in zip(aug_images1,list_of_names)):
    im = Image.fromarray(im) #make sure you have a uint8 from 0 to 255 array.
    im.save(filename)

稍后,加载文件:

aug_images1 = [np.array(image.open(filename)) for filename in list_of_names]
aug_images1 = np.array(aug_images1)

使用ImageDataGenerator加载文件

如果您不想在内存中同时加载所有图像,并保存图像,则可以创建新的ImageDataGenerator,但不需要任何增强,只需要纯粹的图像加载器。

然后使用gen.flow_from_directory()从目录中获取图像。

在文档中阅读更多内容:https://keras.io/preprocessing/image/