2020年5月6日水曜日

【Pillow】ImageFilterモジュールによる画像平滑化・エッジ強調・エッジ検出

 画像処理ライブラリPillowの Image.filter メソッドと PIL.ImageFilter モジュールを組み合わせると画像フィルタリング処理ができる。
ImageFilter.BLUR
ImageFilter.GaussianBlur
ImageFilter.SMOOTH
ImageFilter.SMOOTH_MORE
によるぼかし(平滑化)処理、
ImageFilter.EDGE_ENHANCE
ImageFilter.EDGE_ENHANCE_MORE
ImageFilter.SHARPEN
ImageFilter.UnsharpMask
によるエッジ強調処理、
ImageFilter.FIND_EDGES
ImageFilter.CONTOUR
ImageFilter.EMBOSS
によるエッジ検出処理を説明する。
Pillow(PIL) を使うためにはインポートが必要。 PIL.ImageFilterモジュールは通常以下の形式でインポートされる。

コード

from PIL import ImageFilter

例に用いる画像'image.jpg'は以下を使用(フリー写真素材ぱくたそより)





1. ぼかし(平滑化)処理

 ぼかし(平滑化)処理には以下のメソッドを用いる。ImageFilter.GaussianBlur以外は引数を取らない。
ImageFilter.BLUR
ImageFilter.SMOOTH
ImageFilter.SMOOTH_MORE
ImageFilter.GaussianBlur

ImageFilter.BLUR 処理

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# BLUR処理
im_blur = im.filter(ImageFilter.BLUR)

# ファイルの保存
im_blur.save('im_blur.jpg', quality=95)

実行結果




ImageFilter.SMOOTH 処理

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# SMOOTH処理
im_smooth = im.filter(ImageFilter.SMOOTH)

# ファイルの保存
im_smooth.save('im_smooth.jpg', quality=95)

実行結果




ImageFilter.SMOOTH_MORE 処理

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# SMOOTH_MORE処理
im_smooth_more = im.filter(ImageFilter.SMOOTH_MORE)

# ファイルの保存
im_smooth_more.save('im_smooth_more.jpg', quality=95)

実行結果




ImageFilter.GaussianBlur 処理

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# FIND_EDGES処理
im_gaussianblur = im.filter(ImageFilter.GaussianBlur)

# ファイルの保存
im_gaussianblur.save('im_gaussianblur.jpg', quality=95)

実行結果




ImageFilter.GaussianBlur 処理。引数 radius を5とした場合(デフォルトは2)。

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# FIND_EDGES処理
im_gaussianblur = im.filter(ImageFilter.GaussianBlur(5))

# ファイルの保存
im_gaussianblur.save('im_gaussianblur5.jpg', quality=95)

実行結果




2. エッジ強調処理

 エッジ強調処理には以下のメソッドを用いる。ImageFilter.UnsharpMask以外は引数を取らない。
ImageFilter.EDGE_ENHANCE
ImageFilter.EDGE_ENHANCE_MORE
ImageFilter.SHARPEN
ImageFilter.UnsharpMask

ImageFilter.EDGE_ENHANCE 処理

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# EDGE_ENHANCE処理
im_edge_enhance = im.filter(ImageFilter.EDGE_ENHANCE)

# ファイルの保存
im_edge_enhance.save('im_edge_enhance.jpg', quality=95)

実行結果




ImageFilter.EDGE_ENHANCE_MORE 処理

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# EDGE_ENHANCE_MORE処理
im_edge_enhance_more = im.filter(ImageFilter.EDGE_ENHANCE_MORE)

# ファイルの保存
im_edge_enhance_more.save('im_edge_enhance_more.jpg', quality=95)

実行結果




ImageFilter.SHARPEN 処理

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# SHARPEN処理
im_sharpen = im.filter(ImageFilter.SHARPEN)

# ファイルの保存
im_sharpen.save('im_sharpen.jpg', quality=95)

実行結果




ImageFilter.UnsharpMask 処理

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# UnsharpMask処理
im_unsharpmask = im.filter(ImageFilter.UnsharpMask)

# ファイルの保存
im_unsharpmask.save('im_unsharpmask.jpg', quality=95)

実行結果




ImageFilter.UnsharpMask 処理。引数radius=0.5、percent = 100とした場合。

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# UnsharpMask処理
im_unsharpmask = im.filter(ImageFilter.UnsharpMask(radius=0.5, percent = 100))

# ファイルの保存
im_unsharpmask.save('im_unsharpmask2.jpg', quality=95)

実行結果




3. エッジ検出処理

 エッジ検出処理には以下のメソッドを用いる。
ImageFilter.FIND_EDGES
ImageFilter.CONTOUR
ImageFilter.EMBOSS

ImageFilter.FIND_EDGES 処理

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# FIND_EDGES処理
im_find_edges = im.filter(ImageFilter.FIND_EDGES)

# ファイルの保存
im_find_edges.save('im_find_edges.jpg', quality=95)

実行結果




ImageFilter.CONTOUR 処理

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# CONTOUR処理
im_contour = im.filter(ImageFilter.CONTOUR)

# ファイルの保存
im_contour.save('im_contour.jpg', quality=95)

実行結果




ImageFilter.EMBOSS 処理

from PIL import Image, ImageFilter

# 元画像の読み出し
im = Image.open('image.jpg')  

# エンボス処理
im_emboss = im.filter(ImageFilter.EMBOSS)

# ファイルの保存
im_emboss.save('im_emboss.jpg', quality=95)

実行結果




4. リファレンス

Pillow (PIL Fork) > ImageFilter Module

使用バージョン:Python 3.7.0 / Pillow 7.1.2

0 件のコメント:

コメントを投稿