Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách tìm giá trị trung bình trên các kênh ảnh trong PyTorch?

Ảnh RGB có ba kênh: Đỏ, Xanh lá, Xanh dương. Chúng ta cần tính trung bình giá trị pixel ảnh trên các kênh này. Dùng phương thức torch.mean(). Tham số đầu vào là tensor PyTorch. Do đó, trước tiên chuyển ảnh sang tensor PyTorch rồi áp dụng phương thức. Nó trả về giá trị trung bình của tất cả phần tử trong tensor. Để tìm trung bình trên các kênh ảnh, đặt tham số dim=[1,2].

Các bước

  • Nhập thư viện torch, torchvision, Pillow, OpenCV. Đảm bảo đã cài.

  • Đọc ảnh đầu vào dùng Image.open() gán vào biến img.

  • Định nghĩa transform chuyển ảnh PIL sang Tensor PyTorch.

  • Chuyển ảnh img sang tensor dùng transform, gán vào imgTensor.

  • Tính torch.mean(imgTensor, dim=[1,2]). Trả về tensor 3 giá trị: trung bình cho ba kênh RGB. Gán riêng cho R_mean, G_mean, B_mean.

  • In ba giá trị trung bình R_mean, G_mean, B_mean.

Ảnh đầu vào

Dùng ảnh sau cho cả hai ví dụ.

Cách tìm giá trị trung bình trên các kênh ảnh trong PyTorch?

Ví dụ 1

# Chương trình tìm trung bình trên các kênh ảnh
import torch
from PIL import Image
import torchvision.transforms as transforms

# Đọc ảnh đầu vào
img = Image.open('opera.jpg')
# Transform chuyển ảnh sang Tensor
transform = transforms.ToTensor()
# Chuyển ảnh sang Tensor
imgTensor = transform(img)
print("Shape of Image Tensor:\n", imgTensor.shape)
# Tính trung bình tensor ảnh trên kênh RGB
R_mean, G_mean, B_mean = torch.mean(imgTensor, dim=[1, 2])
# In trung bình
print("Mean across Red channel:", R_mean)
print("Mean across Green channel:", G_mean)
print("Mean across Blue channel:", B_mean)

Kết quả

Shape of Image Tensor:
torch.Size([3, 447, 640])
Mean across Red channel: tensor(0.1487)
Mean across Green channel: tensor(0.1607)
Mean across Blue channel: tensor(0.2521)

Ví dụ 2

Có thể đọc ảnh bằng OpenCV. Ảnh đọc bằng OpenCV kiểu numpy.ndarray. Ở đây dùng cách khác tính trung bình: imgTensor.mean().

# Chương trình tìm trung bình trên các kênh ảnh
import torch
import cv2
import torchvision.transforms as transforms

# Đọc ảnh dùng cv2
img = cv2.imread('opera.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# Transform chuyển ảnh sang Tensor
transform = transforms.ToTensor()
imgTensor = transform(img)
print("Shape of Image Tensor:\n", imgTensor.shape)
# Tính trung bình cách khác
R_mean, G_mean, B_mean = imgTensor.mean(dim=[1, 2])
print("Mean across Red channel:", R_mean)
print("Mean across Green channel:", G_mean)
print("Mean across Blue channel:", B_mean)

Kết quả

Shape of Image Tensor:
torch.Size([3, 447, 640])
Mean across Red channel: tensor(0.1487)
Mean across Green channel: tensor(0.1607)
Mean across Blue channel: tensor(0.2521)