使用keras.preprocess.image.ImageDataGenerator时如何定义自己的自定义图像预处理函数

时间:2017-11-02 05:32:28

标签: image-processing deep-learning keras

我发现有些图像预处理函数未包含在keras.preprocess.image.ImageDataGenerator

那么如何将我自己的自定义预处理功能添加到ImageDataGenerator,如更改亮度,饱和度,颜色抖动,图像裁剪等。

4 个答案:

答案 0 :(得分:2)

实际上 - 您可以指定自己的预处理功能并在ImageGenerator中进行设置。例如:

def preprocessor(image):
    # perform augmentations here

然后:

image_generator = ImageDataGenerator(..., preprocessing_function=preprocessor)

答案 1 :(得分:1)

def get_random_eraser(p=0.5, s_l=0.02, s_h=0.4, r_1=0.3, r_2=1/0.3, v_l=0, v_h=255, pixel_level=False):
    def eraser(input_img):
        img_h, img_w, img_c = input_img.shape
        p_1 = np.random.rand()

        if p_1 > p:
            return input_img

        while True:
            s = np.random.uniform(s_l, s_h) * img_h * img_w
            r = np.random.uniform(r_1, r_2)
            w = int(np.sqrt(s / r))
            h = int(np.sqrt(s * r))
            left = np.random.randint(0, img_w)
            top = np.random.randint(0, img_h)

            if left + w <= img_w and top + h <= img_h:
                break

        if pixel_level:
            c = np.random.uniform(v_l, v_h, (h, w, img_c))
        else:
            c = np.random.uniform(v_l, v_h)

        input_img[top:top + h, left:left + w, :] = c

        return input_img

    return eraser


    datagen = ImageDataGenerator(preprocessing_function=get_random_eraser(v_l=0, v_h=1), zoom_range=0.0, horizontal_flip=False)

答案 2 :(得分:0)

为了让Marcin解决方案对我有用,我必须在ImageDataGenerator中定义preprocessing_function:

  

train_datagen = ImageDataGenerator(       ...       preprocessing_function = 预处理器(图像).all(),   ...       )

答案 3 :(得分:0)

只需设置预处理功能并将其作为参数传递给preprocessing_function的{​​{1}}函数即可。您还可以通过在一个ImageDataGenerator函数中调用所有预处理函数,从而在ImageDataGenerator中传递多个预处理函数。

如果您尝试仅传递一个预处理功能:-

preprocess()

如果您尝试传递多个预处理功能:-

def preprocess():
    # operations

然后只需在ImageDataGenerator中传递该preprocess()即可:-

def preprocess():
    another preprocess_function()
        # operations