imgaug的使用

1、安装

直接用pip install imgaug会报错,因为shapely没有找到,所以先要安装Shapely,直接pip也会报错,有可能会是:OSError: [WinError 126] 找不到指定的模块

解决办法是:

https://www.lfd.uci.edu/~gohlke/pythonlibs/

从连接中找到Shaply,下载对应自己python的版本

之后在文件的目录下,pip install 对应版本的.whl文件

之后

pip install git+https://github.com/aleju/imgaug #从github安装

或者
pip install imgaug

安装就绪之后就可使用

在使用过程中,可能会碰到numpy中找不到某些模块,我在使用时事bit_generate模块找不到,np.random.bit_generator,但是查看了numpy的代码,确实有这个模块,找不到问题所在,可能就是版本不对应,不太想在这里浪费太多时间,于是就

pip uninstall numpy

然后重新装了numpy就可以了。

2、使用

imgaug的说明文档:

https://imgaug.readthedocs.io/en/latest/source/examples_bounding_boxes.html

#标准用例
from imgaug import augmenters as iaa

seq = iaa.Sequential([
    iaa.Crop(px=(0, 16)), # 从图像的每条边随机裁剪0-16个像素
    iaa.Fliplr(0.5), # 将50%的图像进行水平翻转
    iaa.GaussianBlur(sigma=(0, 3.0)) # sigma0-3.0的高斯模糊
])

#一个batch读取1000张图片
for batch_idx in range(1000):
    # images格式是4D numpy array : (N, height, width, channels)(图像个数、高、宽、通道数)
    # 或者是3D numpy arrays: (height, width, channels).
    # 灰度图是 (height, width, 1) .
    # 所有images 数据必须是uint8类型,大小在0到255之间
    images = load_batch(batch_idx) #加载图片
    images_aug = seq(images=images) #对图片进行增强
    #train_on_images(images_aug)  #其他的一些对增强后的图片操作
#裁剪、仿射、模糊、噪声等处理


import numpy as np
import imgaug as ia
import imgaug.augmenters as iaa
import imageio
import cv2


ia.seed(1)


# 示例是array (32, 64, 64, 3) uint8类型的.
#ia.quokka:以numpy数组的形式返回quokka(无尾熊)的图像。
images = np.array(
    [ia.quokka(size=(64, 64)) for _ in range(32)],
    dtype=np.uint8
)



seq = iaa.Sequential([
    iaa.Fliplr(0.5), # 水平翻转
    iaa.Crop(percent=(0, 0.1)), # 随机裁剪,裁剪的大小是0-10%

    # 对50%的图像进行高斯模糊,sigma值为0-0.5
    iaa.Sometimes(0.5,
        iaa.GaussianBlur(sigma=(0, 0.5))
    ),

    # 增强或减弱每张图的对比度
    iaa.ContrastNormalization((0.75, 1.5)),

    # 增加高斯噪声
    # 对50%的图像,我们对每个像素进行一次噪声采样
    # 对剩余的50%的图像进行每个像素和通道的noise,这样的操作会改变每个像素的颜色(不仅仅是亮度)
    iaa.AdditiveGaussianNoise(loc=0, scale=(0.0, 0.05*255), per_channel=0.5),

    # 将一些图像调亮,一些图像调暗
    # 对20%的图像,我们对每个通道multiply采样一次
    iaa.Multiply((0.8, 1.2), per_channel=0.2),

    # 将仿射变换应用于每个图像缩放、平移/移动、旋转和剪切。
    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=(-25, 25),
        shear=(-8, 8)
    )
], random_order=True) # 按随机顺序进行增强

images_aug = seq(images=images)
#更多的增强
import numpy as np
import imgaug as ia
import imgaug.augmenters as iaa


ia.seed(1)

# # 示例是array (32, 64, 64, 3) uint8类型的.
images = np.array(
    [ia.quokka(size=(64, 64)) for _ in range(32)],
    dtype=np.uint8
)

# Sometimes(0.5, ...) 对50%的图像进行增强操作
# 例:Sometimes(0.5, GaussianBlur(0.3)) 对一半的图进行高斯模糊
sometimes = lambda aug: iaa.Sometimes(0.5, aug)

# 定义将应用于每个图像的增强序列
seq = iaa.Sequential(
    [
        #
        # 对大多数图像应用以下增强程序。
        #
        iaa.Fliplr(0.5), # 对50%的图像进行水平翻转
        iaa.Flipud(0.2), # 20%的图像进行垂直翻转

        # 对一些图像进行裁剪, 0-10% of their height/width
        sometimes(iaa.Crop(percent=(0, 0.1))),

        # 对一些图像进行仿射变换
        # - 尺度变换 80-120% of image height/width (each axis independently)
        # - 转换:相对于高度/宽度(每个轴)范围是-20~+20
        # - 旋转 by -45 to +45 角
        # - 剪切 by -16 to +16 degrees
        # - order: 使用最近邻或双线性插值(快速)
        # - mode: 使用任何可用模式填充新创建的像素,API或sickit0image可看哪些模式是可用的
        # - cval: 如果模式是恒定的,则对新创建的像素使用随机亮度(例如,有时为黑色,有时为白色)
        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
        )),

        #
        # 为每个图像执行以下(不太重要)增强程序中的0到5个。不要把他们都执行,要不然增强的效果太强了,有点认不出来原图
        #
        iaa.SomeOf((0, 5),
            [
                # 将一些图像转换为它们的超级像素表示,
                # #每幅图像的样本量在20到200个超级混合体之间,但是
                # #不能用它们的平均值替换所有的超混合
                # #其中一些(p_replace)。
                sometimes(
                    iaa.Superpixels(
                        p_replace=(0, 1.0),
                        n_segments=(20, 200)
                    )
                ),

                # 使用不同的强度模糊每个图像
                # #高斯模糊(西格玛在0和3.0之间),
                # #平均/均匀模糊(内核大小介于2x2和7x7之间)
                # #中值模糊(内核大小介于3x3和11x11之间)。
                iaa.OneOf([
                    iaa.GaussianBlur((0, 3.0)),
                    iaa.AverageBlur(k=(2, 7)),
                    iaa.MedianBlur(k=(3, 11)),
                ]),

                # 对图像进行锐化, 将结果与原始结果重叠
                # #使用介于0(无锐化)和1之间的alpha的图像
                # #(完全锐化效果)。
                iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),

                # 进行浮雕效果的锐化
                iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0)),

                # 在某些图像中搜索所有边或
                # #定向边。然后用黑色标记这些边缘
                # #和白色图像,并与原始图像叠加
                # #使用0到0.7的alpha。
                sometimes(iaa.OneOf([
                    iaa.EdgeDetect(alpha=(0, 0.7)),
                    iaa.DirectedEdgeDetect(
                        alpha=(0, 0.7), direction=(0.0, 1.0)
                    ),
                ])),

                # 在一些图像中添加高斯噪声。
                # 在这些情况中,有50%的噪声是根据
                # 通道和像素。
                # 在其他50%的情况下,每个像素(即亮度变化)。
                iaa.AdditiveGaussianNoise(
                    loc=0, scale=(0.0, 0.05*255), per_channel=0.5
                ),


                #任意降低所有像素的1%到10%(即设置使它们变黑)或者在原尺寸上降低2-5%使大尺寸变小
                iaa.OneOf([
                    iaa.Dropout((0.01, 0.1), per_channel=0.5),
                    iaa.CoarseDropout(
                        (0.03, 0.15), size_percent=(0.02, 0.05),
                        per_channel=0.2
                    ),
                ]),

                # 以5%的概率反转每个图像的通道。
                # #这会将每个像素值v设置为255-v。
                iaa.Invert(0.05, per_channel=True), # 翻转颜色通道

                # 给每个像素值加-10~+10
                iaa.Add((-10, 10), per_channel=0.5),

                # 改变图片的亮度(原值的50-150% ).
                iaa.Multiply((0.5, 1.5), per_channel=0.5),

                # 改善或者降低图像的对比度
                iaa.ContrastNormalization((0.5, 2.0), per_channel=0.5),


                #将每个图像转换为灰度,然后结果与原始图像以随机alpha叠加。eg.移除不同强度的颜色。
                iaa.Grayscale(alpha=(0.0, 1.0)),

                # 在某些图像中,像素会局部移动(具有随机强度)。
                sometimes(
                    iaa.ElasticTransformation(alpha=(0.5, 3.5), sigma=0.25)
                ),

                # 在一些图像用强增强
                sometimes(iaa.PiecewiseAffine(scale=(0.01, 0.05)))
            ],
            # 随机进行上述的增强
            random_order=True
        )
    ],
    # 随机进行上述的增强
    random_order=True
)

images_aug = seq(images=images)

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值