用于医学图像分割的数据增强方法 —— 标准 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) 之间随机取。
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:是否缩放到原图大小。
iaa.Resize(size=[200, 200], interpolation='nearest')
- size:表示缩放最后的尺度。
- interpolation:表示插值方法。
iaa.Fliplr(p=0.5), iaa.Flipud(p=0.5)
- p:以一定概率 flip 图像。
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:表示填充方式。
iaa.PiecewiseAffine(scale=(0, 0.1), nb_rows=4, nb_cols=4, cval=0)
以控制点的方式随机形变。
- scale:形变强度,个人感觉 0.1 的形变已经非常大了,因此建议取值小一些。
- nb_rows, nb_cols:控制点分布行数和列数。
- cval:以给定的值填充。
iaa.ElasticTransformation(alpha=(0, 50), sigma=(4.0, 6.0))
以像素点随机位移来进行形变。
- alpha:值越大表示像素点位移越大 -> 即形变越大。
- sigma:表示形变场平滑程度。
总结
这篇文章是比较功利的快速使用 imgaug库 的方法,介绍的一些增强方法都是非常常用的增强方法在分割中,尤其是形变类的方法。如果有需求更加复杂的增强方法,可以参考 https://github.com/aleju/imgaug 这个库的源码。