整体概要
变换类型 | 具体类 |
---|---|
模糊/噪声 | AdvancedBlur*,Blur*,Downscale*,Defocus*,GlassBlur*,GaussianBlur*,GaussNoise*,ImageCompression*,ISONoise*,MultiplicativeNoise*,MedianBlur*,MotionBlur*,ZoomBlur* |
几何变换 | Affine,Flip,GridDistortion,HorizontalFlip,OpticalDistortion,Perspective,PiecewiseAffine,RandomRotate90,Rotate,SafeRotate,ShiftScaleRotate,Transpose,VerticalFlip |
裁剪/填充 | BBoxSafeRandomCrop,Crop,CenterCrop,CropAndPad,CropNonEmptyMaskIfExists,PadIfNeeded,RandomCrop,RandomCropFromBorders,RandomCropNearBBox,RandomResizedCrop,RandomSizedBBoxSafeCrop,RandomSizedCrop |
放缩 | LongestMaxSize,RandomScale,Resize,SmallestMaxSize |
图像直方图 | CLAHE*,Equalize*,HistogramMatching* |
图像基本属性 | ColorJitter*,HueSaturationValue*,RandomToneCurve*,RandomBrightnessContrast* |
数据类型变换 | FromFloat*,ToGray*,ToFloat*,ToTensorV2,ToRGB* |
Dropout | ChannelDropout*,CoarseDropout,Cutout*,GridDropout,MaskDropout,PixelDropout |
特殊效果 | RandomFog*,RandomRain*,RandomShadow*,RandomSnow*,RandomSunFlare*,Spatter*,RandomGravel* |
其余图像增强 | ChannelShuffle*,Emboss*,ElasticTransform,FDA*,FancyPCA*,InvertImg*,Lambda,Normalize*,PixelDistributionAdaptation*,Posterize*,RandomGamma*,RandomGridShuffle,RingingOvershoot*,RGBShift*,Sharpen*,Solarize*,Superpixels*,ToSepia*,TemplateTransform*,UnsharpMask* |
工具类 | Compose,OneOf,OneOrOther,ReplayCompose,Sequential,SomeOf |
注:
- ImageOnlyTransform的子类(*标注)变换仅可应用于image。
- DualTransform的子类变换可应用于image,mask,masks,bboxes,keypoints。
- 斜体标注的图像增强,意味着可能会导致原图像宽高大小的不固定变化,使用时应注意。
- 以IAA开头的图像增强需要依靠另一个图像增强库imgaug,由于大部分这样的方法在albumentations中已有替代方案,原方法大多数已经弃用,故这里不再列出。
- JpegCompression已弃用,可用ImageCompression替代。
- RandomBrightness、RandomContrast已弃用,可用RandomBrightnessContrast替代。
- Github版本的Albumentations可能会比pip版本的多极少一部分图像增强方法。
- Albumentations的通常输入是numpy.ndarray,数据类型应为int或32位float。
详细说明
1、AdvancedBlur(ImageOnlyTransform): class
功能:使用随机参数的广义正态卷积核来模糊输入图像。这一转换会先向产生的随机参数卷积核添加乘法噪声,然后再应用卷积。(论文链接:https://arxiv.org/pdf/2107.10833.pdf)
初始化参数:
blur_limit: 用以模糊输入图像的最大高斯核大小。若为0则会根据sigma进行计算:round(sigma * (3 if img.dtype == np.uint8 else 4) * 2 + 1) + 1。若为单一值,则等同于(0, blur_limit)。(可以为二元整数tuple或者单一值,必须为[0, inf)间的0或奇数)(默认(3, 7))
sigmaX_limit: x方向上高斯核的标准差。若为单一值则等同于(0, sigma_limit)。若为0则会如此计算:sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8。(可以为二元tuple或者单一值,必须在[0,inf)间)(默认0)
sigmaY_limit: y方向上高斯核的标准差,同上。
rotate_limit: 在给定范围内选择一个随机角度旋转高斯核。如果为单一值则等同于(-rotate_limit, rotate_limit)。(可以为二元整数tuple或单一值)(默认(-90, 90))
beta_limit:分布形状参数,1为正态分布。低于1会使得分布尾部比正态分布更重,高于1会使得分布比正态分布更轻。(可以为二元tuple或单一值)(默认(0.5, 8.0))
noise_limit: 控制卷积核噪声强度的乘法因子。如果设置为单一值则等同于(0, noise_limit)。(可以为二元tuple或单一值。必须为正值,最好是以1.0为中心的区间)(默认(0.75, 1.25))
always_apply: 是否总应用。(bool)(默认False)
p:应用该转换的概率。(默认0.5)
t = A.AdvancedBlur(blur_limit=11, always_apply=True) res_img = t(image=img)["image"]
2、Affine(DualTransform): class
功能:对图像应用仿射变换。(仿射变换涉及:图像平移,旋转,放缩,剪切)。
初始化参数:
scale: 放缩因子。1.0意味着没有变化,0.5意味着缩小到原来的50%。(可以为二元tuple、单值或者具有键“x”和“y”的字典(当keep_ratio=False时,对x、y轴使用不同的值才有意义))(默认None)
translate_percent: 以原图像的宽高比例为单位的平移。0意味着没有变化,0.5意味着移动该方向大小的一半。(可以为二元tuple、单值或者具有键“x”和“y”的字典)(默认None)
translate_px: 以像素为单位的平移。(可以为二元tuple、单值或者具有键“x”和“y”的字典)(默认None)
rotate: 旋转角度。旋转发生在图像的中心而不是左上角。(可以为固定值或者二元区间,若为区间则会在其中随机均匀采样)(默认None)
shear: 剪切角度。合理的值应位于[-45, 45]。(可以为固定值或者二元区间,若为区间则会在其中随机均匀采样,也可以为具有键“x”和“y”的字典)(默认None)
interpolation: 插值方法。(默认cv2.INTER_LINEAR)
mask_interpolation: 掩码插值方法(默认cv2.INTER_NEAREST)
cval: 填充新创建的像素时所使用的常数值。仅当mode=“constant”时有效。(默认0)
cval_mask: 类似cval但是仅对掩码有效。(默认0)
mode: opencv的边界填充策略。(默认cv2.BORDER_CONSTANT)
fit_output: 如果为True,则将调整图像平面的大小和位置,以在仿射变换后紧密地捕捉整个图像(忽略“translate_pcenter”和“translate-px”)。否则(“False”),变换后的图像的部分可能最终出现在图像平面之外。拟合输出形状对于避免应用旋转后图像的角在图像平面之外是有用的。(默认False)
keep_ratio: 若为True,在应用随机放缩后原始的宽高比会被保持。(默认False)
always_apply: 是否总应用。(bool)(默认False)
p: 应用该变换的概率。(默认0.5)
t = A.Affine(always_apply=True) res_img = t(image=img)["image"]
t = A.Affine(shear={"x":30, "y":10}, fit_output=True, always_apply=True) res_img = t(image=img)["image"]
3、Blur(ImageOnlyTransform): class
功能:使用随机大小的核模糊输入图像
初始化参数:
blur_limit: 用以模糊输入图像的最大核大小。(可以为int或二元int tuple)(默认(3, 7))
always_apply: 是否总应用。(bool)(默认False)
p: 应用该变换的概率。(默认0.5)
t = A.Blur((10, 11), always_apply=True) res_img = t(image=img)["image"]
4、BboxParams(Params): class
功能:指定bounding box的类型参数。一般用在Compose实例的初始化参数中。
初始化参数:
format: bounding boxes的类型。(应为“coco”, “pascal_voc”,“albumentations”或者“yolo”。
“coco”格式:[x_min, y_min, width, height"]。
“pascal_voc”格式:[x_min, y_min, x_max, y_max]。
“albumentations”格式:如“pascal_voc”,但是归一化好了,即范围在[0,1]。
“yolo”格式:[x, y, width, height],x,y指归一化的bbox中心;width,height指归一化的bbox宽高。
)
label_fields: 与boxes相关联的变量列表,应与boxes类型一致。(列表)(默认None)
min_area: 一个bounding box的最小面积。所有可见面积(像素单位)小于这个值的bounding box将被移除。(默认0.0)
min_visibility: 保持该box在列表中的最小面积比。(默认0.0)
check_each_transform: 如果为True,在每个dual transform后都会检查bboxes是否满足限制。(bool)(默认True)
5、BBoxSafeRandomCrop(DualTransform): class
功能:在不损失bboxes的条件下裁剪输入的一个随机部分。
初始化参数:
erosion_rate: 在裁剪前应用到图像的腐蚀高度比例(默认0,有可能损失bbox)
always_apply: 是否总应用。(bool)(默认False)
p: 应用该变换的概率。(默认1.0)
bboxes = [[50, 50, 400, 350]] # [x1, y1, width, height] category_ids=[0] t = A.Compose([ A.BBoxSafeRandomCrop(erosion_rate=0.5, always_apply=True)], bbox_params=A.BboxParams(format='coco', label_fields=['category_ids'])) res = t(image=img, bboxes=bboxes, category_ids=category_ids)
6、Compose(BaseCompose): class
功能:组合transforms并且处理有关bounding boxes的变换
初始化参数:
transforms: 一系列组合的transformations(列表)
bbox_params: 用于bounding boxes变换的参数(BboxParams)(默认None)
keypoint_params: 用于关键点变换的参数(KeypointParams)(默认None)
additional_target: 具有“键(新target名称), 值(旧target名称)”的字典(dict)(默认None)
p: 应用所有变换的概率(默认1.0)
t = A.Compose([ A.ColorJitter(), A.Flip(), A.GaussianBlur(blur_limit=(17, 19)) ], p=1) res_img = t(image=img)["image"]
7、Crop(DualTransform): class
功能:从图像中裁剪一个区域
初始化参数:
x_min, y_min, x_max, y_max: 裁剪区域在原图像左上方点x,y坐标和右下方x,y坐标(int)
always_apply: 是否总应用。(bool)(默认False)
p: 应用该变换的概率。(默认1.0)
t = A.Crop(20, 20, 300, 300, always_apply=True) res_img = t(image=img)["image"]
8、ColorJitter(ImageOnlyTransform): class
功能:随机变换图像的亮度,对比度和饱和度。注意与torchvision的ColorJitter相比可能会有些小区别。
初始化参数:
brightness: 改变亮度的程度。从区间[max(0, 1-brightness), 1+brightness]或给定[min, max]中均匀取值。(必须为非负数,可以为单一值或者二元序列)(默认0.2)
contrast: 改变对比度的程度。从区间[max(0, 1-contrast), 1+contrast]或给定[min, max]中均匀取值。(必须为非负数,可以为单一值或者二元序列)(默认0.2)
saturation: 改变饱和度的程度。从区间[max(0, 1-saturation), 1+saturation]或给定[min, max]中均匀取值。(必须为非负数,可以为单一值或者二元序列)(默认0.2)
hue: 改变色度的程度。从区间[-hue, hue]或给定[min, max]中均匀取值。(必须满足0"downscale":cv2.INTER_NEAREST, "upscale":cv2.INTER_LINEAR}, always_apply=True)