【Python/Pillow(PIL)】transformメソッドで射影変換(ホモグラフィ変換)

transform()メソッドでアフィン変換を行う方法はここ↓で紹介しました。

【Python/Pillow(PIL)】transformメソッドでアフィン変換

このページでも説明しているように method に PIL.Image.PERSPECTIVE を指定し、data の部分にホモグラフィ変換行列を指定すれば、射影変換(ホモグラフィ変換)を行う事ができるのですが、ホモグラフィ変換行列を求めるのが少々難しいので、射影変換後の形状が長方形でいいのであれば、method に PIL.Image.QUAD を指定することで、簡単に射影変換を行う事が可能になります。

 

(サンプルプログラム)

from PIL import Image  # 画像データ用

# PIL.Imageで画像を開く
src = Image.open("./buisiness_card.jpg")

quad_data = (
    57, 174,   # 左上
    41, 418,   # 左下
    580, 252,  # 右下
    488, 13    # 右上
    )

# 4点からなる四角形を幅、高さからなる長方形へ変換
dst = src.transform(
            (320, 240),     # 出力サイズ(幅, 高さ)
            Image.QUAD,     # 変換方法
            quad_data,      # 四角を構成する4点の座標
            Image.BICUBIC   # 補間方法
            )

# OS標準の画像ビューアで表示
src.show() # 元画像
dst.show() # 変換画像

(実行結果)

PIL.Image.QUAD では4点の座標からなる四角形を (幅, 高さ)で指定した長方形へ変換します。

4点の座標は下図のように、四角形の角の点を 左上、左下、右下、右上 の順で指定します。

射影変換では、変換後の形状を長方形にする場合が多いかと思いますので、長方形でいいのなら、とても簡単!!

参考記事

【Python/Pillow(PIL)】transformメソッドでアフィン変換

【Python/NumPy】座標からホモグラフィ変換行列を求める方法

コメントを残す

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

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