图像分割任务中的图像增强

对数据进行增强是一种常用的操作,用来生成更多的数据,提高模型的泛化能力,对图像数据增强的常用方法有:弹性形变、旋转、加入噪声等。在图像分割任务中,除了需要对图像进行变换外,还需要对segmentation map 进行相同的处理。下面为一个简单的基本流程。

需要的包,imgaug用来对图像进行一系列变换,imageio用来读取和存储图片

import imgaug as ia
import imgaug.augmenters as iaa
from imgaug.augmentables.segmaps import SegmentationMapsOnImage
import imageio
import numpy as np

首先加载图片和分割图

image=imageio.imread('image.jpg') # (256,256,3)
segmap=np.loadtxt('segmap.numpy', dtype=np.int32) # (256, 256)
ia.imshow(image)
ia.imshow(segmap)

在这里插入图片描述
在这里插入图片描述

将分割图实例化

segmentation= SegmentationMapsOnImage(segmap, shape=image.shape)

以下为其包括的主要方法

  • segmentation.get_arr() # 返回分割图(256,256)
  • segmentation.draw() # 只画分割图
ia.imshow(segmentation.draw()[0])

在这里插入图片描述

  • segmentation.draw_on_image(image) # 将分割图显示在原图上
ia.imshow(segmentation.draw_on_image(image, alpha=0.6)[0]) # alpha代表透明度,1则完全叠加,0则完全透明

在这里插入图片描述

对图像和分割图进行变换

有多种变换方式,只有对原图像进行了几何变换才会改变分割图,否则不改变

  • CoarseDropout:对图像进行随机区域丢失,它不会影响分割图
aug = iaa.CoarseDropout(0.06, size_percent=0.1)
im_aug, seg_aug = aug(image=image, segmentation_maps=segmentation)
ia.imshow(im_aug)
ia.imshow(seg_aug.get_arr())

在这里插入图片描述

  • ElasticTransformation:对图像进行弹性形变,会影响分割图
aug = iaa.ElasticTransformation(alpha=200, sigma=20)
im_aug, seg_aug = aug(image=image, segmentation_maps=segmentation)
ia.imshow(im_aug)
ia.imshow(seg_aug.get_arr())

在这里插入图片描述

  • Affine:对图像进行旋转,会影响分割图
aug = iaa.Affine(rotate=(-10, 10))
im_aug, seg_aug = aug(image=image, segmentation_maps=segmentation)
ia.imshow(im_aug)
ia.imshow(seg_aug.get_arr())

在这里插入图片描述

  • Fliplr:左右旋转图片,会影响分割图
aug = iaa.Fliplr()
im_aug, seg_aug = aug(image=image, segmentation_maps=segmentation)
ia.imshow(im_aug)
ia.imshow(seg_aug.get_arr())

在这里插入图片描述

  • Flipup:上下旋转图片,会影响特征特。

以上为一些常用的变换函数,其它函数自行查找。

还可以将变换定义为一个序列,则程序每次都执行序列中的操作,参数random_order表示是否将操作顺序打乱,False则顺序执行序列中的操作,False则随机打乱操作顺序后再执行。

seq = iaa.Sequential([
    iaa.Dropout([0.05, 0.2]),      # drop 5% or 20% of all pixels
    iaa.Sharpen((0.0, 1.0)),       # sharpen the image
    iaa.Affine(rotate=(-45, 45)),  # rotate by -45 to 45 degrees (affects segmaps)
    iaa.ElasticTransformation(alpha=50, sigma=5)  # apply water effect (affects segmaps)
], random_order=True)

更详细的介绍参考

发布了83 篇原创文章 · 获赞 4 · 访问量 5371

猜你喜欢

转载自blog.csdn.net/weixin_43486780/article/details/105198268