zoukankan      html  css  js  c++  java
  • 【629】图像增强(imgaug 包)

    [1] 图像分割任务中的图像增强

    [2] imgaug学习笔记(包含各个函数说明)

    [3] python图像数据增强——imgaug (二)

      说明:

    • 实例化 iaa.Sequential(),里面包含多种变换
    • 输入 图像数据+标注mask数据,进行对应的增强处理
      注意:对于图像数据,直接转为 numpy.array 既可
               对于标注mask数据,需要通过 SegmentationMapsOnImage 进行处理
    • 每张图片增强10次,产生10个不同的图片

      举例:

    from imgaug import augmenters as iaa 
    from imgaug.augmentables.segmaps import SegmentationMapsOnImage
    from PIL import Image 
    import numpy as np 
    import cv2, os 
    
    img_size = 512
    
    sometimes = lambda aug: iaa.Sometimes(0.5, aug)
    
    seq = iaa.Sequential(
        [   sometimes(iaa.Affine(
                            scale={"x": (0.8, 1.2), "y": (0.8, 1.2)},
                            translate_percent={"x": (-0.2, 0.2), "y": (-0.2, 0.2)},
                            rotate=(-45, 45),
                            shear=(-16, 16),
                            order=[0, 1],
                            cval=(0, 255),
                            mode="constant")),  
            iaa.SomeOf((0, 3), 
                       [iaa.Add((-5, 5), per_channel=0.5),
                        iaa.Grayscale(alpha=(0.0, 1.0), from_colorspace='BGR'),
                        sometimes(iaa.PiecewiseAffine(scale=(0.01, 0.05)))
                       ],
                       random_order=True
                       )
        ],
        random_order=True
    )
    
    src_img_dir = "03_model_dataset_split/01_images/"
    src_seg_dir = "03_model_dataset_split/03_labels_louti/"
    
    dst_img_dir = "04_model_dataset_augmentation/02_louti/01_images/"
    dst_seg_dir = "04_model_dataset_augmentation/02_louti/02_labels_louti/"
    
    for file in os.listdir(src_img_dir):
        src_img_path = os.path.join(src_img_dir, file)
        src_seg_path = os.path.join(src_seg_dir, file)
        
        img = Image.open(src_img_path)
        img_arr = np.array(img)
        
        seg = Image.open(src_seg_path)
        seg_arr = np.array(seg)
        
        # segmentation_maps 数据格式需要是 (512, 512, 1)
        # seg_arr 为 (512, 512),下面是输入 seq 函数的必须格式
        seg_map = SegmentationMapsOnImage(np.expand_dims(seg_arr, axis=-1), shape=(img_size, img_size, 3))
        
        for i in range(10):
            # 原始图片 image 与 标注 segmentation_maps 一起变化
            i_aug, s_aug = seq(image = img_arr, 
                               segmentation_maps = seg_map)
    
            dst_img_path = os.path.join(dst_img_dir, "{}-{}.png".format(file.split(".")[0], i))
            dst_seg_path = os.path.join(dst_seg_dir, "{}-{}.png".format(file.split(".")[0], i))
    
            Image.fromarray(i_aug).save(dst_img_path) 
            # 需要将得到的 s_aug.get_arr() 是 (512, 512, 1)
            # 需要转换为 (512, 512) 来显示
            Image.fromarray(s_aug.get_arr().reshape((img_size, img_size))).save(dst_seg_path) 
    
  • 相关阅读:
    在eclipse 中添加 Tomcat
    eclipse启动报错:code13
    基础_cup给出的内存地址
    巫师3_战斗_水中水鬼
    git checkout
    git学习
    Linux软件包管理之yum在线管理
    Vagrant入门1
    mvn java项目README.md文件范例
    深入理解yum工作原理
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/15099792.html
Copyright © 2011-2022 走看看