图像增强⼯具albumentations学习总结
图像增强⼯具albumentations学习总结
CONTENT
data augmentations link description
中⼼剪裁
指定位置剪裁
如果掩码为⾮空,则使⽤掩码裁剪区域,否则随机裁剪。
⽔平,垂直或⽔平和垂直翻转
albumentations 中主要提供了三种⾮刚体变换⽅法:ElasticTransform、GridDistortion 和 OpticalDistortion。
以⽹格⽅式删除图像的矩形区域
⽔平翻转
在输⼊上放置规则的点⽹格,并通过仿射变换在这些点的附近随机移动
剪裁和填充
左右翻转
上下翻转
对输⼊执⾏随机四点透视变换
在输⼊端放置⼀个规则的点⽹格,并通过仿射变换随机移动这些点的邻域
⽤户⾃定义图像增强
如果图像最长边⼩于max_size, 将最长变为max_size, 并保留长宽⽐resize
畸变
判断填充
随机剪裁
⽹格打乱图像
剪裁并resize
随机旋转90度
随机尺度变换
随机剪裁
重新调整图像⼤⼩
旋转
平移、尺度加旋转变换
将短边变为maxsize,并保持长宽⽐
转置
垂直翻转
⼯具函数
import numpy as np
import cv2
import matplotlib.pyplot as plt
import albumentations as albu
import os,sys
'''
data augmentation util: albumentations
reference: github/albumentations-team/albumentations#documentation
'''
def aug(img, aug_func):
return aug_func(**{'image':img})['image']
def aug_compose(img, aug_func_list):
resizedstrong_aug = albu.Compose(aug_func_list, p=1)
return strong_aug(**{'image':img})['image']
def aug_show(img, aug_func, save_fig_name):
plt.figure(figsize=(16,9))
for i in range(8):
plt.subplot(2, 4, i+1)
img_aug = py(), aug_func)
plt.imshow(img_aug)
os.chdir(os.path.join(cur_root,'pics'))
plt.savefig(f'{save_fig_name}.png', dpi=120)
plt.show()
原图
1. CenterCrop
def center_crop(img):
height, width = img.shape[:2]
plt.figure(figsize=(16,9))
for i in range(8):
plt.subplot(4, 2, i+1)
crop_height, crop_width = np.random.randint(100, height), np.random.randint(100, width)
print(crop_height, crop_width)
img_crop = py(), albu.CenterCrop(crop_height, crop_width,p=1))
plt.imshow(img_crop)
plt.show()
plt.savefig('center_crop.png', dpi=300)
2. Crop
def crop(img):
height, width = img.shape[:2]
plt.figure(figsize=(16,9))
for i in range(8):
plt.subplot(2, 4, i+1)
x_min, y_min = np.random.randint(24, 120), np.random.randint(16, 80)
x_max, y_max = np.random.randint(x_min, width), np.random.randint(y_min, height)  img_crop = py(), albu.Crop(x_min, y_min, x_max, y_max, p=1.0))
plt.imshow(img_crop)
os.chdir(os.path.join(cur_root,'pics'))
plt.savefig('crop.png', dpi=120)
plt.show()
3. CropNonEmptyMaskIfExists
4. ElasticTransform
alpha、sigma:⾼斯过滤参数,float类型
alpha_affine:范围为 (-alpha_affine, alpha_affine),float 类型
interpolation、border_mode、value、mask_value:与其他类含义⼀样
approximate:是否应平滑具有固定⼤⼩核的替换映射(displacement map),若启⽤此选项,在⼤图上会有两倍的速度提升,boolean类型。
p:使⽤此转换的概率,默认值为 0.5
(1) ⾸先需要对图像中的每个像素点(x,y)产⽣两个-1~1之间的随机数,Δx(x,y)和Δy(x,y),分别表⽰该像素点的x⽅向和y⽅向的移动距离;
(2) ⽣成⼀个以0为均值,以σ为标准差的⾼斯核k_nn,并⽤前⾯的随机数与之做卷积,并将结果作⽤于原图像
⼀般来说,alpha越⼩,sigma越⼤,产⽣的偏差越⼩,和原图越接近。
aug_show(img, albu.ElasticTransform(alpha=1, sigma=50, alpha_affine=50), 'elastic_transform')
aug_show(img, albu.Flip(p=0.5), 'flip')
6. GridDistortion
num_steps:在每⼀条边上⽹格单元的数量,默认值为 5,int 类型
distort_limit:如果是单值,那么会被转成 (-distort_limit, distort_limit),默认值为 (-0.03, 0.03),float或float数组类型interpolation、border_mode、value、mask_value:与其他类含义⼀样
p:使⽤此转换的概率,默认值为 0.5
aug_show(img, albu.GridDistortion(p=1, border_mode = cv2.BORDER_CONSTANT), 'grid_distortion')

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。