首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >最快最好用的图像处理库:albumentations库的简单了解和使用

最快最好用的图像处理库:albumentations库的简单了解和使用

作者头像
机器学习炼丹术
发布2020-07-14 11:06:10
发布2020-07-14 11:06:10
12K0
举报

在对图片进行处理的时候,之前就使用torch自带的transfrom来对图像做一些反转,平移,随机剪裁,拉伸这样的任务。然而最近的图像分类+语义分割的比赛中,发现了这样的一个库函数:Albumentations。

厉害的大佬都在用这个库函数作为pre-process,那么说明这个库函数非常的有东西,所以这里借这次机会,来好好学习一个这个库函数的内容。

1 关于Albumentations

如果你也是一个大佬,喜欢看文档的那种,可以看这个github链接:https://github.com/albumentations-team/albumentations

  • 这个库是图片处理的library,处理的图片是在HWC格式下,也就是Height,Width,Channale;
  • 在相同的对图像的处理下,使用这个库函数的速度更快;
  • 基于numpy和OpenCV,这个库从中取其精华;
  • 相比torch自带的,这个库函数有更多的对图像的预处理的办法
  • 对Pytorch很友好,而且这个库函数是kaggle master制作的。

这个库最好的地方就是处理速度快!

这个图中,可以看到albumentations的处理方法中,很多都是速度最快的。【如何安装】

代码语言:javascript
复制
pip install albumentations
# 或者
sudo pip install -U git+https://github.com/albu/albumentations

2 竞赛中的实用例子

这篇文章不会把所有的这个库函数的方法都列举一遍,因为太多了。这里主要就看一个例子好了:

代码语言:javascript
复制
RESIZE_SIZE = 1024 # or 768
train_transform = albumentations.Compose([
        albumentations.Resize(RESIZE_SIZE, RESIZE_SIZE),
        albumentations.OneOf([
            albumentations.RandomGamma(gamma_limit=(60, 120), p=0.9),
            albumentations.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.9),
            albumentations.CLAHE(clip_limit=4.0, tile_grid_size=(4, 4), p=0.9),
        ]),
        albumentations.OneOf([
            albumentations.Blur(blur_limit=4, p=1),
            albumentations.MotionBlur(blur_limit=4, p=1),
            albumentations.MedianBlur(blur_limit=4, p=1)
        ], p=0.5),
        albumentations.HorizontalFlip(p=0.5),
        albumentations.ShiftScaleRotate(shift_limit=0.2, scale_limit=0.2, rotate_limit=20,
                                        interpolation=cv2.INTER_LINEAR, border_mode=cv2.BORDER_CONSTANT, p=1),
        albumentations.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225), max_pixel_value=255.0, p=1.0)
    ])

其实看起来也不是非常的难理解:

  • Resize就是拉伸图片修改尺寸
  • RandomGamma就是使用gamma变换
  • RandomBrightnessContrast就是随机选择图片的对比度和亮度
  • CLAHE是一种对比度受限情况下的自适应直方图均衡化算法
  • blur就是用一个随机尺寸的核来模糊图片,这个尺寸小于等于blur_limit
  • motion blur和上面一样,随机的核,然后使用运动模糊算法来图例图片,运动模糊简单的说就是因为摄像机运动造成的那种模糊的动感。
  • medianBlur就是使用中值滤波。
  • HorizontalFlip水平翻转
  • ShiftScaleRotate这个就是平移缩放旋转三个一,给力!
  • Normalize这个就是图像归一化了。【原来图像中的处理算法这么多!上课老师讲的实在是九牛一毛啊,回头有时间了好好整理一下上面出现的图形算法的具体过程。】

2 另外两个案例

2.1 返回值是字典?!

代码语言:javascript
复制
import numpy as np # linear algebra
import cv2
import matplotlib.pyplot as plt
import albumentations as albu

image = cv2.imread('../input/neuralstyletransfersample-photo/photo.png')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
aug = albu.HorizontalFlip(p=1)
img_HorizontalFlip = aug(image=image)

这个经过albu库函数HorizontalFlip处理的增强图像img_HorizontalFlip是一个字典,其中的image属性才是我们想要的图片。

2.2 旋转翻转放大平移

代码语言:javascript
复制
image = cv2.imread('../input/neuralstyletransfersample-photo/Yangshiyi.png')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
aug = albu.HorizontalFlip(p=1)
img_HorizontalFlip = aug(image=image)['image']
aug = albu.ShiftScaleRotate(p=1,shift_limit=0.05,rotate_limit = 45)
img_ShiftScaleRotate = aug(image=image)['image']

plt.figure(figsize=(15,5))
plt.subplot(1,3,1)
plt.imshow(image)
plt.subplot(1,3,2)
plt.imshow(img_HorizontalFlip)
plt.subplot(1,3,3)
plt.imshow(img_ShiftScaleRotate)

输出图像如图所示(这是一个非常可爱的小姐姐):

2.3 颜色增强方案

代码语言:javascript
复制
image = cv2.imread('../input/neuralstyletransfersample-photo/Yangshiyi.png')
image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)

light = albu.Compose([
    albu.RandomBrightness(p=1),
    albu.RandomContrast(p=1),
    albu.RandomGamma(p=1),
    albu.CLAHE(p=1),
],p=1)

medium = albu.Compose([
    albu.CLAHE(p=1),
    albu.HueSaturationValue(hue_shift_limit = 20,
                          sat_shift_limit = 50,
                          val_shift_limit = 50,
                          p = 1),
],p=1)

strong = albu.Compose([
    albu.ChannelShuffle(p=1),
],p=1)

plt.figure(figsize=(20,5))
plt.subplot(1,4,1)
plt.imshow(image)
plt.title('原图')
plt.subplot(1,4,2)
plt.imshow(light(image=image)['image'])
plt.title('轻微颜色增强')
plt.subplot(1,4,3)
plt.imshow(medium(image=image)['image'])
plt.title('中等颜色增强')
plt.subplot(1,4,4)
plt.imshow(strong(image=image)['image'])
plt.title('强力颜色增强')

输入图像如下:


喜欢的话,关注一下我们的公众号吧。

【机器学习炼丹术】

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习炼丹术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 关于Albumentations
  • 2 竞赛中的实用例子
  • 2 另外两个案例
    • 2.1 返回值是字典?!
    • 2.2 旋转翻转放大平移
    • 2.3 颜色增强方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档