(keras)在ImageDataGenerator中实现图片随机裁剪改变大小

本文介绍了一种在使用ImageDataGenerator进行图片读取与增强时,如何通过自定义随机裁剪函数实现特定尺寸裁剪的方法。针对原图大小1080*1920,裁剪为512*512,并结合随机变换进一步增强训练数据。
摘要由CSDN通过智能技术生成

场景:假设存在一个写好的ImageDataGenerator并调用了flow_from_directory来实现读取与增强,在这个过程的第一步需要添加随机裁剪功能,使得原本大小为A*B的图片裁剪为a*b,此处由于水平有限只实现了train_on_batch的调用方式
思路:这个随机裁剪函数本身不难,但是如果将这个函数硬塞到ImageDataGenerator的那个预处理参数里面,会因为前后尺寸变化报错,所以采用了一种折衷的办法
有感觉不对的地方可以自行根据实际需要修改

def my_random_crop(image):
    # 定义的随机裁剪函数将1080*1920裁成512*512
    ret = []
    for i in range(len(image)):
        y = int(np.random.randint(1080 - 512 + 1))
        x = int(np.random.randint(1920 - 512 + 1))
        h = 512
        w = 512
        image_crop = image[i, y:y + h, x:x + w, :]
        if image_crop.shape[0] != 512 or image_crop.shape[1] != 512:
            print('image size error')
        ret.append(image_crop)
    return np.array(ret)
    
datagen = ImageDataGenerator(
# 不设置参数
)

it = datagen.flow_from_directory(
      data_path,
      # 数据路径
      batch_size=batch_size,
      class_mode="categorical",
      shuffle=True,
      target_size=(1080, 1920)) 
      # 原始图片大小
)

dataaug = ImageDataGenerator(
# 设置原本想要的变换参数
)

for i in range(epochs):
    for j in range(train_batch_num):
        # train_batch_num需要自己计算,该值和ImageDataGenerator中的某参数有关
        # 当然如果很不确定的话最好还是把验证集的比例设置为0,然后再另外跑验证集
        print(u"\r", 'epoch', i, 'batch', j, end="")
        x, y = it.next()
        x = my_random_crop(x)
        for k in range(len(x)):
            x[k] = dataaug.random_transform(x[k])
        model.train_on_batch(x, y)
    for j in range(val_batch_num):
        # 略
    
        
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值