PyTorch – 随机更改图像的亮度、对比度、饱和度和色相


要随机更改图像的亮度、对比度、饱和度和色相,我们应用ColorJitter()。它是torchvision.transforms模块提供的众多变换之一。此模块包含许多可用于操作图像数据的重要的变换。

ColorJitter()变换接受 PIL 和张量图像。张量图像是一个形状为[C, H, W]的 PyTorch 张量,其中 C 是通道数,H是图像高度,W是图像宽度。

此变换还接受一批张量图像。一批张量图像是一个[B, C, H, W]的张量。B是批次中的图像数量。如果图像既不是 PIL 图像也不是张量图像,则我们首先将其转换为张量图像,然后应用ColorJitter()

语法

torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)

它返回一个图像,其亮度、对比度、饱和度和色相是从给定的相应范围内随机选择的。

步骤

我们可以使用以下步骤随机更改图像的亮度、对比度、饱和度和色相

  • 导入所需的库。在以下所有 Python 示例中,所需的 Python 库是torch、Pillowtorchvision。确保您已安装它们。

import torch
import torchvision
import torchvision.transforms as transforms
from PIL import Image
  • 读取输入图像。输入图像是 PIL 图像或 Torch 张量

img = Image.open('nike.jpg')
  • 定义一个变换来更改亮度、对比度、饱和度或色相。给出这些参数的所需范围值。

transform =
transforms.ColorJitter(brightness=(0.5,1.5),contrast=(1),saturation=(0.5,1.5),hue=(-0.1,0.1))
  • 将上述定义的变换应用于输入图像以随机更改亮度、对比度、饱和度或色相。

img = transform(img)
  • 显示最终输出图像。

img.show()

注意 − 在以下示例中,您可能会得到具有不同亮度、对比度、饱和度或色相的输出图像,因为ColorJitter()变换会从给定范围内随机选择这些值。例如,对于 brightness = (0.5, 1.5),亮度是 (0.5, 1.5) 范围内的任何值。

输入图像

我们将在两个示例中都使用以下图像作为输入。

示例 1

以下是随机更改原始输入图像的亮度、对比度、饱和度和色相的 Python3 程序。在这个例子中,我们以范围 (最小值,最大值) 的形式提供参数的值。

# import the required libraries
import torch
import torchvision.transforms as transforms
from PIL import Image

# Read the image
img = Image.open('nike.jpg')

# define a transform
transform = transforms.ColorJitter(brightness=(0.5,1.5), contrast=(1), saturation=(0.5,1.5), hue=(-0.1,0.1))

# apply the above defined transform to randomly change
# brightness, contrast, saturation and hue.
img = transform(img)

# visualize the image
img.show()

输出

它将产生以下输出:

请注意,您可能会得到具有不同亮度、对比度、饱和度和色相的输出图像。

示例 2

在这个例子中,我们以浮点值的的形式提供参数的值。

# import required libraries
import torch
import torchvision.transforms as transforms
from PIL import Image

# Read the image
img = Image.open('nike.jpg')

# define a transform
transform = transforms.ColorJitter(brightness=1.0, contrast=0.5, saturation=1, hue=0.1)

# apply above transform on input image
img = transform(img)

# visualize the image
img.show()

输出

它将产生以下输出:

请注意,您可能会得到具有不同亮度、对比度、饱和度和色相的输出图像。

更新于:2022年1月6日

6000+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告