使用imgaug进行语义分割数据集增强

使用imgaug批量进行图像增强,实现图片和标签mask同步转换,基于三波段png格式遥感影像数据集

给定数据集路径和输出路径,将增强的数据集存到指定的路径。
对每张图片,在imgaug转换序列中随机选取5种转换方法。
imgaug如何使用,参考了其他博文:
用于医学图像分割的数据增强方法 —— 标准 imgaug 库的使用方法
Python 第三方模块之 imgaug (图像增强)

import imgaug.augmenters as iaa  # 导入iaa
import cv2
import glob
import os
import numpy as np

if __name__ == '__main__':
    img_dir = '/train/images/'	# 图片文件路径
    msk_dir = '/train/masks/'	# 标签文件路径
    img_type = '.png'
    img_tmp_dir = '/tmp/images/'	# 输出图片文件路径
    msk_tmp_dir = '/tmp/masks/'
    img_list = os.listdir(img_dir)
    msk_list = os.listdir(msk_dir)

    for i in range(len(img_list)):
        img_name = img_list[i]
        msk_name = msk_list[i]

        img = cv2.imread(filename=img_dir + "/" + img_name)
        img = np.expand_dims(img, axis=0).astype(np.float32)
        msk = cv2.imread(filename=msk_dir + "/" + msk_name)
        msk = np.expand_dims(msk, axis=0).astype(np.int32)
        # 定义数据增强策略
        # 每次选择一个翻转方式
        seq = iaa.SomeOf(1, [
            iaa.Fliplr(p=1),    # 水平翻转
            iaa.Flipud(p=1),    # 垂直翻转
            iaa.GaussianBlur(sigma=(0, 3.0)),   # 高斯模糊
            iaa.Sharpen(alpha=(0, 0.3), lightness=(0.9, 1.1)),  # 锐化处理
            iaa.Affine(scale=(0.9, 1), translate_percent=(0, 0.1), rotate=(-40, 40), cval=0, mode='constant'),   # 仿射变换
            iaa.CropAndPad(px=(-10, 0), percent=None, pad_mode='constant', pad_cval=0, keep_size=True), # 裁剪缩放
            iaa.PiecewiseAffine(scale=(0, 0.05), nb_rows=4, nb_cols=4, cval=0),     # 以控制点的方式随机形变
            iaa.ContrastNormalization((0.75, 1.5), per_channel=True),  # 对比度增强,0.75-1.5随机数值为alpha,该alpha应用于每个通道
            iaa.AdditiveGaussianNoise(loc=0, scale=(0.0, 0.05 * 255), per_channel=0.5),  # 高斯噪声
            iaa.Multiply((0.8, 1.2), per_channel=0.2),  # 20%的图片像素值乘以0.8-1.2中间的数值,用以增加图片明亮度或改变颜色
        ])
        # 同时对原图和分割进行数据增强
        for j in range(5):
            img_aug, msk_aug = seq(images=img, segmentation_maps=msk)
            img_out = img_tmp_dir + img_name.split(".")[0] + "_" + str(j) + img_type
            msk_out = msk_tmp_dir + msk_name.split(".")[0] + "_" + str(j) + img_type
            cv2.imwrite(img_out, img_aug[0])
            cv2.imwrite(msk_out, msk_aug[0,:,:,0])
        print("正在进行数据增强{}".format(i))

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值