用于医学图像分割的数据增强方法 —— 标准 imgaug 库的使用方法

用于医学图像分割的数据增强方法 —— 标准 imgaug 库的使用方法

前言 —— imgaug 库简介

在机器学习算法尤其是 deep learning 盛行的如今,数据增强是实现深度学习不可避免的一个重要环节。相比于 tensorflow 或者 pytorch 自带的数据增强库而言,基于 imgaug 库的数据增强具有更加友好的 API 和更加丰富的功能。
下面主要介绍在医学图像分割算法中,imgaug 库中常用的数据增强方法,包括

  • 标准的使用流程 (如何同时变换图像和对应的分割金标准)
  • 医学图像分割中常用的增强方法 (包括 API 简述)

imgaug 基本 (足够) 的快速入门

下面的代码可以直接套用,具体原理不必深究。

import imgaug.augmenters as iaa  # 导入iaa
import cv2
# 导入原图和分割金标准
images = cv2.imread(filename='img.png')[:,:,:1]
images = np.expand_dims(images, axis=0).astype(np.float32)  # 尤其注意这里数据格式 (batch_size, H, W, C)
segmaps = cv2.imread(filename='seg.png')[:,:,:1]/255
segmaps = np.expand_dims(segmaps, axis=0).astype(np.int32)  # segmentation 需要时 int 型
# 定义数据增强策略
seq = iaa.Sequential([
    iaa.Fliplr(p=0.5),  # 这里写按照顺序执行的数据增强策略 (这里是依次进行水平和垂直翻转)
    iaa.Flipud(p=0.5),
])
# 同时对原图和分割进行数据增强
images_aug, segmaps_aug = seq(images=images, segmentation_maps=segmaps)

分割中常用的数据增强方法API (定义在 iaa.Sequential([…]))

iaa.GaussianBlur(sigma=(0, 3.0))

  • 参数 sigma 表示高斯模糊的强度,一般 sigma = 0 表示没有高斯模糊,sigma = 3.0 表示很强的模糊。采用 tripe 输入,表示 sigma 值在 (0, 0.03) 之间随机取。
    用于医学图像分割的数据增强方法 —— 标准 imgaug 库的使用方法_第1张图片

iaa.CropAndPad(px=(-10, 0), percent=None, pad_mode='constant', pad_cval=0, keep_size=False)

  • px:表示距离图像边缘的像素距离,此处随机在 (-10, 0) 之间取。 负数表示 crop,正数表示 pad。
  • percent:不可和 px 同时赋值,是 px 的分数版本。
  • pad_mode:此处取 constant,表示用一个常数来 padding 图像
  • pad_cval:和 pad_mode 配合,用 pad_cval=0 来 padding。
  • keep_size:是否缩放到原图大小。
    用于医学图像分割的数据增强方法 —— 标准 imgaug 库的使用方法_第2张图片

iaa.Resize(size=[200, 200], interpolation='nearest')

  • size:表示缩放最后的尺度。
  • interpolation:表示插值方法。
    用于医学图像分割的数据增强方法 —— 标准 imgaug 库的使用方法_第3张图片

iaa.Fliplr(p=0.5), iaa.Flipud(p=0.5)

  • p:以一定概率 flip 图像。
    用于医学图像分割的数据增强方法 —— 标准 imgaug 库的使用方法_第4张图片

iaa.Affine(scale=(0.9, 1), translate_percent=(0, 0.1), rotate=(-40, 40), cval=0, mode='constant')

进行缩放、平移和旋转操作。

  • scale:缩放的尺度。
  • translate_percent:平移比例 (也可以用 translate_px 这个参数是平移像素个数)。
  • rotate:旋转角度
  • cval 和 mode:表示填充方式。
    用于医学图像分割的数据增强方法 —— 标准 imgaug 库的使用方法_第5张图片

iaa.PiecewiseAffine(scale=(0, 0.1), nb_rows=4, nb_cols=4, cval=0)

以控制点的方式随机形变。

  • scale:形变强度,个人感觉 0.1 的形变已经非常大了,因此建议取值小一些。
  • nb_rows, nb_cols:控制点分布行数和列数。
  • cval:以给定的值填充。
    用于医学图像分割的数据增强方法 —— 标准 imgaug 库的使用方法_第6张图片

iaa.ElasticTransformation(alpha=(0, 50), sigma=(4.0, 6.0))

以像素点随机位移来进行形变。

  • alpha:值越大表示像素点位移越大 -> 即形变越大。
  • sigma:表示形变场平滑程度。
    用于医学图像分割的数据增强方法 —— 标准 imgaug 库的使用方法_第7张图片

总结

这篇文章是比较功利的快速使用 imgaug库 的方法,介绍的一些增强方法都是非常常用的增强方法在分割中,尤其是形变类的方法。如果有需求更加复杂的增强方法,可以参考 https://github.com/aleju/imgaug 这个库的源码。

你可能感兴趣的:(机器学习,医学图像处理,深度学习)