欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-19 22:28:16
...

用于医学图像分割的数据增强方法 —— 标准 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 库的使用方法

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 库的使用方法

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

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

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

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

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 库的使用方法

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

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

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

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

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

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

总结

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