图像数据增强的几种常用方法总结(神里凌华来给大家示范!!!)

说明:

        当我们在进行有关目标检测或图像分类时,我们少不了跟图片打交道,在我们整理数据集时你也许会发现有些类别的图片或许达不到一个预期的数量要求,那我们可选的方法就有两种,一种是爬虫,一种则是更为简单的数据增强操作。今天就为大家梳理出几种常见的数据增强操作,完整代码在最后会有展示。如果对你有帮助的话记得点赞收藏哟 ~ ~
 

  需要用到的包:

import PIL.Image as Image
from torchvision import transforms
import matplotlib.pyplot as plt

  让我们先写一个imshow()函数,来让小龟龟可视化吧。

def imshow(img_path, transform):
    img = Image.open(img_path)
    fig, ax = plt.subplots(1, 2, figsize=(15, 5))
    ax[0].imshow(img)
    img = transform(img)
    ax[1].imshow(img)

  然后将凌华的图片路径导入:

path = 'E:\\数据增强\\lihua.jpg'

Resize

        这个操作会将图片处理成你想要的像素尺寸,这里将原来的图片调整为24*24像素大小。

transform = transforms.Resize((24, 24))
imshow(path, transform)
plt.show()



cropping

        这个操作会截取原图像的一部分作为新的图像,常见操作返回一个中心裁剪图像。

transform = transforms.CenterCrop((224, 224))
imshow(path, transform)
plt.show()



Flipping

        这个操作会对图像进行水平或垂直翻转。因为水平翻转不太明显,我们这里展示垂直翻转。

transform = transforms.RandomVerticalFlip()
imshow(path, transform)
plt.show()

Padding

        这个操作会在图像边缘做填充,我们指定每条边做25像素的填充。

transform = transforms.Pad((25, 25, 25, 25))
imshow(path, transform)
plt.show()

Rotation

        这个操作会让图像做一个随机角度的旋转,这里设置45°就是让图像在-45°至45°之间随机旋转。

transform = transforms.RandomRotation(45)
imshow(path, transform)
plt.show()


Gaussian Blur

        这个操作会对原图像做模糊处理。GaussianBlur()要传入kernel_size和标准差sigma,其中kernel_size必须为奇数才行。

transform = transforms.GaussianBlur(7, 5)
imshow(path, transform)
plt.show()


Graysscale

        这个操作会对原图像进行灰度处理。如果你想要生成单通道的灰度图像,应该将num_output_channels设置为1,如果你想要将图像转换为伪造的RGB灰度图像,可以将num_output_channels设置为3。这里我们设置为3。

transform = transforms.Grayscale(num_output_channels=3)
imshow(path, transform)
plt.show()

Brightness

        这个操作会改变图像的亮度。通常,brightness的值应该在范围[0, 2]之间,其中1表示原始亮度,小于1表示降低亮度,大于1表示增加亮度。brightness设置为2,那么在每次应用转换时,图像的亮度会在[-2, 2]的范围内随机变化。

transform = transforms.ColorJitter(brightness=2)
imshow(path, transform)
plt.show()

Contrast

        这个操作将会对图像的对比度进行调整。通常,contrast的值应该在范围[0, 2]之间,其中1表示原始对比度,小于1表示降低对比度,大于1表示增加对比度。contrast设置为2,那么在每次应用转换时,图像的对比度会在[-2, 2]的范围内随机变化。

transform = transforms.ColorJitter(contrast=2)
imshow(path, transform)
plt.show()

Saturation

        这个操作会对图像的饱和度做处理。这意味着您尝试增加图像的饱和度。通常,saturation的值应该在范围[0, 2]之间,其中1表示原始饱和度,小于1表示降低饱和度,大于1表示增加饱和度。saturation设置为5,那么在每次应用转换时,图像的饱和度会在[-5, 5]的范围内随机变化。

transform = transforms.ColorJitter(saturation=5)
imshow(path, transform)
plt.show()

Hue

        这个操作会改变图像的色调。具体来说,hue的值通常应该在[-0.5, 0.5]之间,其中0表示不引入随机的色调变化,负数值表示向下调整色调,正数值表示向上调整色调。hue设置为0.5,那么在每次应用转换时,图像的色调会在[-0.5, 0.5]的范围内随机变化。

transform = transforms.ColorJitter(hue=0.5)
imshow(path, transform)
plt.show()

完整代码:

import PIL.Image as Image
from torchvision import transforms
import matplotlib.pyplot as plt


def imshow(img_path, transform):
    img = Image.open(img_path)
    fig, ax = plt.subplots(1, 2, figsize=(12, 5))
    ax[0].imshow(img)
    img = transform(img)
    ax[1].imshow(img)


# 设置你自己的图片路径吧!
path = 'E:\\数据增强\\lihua.jpg'

# Resize/Rescale
transform = transforms.Resize((24, 24))
imshow(path, transform)
plt.show()

# Cropping
transform = transforms.CenterCrop((224, 224))
imshow(path, transform)
plt.show()

# Flipping
transform = transforms.RandomVerticalFlip()
imshow(path, transform)
plt.show()

# Padding
transform = transforms.Pad((25, 25, 25, 25))
imshow(path, transform)
plt.show()

# Rotation
transform = transforms.RandomRotation(45)
imshow(path, transform)
plt.show()

# Gaussian Blur
transform = transforms.GaussianBlur(7, 5)
imshow(path, transform)
plt.show()

# Grayscale
transform = transforms.Grayscale(num_output_channels=3)
imshow(path, transform)
plt.show()

# Brightness
transform = transforms.ColorJitter(brightness=2)
imshow(path, transform)
plt.show()

# Contrast
transform = transforms.ColorJitter(contrast=2)
imshow(path, transform)
plt.show()

# Saturation
transform = transforms.ColorJitter(saturation=5)
imshow(path, transform)
plt.show()

# Hue
transform = transforms.ColorJitter(hue=0.3)
imshow(path, transform)
plt.show()

  • 7
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值