本文主要是介绍基于imgaug做图像分割的数据增强,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
引言
- 做图像分割时,总是会想到做数据增强,往往是基于PyTorch或者Tensorflow框架,但是这些框架仅仅支持基本的数据增强操作,例如只对图像的旋转、反转等。
- 如果想要对图像分割数据集做数据增强,就要用到第三方库或者自己写一个轮子也可以的。
- 我这里推荐使用imgaug库
图像分割增强示例demo
-
示例图(图像来自同花顺举办比赛:文档图片表格结构识别算法):
- table_img.jpg:
- mask_0.jpg:
-
具体代码:
import cv2 import imgaug as ia import imgaug.augmenters as iaa from imgaug.augmentables.segmaps import SegmentationMapsOnImageimage = cv2.imread('table_img.jpg') segmap = cv2.imread('mask_0.jpg')# Here, we arbitrarily place some squares on the image. # Class 0 is our intended background class. segmap = SegmentationMapsOnImage(segmap, shape=image.shape)# Define our augmentation pipeline. seq = iaa.SomeOf((1, 3), [iaa.Dropout([0.05, 0.2]), # drop 5% or 20% of all pixelsiaa.Sharpen((0.0, 1.0)), # sharpen the imageiaa.Affine(rotate=(-45, 45)), # rotate by -45 to 45 degrees (affects segmaps)iaa.ElasticTransformation(alpha=2, sigma=1) # apply water effect (affects segmaps) ])# Augment images and segmaps. for i in range(4):# 经过这行代码之后,就可以分别拿到增强后的原图和分割图,就可以和自己代码做整合了images_aug_i, segmaps_aug_i = seq(image=image, segmentation_maps=segmap)cv2.imwrite(f'aug_img_{i}.jpg', images_aug_i)cv2.imwrite(f'aug_{i}.jpg', segmaps_aug_i.arr)
写在最后
- 本文只是抛砖引玉,给出具体使用imgaug库做图像分割数据增强的小例子,便于大家举一反三。
这篇关于基于imgaug做图像分割的数据增强的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!