感谢以下网址
#https://zhuanlan.zhihu.com/p/107399127
#https://blog.csdn.net/qq_27039891/article/details/100795846#comments_13921741
albumentations-常用的几何数据增强方法(一)
1.用于分类
HorizontalFlip、IAAPerspective、ShiftScaleRotate、CLAHE、RandomRotate90、Transpose、ShiftScaleRotate、Blur、OpticalDistortion、GridDistortion、HueSaturationValue、IAAAdditiveGaussianNoise、GaussNoise、MotionBlur、MedianBlur、RandomBrightnessContrast、IAAPiecewiseAffine、IAASharpen、IAAEmboss、Flip、OneOf、Compose
image=cv2.imread('./image.jpg')
image=cv2.cvtColor((image, cv2.COLOR_BGR2RGB)#CV2读取的图片是BGR格式,albumentations只能处理RGB格式
Normalize 归一化
Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225), max_pixel_value=255.0, always_apply=False, p=1.0)
#将像素值除以255 = 2 ** 8 - 1,减去每个通道的平均值并除以每个通道的std
Transpose 转置
Transpose(always_apply=False, p=0.5)
将图像行和列互换
HorizontalFlip:含有一个参数P,表示该图片被水平翻转的概率。p=1表示一定翻转,p=0.5表示有0.5的概率水瓶翻转;
image1 = HorizontalFlip(p=1)(image=image)['image']
VerticalFlip(always_apply = False,p = 0.5 )
Flip翻转
Flip(always_apply = False,p = 0.5 )#水平和垂直翻转
RandomScale 随机缩放
RandomScale(scale_limit = 0.1,interpolation = 1,always_apply = False,p = 0.5 )
随机缩放图像大小。
LongestMaxSize
LongestMaxSize(max_size = 1024,interpolation = 1,always_apply = False,p = 1 )
缩放图像,使最大边等于max_size,保持初始图像的纵横比。
SmallestMaxSize
SmallestMaxSize(max_size = 1024,interpolation = 1,always_apply = False,p = 1 )
缩放图像,使最小边等于max_size,保持初始图像的纵横比。## VerticalFlip 水平旋转。
Resize缩放
Resize(height,width,interpolation = 1,always_apply = False,p = 1 )
将输入图像调整为给定的高度和宽度。
RandomSizedCrop 随机裁剪缩放
andomSizedCrop(min_max_height,height,width,w2h_ratio = 1.0,interpolation = 1,always_apply = False,p = 1.0 )
随机裁剪图像并缩放到固定大小。
ShiftScaleRotate:该方法可以对图片进行平移(translate)、缩放(scale)和旋转(roatate)
image2 = ShiftScaleRotate(p=1)(image=image)["image"]
ShiftScaleRotate 平移缩放旋转
ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.1, rotate_limit=45, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5)
随机平移、缩放、旋转图片。shift_limit平移限制(0-1),scale_limit缩放尺寸限制(0-2),rotate_limit旋转角度限制,周围空缺部分均镜面填补
RandomCrop 随机裁剪
RandomCrop(height, width, always_apply=False, p=1.0)
随机从图像裁剪一块区域(参数是高宽,而且必须是整数,所以使用这个函数一定会裁剪一定区域的图片)
CenterCrop 中心裁剪
CenterCrop(height, width, always_apply=False, p=1.0)
随机中心裁剪图片(参数为高宽,一定会进行裁剪,注意其输入为整数)。
RandomCropNearBBox
RandomCropNearBBox(max_part_shift = 0.3,always_apply = False,p = 1.0 )
随机平移bbox的x,y坐标并从图像中裁剪。
Crop 裁剪
Crop(x_min=0, y_min=0, x_max=1024, y_max=1024, always_apply=False, p=1.0)
裁剪图像,其与RandomCrop的区别是可以指定最小值和最大值,而RandomCrop只能指定宽高。
RandomGamma随机Gamma
*RandomGamma(gamma_limit=(80, 120), eps=1e-07, always_apply=False, p=0.5)
随机伽马变换。
RandomRotate90 随机旋转90度
RandomRotate90(always_apply=False, p=0.5)
随机旋转0个或多个90度
Rotate旋转
Rotate(limit=90, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5)
随机旋转图片(默认使用reflect方法扩充图片,可以改为参数等其他方法填充)。
GridDistortion 网格失真
GridDistortion(num_steps=5, distort_limit=0.3, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5)
对图像进行网格失真。
ElasticTransform 弹性变换
ElasticTransform(alpha = 1,sigma = 50,alpha_affine = 50,interpolation = 1,border_mode = 4,value = None,mask_value = None,always_apply = False,approximate = False,p = 0.5 )随机对图像进行弹性变换。文本图像分析最好的变形
GridDistortion(num_steps=5, distort_limit=0.3, p=1)栅格变形,
num_steps:一条边有几个格子,distort_limit:变形范围
RandomGridShuffle 随机网格洗牌
RandomGridShuffle(grid=(3, 3), always_apply=False, p=1.0)
参数:将图像以网格方式生成几块,并随机打乱。
(3)Compose:组合变换,会把每个在 transforms 中的转换都执行一遍。
image3 = Compose([ # 对比度受限直方图均衡 #(Contrast Limited Adaptive Histogram Equalization) CLAHE(),
# 随机旋转 90° RandomRotate90(),
# 转置 Transpose(),
# 随机仿射变换 ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.50, rotate_limit=45, p=.75),
# 模糊 Blur(blur_limit=3),
# 光学畸变 OpticalDistortion(),
# 网格畸变 GridDistortion(),
# 随机改变图片的 HUE、饱和度和值 HueSaturationValue() ], p=1.0)
(4)oneof:只执行某组类似操作中的一个。
image4 = Compose([ RandomRotate90(), # 翻转 Flip(), Transpose(),
OneOf([ # 高斯噪点 IAAAdditiveGaussianNoise(), GaussNoise(), ], p=0.2),
OneOf([ # 模糊相关操作 MotionBlur(p=.2), MedianBlur(blur_limit=3, p=0.1), Blur(blur_limit=3, p=0.1), ], p=0.2),
ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=45, p=0.2),
OneOf([ # 畸变相关操作 OpticalDistortion(p=0.3), GridDistortion(p=.1), IAAPiecewiseAffine(p=0.3), ], p=0.2),
OneOf([ # 锐化、浮雕等操作 CLAHE(clip_limit=2), IAASharpen(), IAAEmboss(), RandomBrightnessContrast(), ], p=0.3), HueSaturationValue(p=0.3), ], p=1.0)(image=image)['image']
Compose([ RandomCrop(always_apply=False, p=1.0, height=768, width=768), OneOf([ RGBShift(always_apply=False, p=0.5, r_shift_limit=(-20, 20), g_shift_limit=(-20, 20), b_shift_limit=(-20, 20)), HueSaturationValue(always_apply=False, p=0.5, hue_shift_limit=(-20, 20), sat_shift_limit=(-30, 30), val_shift_limit=(-20, 20)), ], p=0.5), ], p=1.0, bbox_params=None, keypoint_params=None, additional_targets={})
#albumentations 提供了 save() 和 load() 两个方法,可以将组合保存与加载
#保存 A.save(transform, '/tmp/transform.json')
#加载 loaded_transform = A.load('/tmp/transform.json') print(loaded_transform)
random.seed(42) 定义随机数种子,重新加载时,当种子数设置一样时,可以复现结果
augmented_image_1 = transform(image=image)['image'])
#保存
A.save(transform, '/tmp/transform.json')
#加载
loaded_transform = A.load('/tmp/transform.json')
#为了复现相同的结果,设置与之前相同的随机数种子
random.seed(42)
augmented_image_2 = loaded_transform(image=image)['image']
#使用 to_dict 和 from_dict 来序列化转换流水线为Python dict 格式
to_dict 会返回一个描述流水线的python 字典,此字典只包含最原始的数据类型,如dict、list、str、int、float等。为了从字典中恢复抓换流水线只需要调用 from_dict。如下使用方式:
transform_dict = A.to_dict(transform) loaded_transform = A.from_dict(transform_dict) print(loaded_transform)