前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习常用图像数据增强库albumentations系列教程(二)

深度学习常用图像数据增强库albumentations系列教程(二)

作者头像
用户9875047
发布2022-12-07 10:21:00
7790
发布2022-12-07 10:21:00
举报
文章被收录于专栏:机器视觉全栈er机器视觉全栈er

目标:掌握更加复杂和自动化的图像数据增强方法

在第一篇教程中,我们讲述了简单的图像增强技巧,本节通过使用Compose方法将各种图像增强的方法组合起来,形成一个图像增强的pipeline,方便产生大量不同种类的增强图片。

首先我们来看下使用compose方法对图片进行增强的示例:

代码语言:javascript
复制
import random
import cv2
from matplotlib import pyplot as plt
import albumentations as A

def visualize(image):
    plt.figure(figsize=(10, 10))
    plt.axis('off')
    plt.imshow(image)
    plt.show()

image = cv2.imread('assets/cvtutorials.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

transform = A.Compose([
    A.CLAHE(),
    A.RandomRotate90(),
    A.Transpose(),
    A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.50, rotate_limit=45, p=.75),
    A.Blur(blur_limit=3),
    A.OpticalDistortion(),
    A.GridDistortion(),
])
random.seed(100)
augmented_image = transform(image=image)['image']
visualize(augmented_image)

上述代码会对原始图像做出7种一定概率的随机变换,然后生成一种图像,如:

现在,我们去掉增强图像可视化代码,并生成大量增强图片,图片会保存在res文件夹下,代码如下:

代码语言:javascript
复制
import random
import cv2
from matplotlib import pyplot as plt
import albumentations as A

GENERATED_PICS_SIZE = 2 # 可以设置想生成的图片个数
RES_PATH_PREFIX = "res"

image = cv2.imread('assets/cvtutorials.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

for i in range(GENERATED_PICS_SIZE):
    res_path = RES_PATH_PREFIX + "\\" + str(i) + ".jpg"
    transform = A.Compose([
        A.CLAHE(),
        A.RandomRotate90(),
        A.Transpose(),
        A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.50, rotate_limit=45, p=.75),
        A.Blur(blur_limit=3),
        A.OpticalDistortion(),
        A.GridDistortion(),
    ])
    augmented_image = transform(image=image)['image']
    image = cv2.cvtColor(augmented_image, cv2.COLOR_RGB2BGR)
    cv2.imencode('.jpg', image)[1].tofile(res_path)

文件同一目录下记得创建文件夹res,否则会报错,也可以自己添加代码,检测不到文件夹路径就创建文件夹,自己思考 :p

仅仅这样还是不够的,我们常常需要对某个文件夹下所有的图片进行增强,所以又要加入遍历文件夹下所有图片的功能,代码如下:

代码语言:javascript
复制
import random
import cv2
import albumentations as A
import glob
import os

GENERATED_PICS_SIZE = 2
RES_PATH_PREFIX = "res"
PICS_PATH = 'assets'

paths = glob.glob(os.path.join(PICS_PATH, '*.jpg'))
for i in range(len(paths)):
    pic_path = paths[i]
    pic_path_prefix = pic_path.split('.')[0].split('\\')[-1]

    image = cv2.imread(pic_path)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    for i in range(GENERATED_PICS_SIZE):
        res_path = RES_PATH_PREFIX + "\\" + pic_path_prefix + str(i) + ".jpg"
        transform = A.Compose([
            A.CLAHE(),
            A.RandomRotate90(),
            A.Transpose(),
            A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.50, rotate_limit=45, p=.75),
            A.Blur(blur_limit=3),
            A.OpticalDistortion(),
            A.GridDistortion(),
        ])
        augmented_image = transform(image=image)['image']
        image = cv2.cvtColor(augmented_image, cv2.COLOR_RGB2BGR)
        cv2.imencode('.jpg', image)[1].tofile(res_path)

代码文件所在目录有文件夹assets和res,里面分别是原始图像和生成后图像,这样我们实现了批量自动生成大量图片。

可以自行扩展,如不仅局限于jpg格式

现在图片数据已经增强,后续我们研究对标注文件进行增强。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器视觉全栈er 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档