【Python/Pillow(PIL)】画像のリサイズ、補間指定

Pillowで画像(画像データ)を拡大/縮小するには、Imageクラスのresizeメソッドを用います。

構文

Image.resize(size, resample=None, box=None, reducing_gap=None)

パラメータ

引数名 説明
size リサイズ後の大きさを (幅, 高さ)のタプルで指定します。
resample リサイズ時の補間方法を指定します。
Image.NEAREST
Image.BOX
Image.BILINEAR
Image.HAMMING
Image.BICUBIC
Image.LANCZOS
画像の mode が 1, P や I;16などのビット指定モードのときは、Image.NEAREST が初期値
その他の場合、Image.BICUBICが初期値
box 画像を拡大/縮小する領域を(左, 上, 右, 下)の座標のタプルで指定します。
初期値は(0, 0, 画像の幅, 画像の高さ)の画像全体
cropメソッドの処理と同じ
reducing_gap リサイズ時の最適化(詳細わからず。。)
初期値: None (最適化なし)
戻り値 リサイズされた画像(PIL.Image)

サンプル

from PIL import Image

# 画像を開く
img = Image.open("Parrots.bmp")

# 画像を拡大/縮小する
img_resize = img.resize((64, 64))

# 切り抜いた画像の保存
img_resize.save("Parrots_resize.bmp")

(実行結果)

元画像 縮小画像

resample(補間方法)について

resampleの設定は、主に画像を拡大するときに画像の画素と画素の間の輝度値を求める事になるのですが、この時の求め方の方法を指定します。

この画素間の輝度値を求める方法は一般に補間と言いますが、補間については、下記のページを参照ください。

画素の補間(Nearest neighbor,Bilinear,Bicubic)の計算方法

Pillowでは、補間方法にImage.NEAREST, Image.BOX, Image.BILINEAR, Image.HAMMING,  Image.BICUBIC, Image.LANCZOSの方法を指定する事ができますが、

NEAREST→BOX→BILINEAR→HAMMING→BICUBIC→LANCZOS

の順で、キレイにリサイズすることができますが、処理時間は逆に遅くなるため、用途に応じてresampleの設定を行ってください。

個人的には、画像処理後の1画素1画素の輝度値を見せたいときはNEAREST、とりあえずのBILINEARという使い分けが多いです。

下図のように部分的に画像を拡大したときに、resampleの設定を変えると、どのようになるか?見てみたいと思います。

 

NEAREST BOX BILINEAR
HAMMING BICUBIC LANCZOS

拡大の時のキレイさは、NEAREST, BOX → HAMMING → BILEAR → BICUBIC → LANCZOS の順ですかね?

参考

https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.resize

https://pillow.readthedocs.io/en/stable/handbook/concepts.html#concept-filters

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください