スポンサーリンク

PyTorchで画像をリサイズ(拡大・縮小)するtorchvision.transforms.functional.resize

Image

PyTorchで画像をリサイズ(拡大・縮小)するには、torchvision.transforms.functional.resizeを使う。

サンプル画像をWEBからダウロード、保存します。

import requests
import matplotlib.pyplot as plt
from torchvision.io import read_image

url = "https://github.com/opencv/opencv/blob/master/samples/data/butterfly.jpg?raw=true"
file_name = "butterfly.jpg"

response = requests.get(url)
image = response.content

with open(file_name, "wb") as f:
    f.write(image)

image = read_image(path=file_name)
print(image.shape)
# torch.Size([3, 356, 493])

plt.imshow(image.permute(1,2,0));

torchvision.transforms.functional.resize

第一引数imgにリサイズする画像をTensor配列で、sizeにリサイズ後の画像サイズを(高さ, 幅)で指定する。

import torchvision.transforms.functional as F

image_re = F.resize(img=image, size=(100, 200))
print(image_re.shape)
# torch.Size([3, 100, 200])

plt.imshow(image_re.permute(1,2,0));

リサイズ時の補間方法について

リサイズ時の補間方法は、デフォルトでInterpolationMode.BILINEAR指定されている。他の補間方法を使いたい場合は、第三引数のinterpolationに指定する。指定できる補間方法は以下3つである。

  • InterpolationMode.BILINEAR
  • InterpolationMode.NEAREST
  • InterpolationMode.BICUBIC
import torchvision.transforms as T

image_re = F.resize(img=image, size=(100, 200), interpolation=T.InterpolationMode.BILINEAR)

image_re = F.resize(img=image, size=(100, 200), interpolation=T.InterpolationMode.NEAREST)

image_re = F.resize(img=image, size=(100, 200), interpolation=T.InterpolationMode.BICUBIC)

関連記事、参考記事

PyTorch公式ページでも紹介されていた本で、「Tensorの仕組み」から「ディープラーニングの実践プロジェクト:肺がんの早期発見」までステップバイステップで説明しているため、中身をよく理解できます。

PyTorch実践入門 (Compass Booksシリーズ)

コメント