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、Pillow和torchvision。确保您已安装它们。
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()
输出
它将产生以下输出:
请注意,您可能会得到具有不同亮度、对比度、饱和度和色相的输出图像。