PyTorch – torchvision.transforms – RandomErasing()


**RandomErasing()** 變換會在輸入影像中隨機選擇一個矩形區域,並擦除其畫素。**torchvision.transforms** 模組提供了許多重要的變換,可用於對影像資料執行不同型別的操作。**RandomErasing()** 變換隻接受任意大小的張量影像。張量影像是一個torch張量。

由於此變換僅支援張量影像,因此應首先將 PIL 影像轉換為 torch 張量。應用 **RandomErasing()** 變換後,我們將 torch 張量影像轉換為 PIL 影像。

步驟

我們可以使用以下步驟在輸入影像中隨機選擇一個矩形區域並擦除其畫素:

  • 匯入所需的庫。在以下所有示例中,所需的 Python 庫為 **torch、Pillow** 和 **torchvision**。確保您已安裝它們。

import torch
import torchvision
import torchvision.transforms as T
from PIL import Image
  • 讀取輸入影像。輸入影像可以是 PIL 影像或 torch 張量。

img = Image.open('sky.jpg')
  • 如果輸入影像是 PIL 影像,請將其轉換為 torch 張量。

imgTensor = T.ToTensor()(img)
  • 定義 **RandomErasing()** 變換。

transform = T.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)
  • 將上述定義的變換應用於輸入影像,以隨機選擇輸入影像中的矩形區域並擦除其畫素。

imgTensor = transform(imgTensor)
  • 將上述變換後的張量影像轉換為 PIL 影像。

img = T.ToPILImage()imgTensor)
  • 顯示歸一化影像。

img.show()

注意

或者,我們可以定義上述在第 3、4 和 6 步中執行的三個變換的組合。

transform = T.Compose([
   T.ToTensor(),
   T.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False),
   T.ToPILImage()
])

輸入影像

此影像在以下所有示例中用作輸入檔案。

示例 1

以下程式會從輸入影像中隨機選擇一個矩形區域並擦除其畫素。在這裡,我們將機率設定為 1,因此它一定會選擇影像中的一個區域並擦除其畫素。

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

# read the input image
img = Image.open('sky.jpg')

# define a transform to perform three transformations:
# convert PIL image to tensor
# randomly select a rectangle region in a torch Tensor image
# and erase its pixels
# convert the tensor to PIL image
transform = T.Compose([ T.ToTensor(), T.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False), T.ToPILImage() ])
# apply the transform on image
img = transform(img)

# display the output image
img.show()

輸出

它將產生以下輸出:

示例 2

讓我們來看另一個例子:

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

# read input image
img = Image.open('sky.jpg')

# define a transform to perform transformations
transform = T.Compose([T.ToTensor(), T.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False), T.ToPILImage()])

# use dictionary comprehension to take four output images
imgs = [transform(img) for _ in range(4)]

# display four output images
fig = plt.figure(figsize=(7,4))
rows, cols = 2,2
for j in range(0, len(imgs)):
   fig.add_subplot(rows, cols, j+1)
   plt.imshow(imgs[j])
   plt.xticks([])
   plt.yticks([])
plt.show()

輸出

它將產生以下輸出:

請注意,在上圖輸出影像中,至少有兩張影像中有被擦除的區域,因為我們將機率設定為 0.5。

更新於:2022年1月6日

2K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

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