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+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.