Python图像增强imgaug详解

2022-11-15 09:00:43
目录
介绍Imgaug图像翻转图像旋转图像裁剪图像噪声图像剪切图像对比度图像转换图像边界框

介绍

图像分类器通常在训练更多的图像时表现得更好。在图像分类模型中,一个常见的问题是,模型不能正确地对图像进行分类,只是因为它没有针对同一图像的不同方向进行训练。这可以通过向模型提供多种可能的图像方向和转换来克服。

然而,在现实中,收集这些不同的数据可能需要更多的时间、资源和专业知识,而且对公司来说成本可能很高。在这种情况下,图像数据增强是一个流行的选择,通过使用一个或多个增强技术来生成用于训练的各种图像,从而为现有数据集增加多样性。

尽管一些Python库支持多种增强技术,但并不是所有的技术都适合训练模型。用户需要知道哪些增强技术可以帮助生成用于训练模型的实际附加数据。

可以使用各种技术来增强图像数据。它可以包括:

    使用几何变换(例如翻转、裁剪、旋转、缩放等)增强图像数据。通过使用颜色转换来增强图像数据,例如通过调整亮度、暗度、锐度、饱和度等。通过随机擦除、混合图像等来增强图像数据。

    Imgaug

    Imgaug>

    首先使用 pip 安装这个库。

    pip install imgaug

    接下来,使用 pip 命令在命令提示符下安装名为“IPyPlot”的 python 包:

    pip install ipyplot

    IPyPlot 是一个 Python 工具,允许在 Python Notebook 单元格中快速高效地显示图像。这个包将 IPython 与 HTML 相结合,以提供一种更快、更丰富、更具交互性的方式来显示图像。这个包的 'plot_images' 命令将用于以网格状结构绘制所有图像。

    此外,将导入扩充数据所需的所有必要包。

    import imageio
    import imgaug as ia
    import imgaug.augmenters as iaa
     
    增强的图像路径在此处定义。将使用鸟类图像作为示例。
    input_img = imageio.imread('../input/image-bird/bird.jpg')

    图像翻转

    可以使用下面的命令水平和垂直翻转图像。以下代码中的“Fliplr”关键字水平翻转图像。同样,关键字“Flipud”垂直翻转图像。

    #Horizontal Flip
    hflip= iaa.Fliplr(p=1.0)
    input_hf= hflip.augment_image(input_img)
     
    #Vertical Flip
    vflip= iaa.Flipud(p=1.0) 
    input_vf= vflip.augment_image(input_img)
    images_list=[input_img, input_hf, input_vf]
    labels = ['Original', 'Horizontally flipped', 'Vertically flipped']
    ipyplot.plot_images(images_list,labels=labels,img_width=180)

    每个图像被翻转的概率由 p 表示。默认情况下,概率设置为 0.0。要水平翻转输入图像,请使用 Fliplr(1.0) 。同样,当垂直翻转图像时,使用 Flipud(1.0) 。

    图像旋转

    通过以度为单位定义旋转,可以旋转图像。

    rot1 = iaa.Affine(rotate=(-50,20))
    input_rot1 = rot1.augment_image(input_img)
    images_list=[input_img, input_rot1]
    labels = ['Original', 'Rotated Image']
    ipyplot.plot_images(images_list,labels=labels,img_width=180)

    图像裁剪

    裁剪图像包括从图像的侧面移除像素的列或行,可以从全尺寸输入图像中提取较小尺寸的子图像。要删除的像素数可以以绝对数或图像大小的一部分指定。

    在这种情况下,使用从连续间隔>

    crop1 = iaa.Crop(percent=(0, 0.3)) 
    input_crop1 = crop1.augment_image(input_img)
    images_list=[input_img, input_crop1]
    labels = ['Original', 'Cropped Image']
    ipyplot.plot_images(images_list,labels=labels,img_width=180)

    图像噪声

    该增强器将高斯噪声添加到输入图像。尺度值是产生噪声的正态分布的标准偏差。

    noise=iaa.AdditiveGaussianNoise(10,40)
    input_noise=noise.augment_image(input_img)
    images_list=[input_img, input_noise]
    labels = ['Original', 'Gaussian Noise Image']
    ipyplot.plot_images(images_list,labels=labels,img_width=180)

    图像剪切

    该增强器以>

    shear = iaa.Affine(shear=(-40,40))
    input_shear=shear.augment_image(input_img)
    images_list=[input_img, input_shear]
    labels = ['Original', 'Image Shearing']
    ipyplot.plot_images(images_list,labels=labels,img_width=180)

    图像对比度

    该增强器通过缩放像素值来调整图像对比度。

    contrast=iaa.GammaContrast((0.5, 2.0))
    contrast_sig = iaa.SigmoidContrast(gain=(5, 10), cutoff=(0.4, 0.6))
    contrast_lin = iaa.LinearContrast((0.6, 0.4))
    input_contrast = contrast.augment_image(input_img)
    sigmoid_contrast = contrast_sig.augment_image(input_img)
    linear_contrast = contrast_lin.augment_image(input_img)
    images_list=[input_img, input_contrast,sigmoid_contrast,linear_contrast]
    labels = ['Original', 'Gamma Contrast','SigmoidContrast','LinearContrast']
    ipyplot.plot_images(images_list,labels=labels,img_width=180)

    GammaContrast 函数使用公式 255*((v/255)**gamma 调整图像对比度,其中 v 是像素值,gamma 从范围 [0.5, 2.0] 中均匀采样。

    SigmoidContrast 使用公式 255*1/(1+exp(gain*(cutoff-v/255)) 调整图像对比度 (其中v为像素值,gain 从区间[3, 10]开始均匀采样(每张图像一次),截断采样与区间 [0.4, 0.6] 一致。

    LinearContrast 使用公式 127 + alpha*(v-127) 改变图像对比度,其中 v 是像素值,alpha 从 [0.4, 0.6] 范围内均匀采样。

    图像转换

    “ElasticTransformation”增强器通过使用位移场在局部移动像素来变换图像。增强器的参数是>

    elastic = iaa.ElasticTransformation(alpha=60.0, sigma=4.0)
    polar = iaa.WithPolarWarping(iaa.CropAndPad(percent=(-0.2, 0.7)))
    jigsaw = iaa.Jigsaw(nb_rows=20, nb_cols=15, max_steps=(3, 7))
    input_elastic = elastic.augment_image(input_img)
    input_polar = polar.augment_image(input_img)
    input_jigsaw = jigsaw.augment_image(input_img)
    images_list=[input_img, input_elastic,input_polar,input_jigsaw]
    labels = ['Original', 'elastic','polar','jigsaw']
    ipyplot.plot_images(images_list,labels=labels,img_width=180)

    在使用“Polar Warping”增强器时,首先在极坐标表示中应用裁剪和填充,然后再将其扭转回笛卡尔表示。这个增强器可以为图像添加额外的像素。这些将被黑色像素填充。此外,“Jigsaw”增强以类似于拼图模式的方式移动图片内的单元格。

    图像边界框

    Imgaug>

    from imgaug.augmentables.bbs import BoundingBox, BoundingBoxesOnImage
    bbs = BoundingBoxesOnImage([
     BoundingBox(x1=40, x2=550, y1=40, y2=780)
    ], shape=input_img.shape)
    ia.imshow(bbs.draw_on_image(input_img))

    到此这篇关于Python图像增强imgaug的文章就介绍到这了,更多相关Python图像增强imgaug内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!