2021-02-05

感谢以下网址

#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)


版权声明:本文为baidu_38262850原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。