图片数据增强库(imgaug)的标准用法_续

    这一篇接上一篇,介绍下常用的方法,目的是为了方便以后调用。后面附上常用方法的结果图。

#coding:utf-8
import imgaug as ia
from imgaug import augmenters as iaa
import numpy as np
import cv2
images = cv2.imread('./origin.jpg',1)
images = np.expand_dims(images,axis=0)

sometimes = lambda aug: iaa.Sometimes(p=0.5, then_list=aug)
####定义一个lambda表达式,可以以p的概率去执行sometimes传递的图像增强
seq = iaa.Sequential(
    [
        sometimes(iaa.Crop(percent=(0, 0.1),keep_size=True)),####以p=0.5的概率去执行图片裁剪
        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=ia.ALL
        )),######order = 0 最临近插值 =1双线性插值
        ####mode取值 * "constant" -> cv2.BORDER_CONSTANT
             #* "edge" -> cv2.BORDER_REPLICATE
            #* "symmetric" -> cv2.BORDER_REFLECT
            #* "reflect" -> cv2.BORDER_REFLECT_101
            #* "wrap" -> cv2.BORDER_WRAP
        ########If ia.ALL, a value from the discrete range [0 .. 255] will be sampled per image。cval图像变化后padding的值
        iaa.SomeOf((0, 5),     ####从下列序列中挑选0-5个图像增强的方法 相当与random.choice,下面可以放些自认为不太重要的方法
            [
                sometimes(
                    iaa.Superpixels(
                        p_replace=(0, 1.0),
                        n_segments=(20, 200)
                    )
                ),#######执行 SLIC 超像素分割算法,对于每副图片p_replace=0-1的概率替换像素值。生成n_segments个超像素值
                ######iaa.OneOf  ==  iaa.SomeOf(1,1)  下面3个方法选一个
                iaa.OneOf([
                    iaa.GaussianBlur((0, 3.0)),
                    iaa.AverageBlur(k=(2, 7)),
                    iaa.MedianBlur(k=(3, 11)),
                ]),
                ####用于锐化图像并将结果与原始图像叠加
                iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),
                # 浮雕图像并将结果与原始图像叠加。
                iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0)),
                ######边缘检测和方向边缘检测与原图相加
                sometimes(iaa.OneOf([
                    iaa.EdgeDetect(alpha=(0, 0.7)),
                    iaa.DirectedEdgeDetect(
                        alpha=(0, 0.7), direction=(0.0, 1.0)
                    ),
                ])),
                iaa.OneOf([
                    iaa.Dropout((0.01, 0.1), per_channel=0.5), ####丢掉1%-10%的像素信息
                    iaa.CoarseDropout(
                        (0.03, 0.15), size_percent=(0.02, 0.05),
                        per_channel=0.2
                    ),   #####丢掉矩形块内的像素信息
                ]),
                ####5%的概率进行255-像素值进行图像反化
                iaa.Invert(0.05, per_channel=True),
                # 每个像素加上一个-10到10的值
                iaa.Add((-10, 10), per_channel=0.5),
                ####灰度图  cv2图片通道顺序BGR
                iaa.Grayscale(alpha=(0.0, 1.0),from_colorspace='BGR'),
                ######通过使用位移场在局部移动像素来转换图像。
                #论文Simard, Steinkraus and Platt Best Practices for Convolutional Neural Networks applied to Visual Document Analysis in Proc. of the International Conference on Document Analysis and Recognition, 2003
                sometimes(
                    iaa.ElasticTransformation(alpha=(0.5, 3.5), sigma=0.25)
                ),
                #####图像上设置规则网格,并通过仿射变换随机移动这些点的邻域进行图片局部扭曲。
                sometimes(iaa.PiecewiseAffine(scale=(0.01, 0.05)))
            ],
            # do all of the above augmentations in random order
            random_order=True
        )
    ],
    # do all of the above augmentations in random order
    random_order=True
)

images_aug = seq.augment_images(images)
print images_aug.shape
images_aug = np.squeeze(images_aug,axis=0)
cv2.imwrite('./all.jpg',images_aug)

                    原图                                                 Add方法                                              Affine方法

                 CoarseDropout                              DirectedEdgeDetect                              Dropout

                EdgeDetect                                     ElasticTransformation                           Emboss

                   Grayscale                                           Invert                                              PiecewiseAffine

                   Sharpen                                                 Superpixels                                     all

### 关于 `imgaug` 数据增强方法 #### 安装与导入 为了使用 `imgaug` 进行数据增强,首先需要安装此。可以通过 Python 的包管理工具 pip 来完成安装工作[^4]。 ```bash pip install imgaug ``` 接着,在代码中引入必要的模块: ```python from imgaug import augmenters as iaa import numpy as np import imageio.v2 as imageio # 导入用于读取和保存图像的函数 ``` #### 基础增强操作实例 这里展示了一个基础的例子,说明如何利用 `imgaug` 对单张图片执行多种常见的几何变换和其他视觉效果调整[^1]。 ```python # 加载一张测试用图 image = imageio.imread("example.jpg") # 创建一系列顺序应用的增广器对象 seq = iaa.Sequential([ iaa.Fliplr(0.5), # 水平翻转的概率为50% iaa.Crop(percent=(0, 0.1)), # 裁剪掉每边最多10%的部分 iaa.Sometimes( 0.5, iaa.GaussianBlur(sigma=(0, 0.5)) # 添加高斯模糊,sigma范围在0至0.5之间 ), iaa.LinearContrast((0.75, 1.5)), # 改变对比度 ]) images_aug = seq(images=[image]) # 执行增强处理 ``` 上述脚本创建了一系列按序执行的操作序列 (`Sequential`) ,其中包含了水平镜像(`Fliplr`)、随机裁切(`Crop`)、条件性的高斯滤波(`Sometimes`, `GaussianBlur`) 及线性对比度调节(`LinearContrast`) 。这些操作能够有效地增加原始样本集的变化程度,从而帮助提升机器学习模型泛化能力[^2]。 #### 自定义复杂流程 除了基本的功能外,`imgaug` 更强大的地方在于其灵活性——允许用户构建复杂的增强逻辑链路,并且可以根据实际需求灵活配置参数甚至编写自定义的增强组件[^3]。 例如,如果想要设计更加精细控制的增强策略,则可以组合多个不同的增强单元形成管道(pipe),并通过设置概率分布来决定各阶段发生的可能性大小: ```python sometimes = lambda aug: iaa.Sometimes(0.5, aug) seq_custom = iaa.Sequential([ sometimes(iaa.Affine(scale={"x": (0.8, 1.2), "y": (0.8, 1.2)})), sometimes(iaa.AdditiveGaussianNoise(loc=0, scale=(0.0, 0.05*255))), sometimes(iaa.Multiply((0.8, 1.2))) ]) ``` 这段代码展示了更为高级的应用场景,其中包括仿射变换(`Affine`)中的尺度变化、加法型高斯噪声注入(`AdditiveGaussianNoise`)以及乘法式的亮度改变(`Multiply`)。通过这种方式,几乎可以模拟任何类型的自然变异情况下的输入特征。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值