2018年11月15日 更新

等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 2

前回の記事「等角写像による画像の変換〜Schwarz-Christoffel 変換〜part 1」の続きです. 実際に実装をして,写像を確かめてみます.

285 view お気に入り 0

今回の記事は,前回の記事の続きになります. 前回の記事は下のリンクからご確認ください.

1. Schwarz- Christoffel 変換

Schwarz - Christoffel 変換とは,半平面を等角写像に基づいて三角形,四角形などの多角形に変換する写像です.具体的な変換式は以下のようになります.

Schwarz-Christoffel 変換

$w$平面上の多角形に関して,その各頂点の内角を順番に $\alpha_1 \pi, \alpha_2 \pi,\cdots, \alpha_n \pi$とするとき \begin{align} \frac{dw}{dz} = \gamma(z-a_1)^{\alpha_1 - 1}(z-a_2)^{\alpha_2 - 1} \cdots
(z-a_n)^{\alpha_n - 1} \end{align} によって,半平面から$n$角形に写される.


今回の場合,四角形に写すことを考えていますので,$\alpha_1 = \alpha_2 = \alpha_3 = \alpha_4 = 1/2$を代入し,さらに$a_1=-1/k, a_2 =-1, a_3 = 1, a_4 = 1/k$とすると, \begin{align} \frac{dw}{dz} =\frac{\tilde{\gamma}}{\sqrt{(1-z^2)(1-k^2z^2)}} \end{align}

となります.これは,ヤコビの楕円関数と深く関係しています.詳しくは以下のページをご覧ください.

https://ja.wikipedia.org/wiki/ヤコビの楕円関数

2. 今回のフローチャート

今回は,正方形から円への写像を実装します.具体的には,

  1. Schwartz- Christoffel の逆変換により,正方形を半平面に
  2. 半平面を円に

の方法によって行います.

四角形から円に写す等角写像

四角形から円に写す等角写像

Schwarz-Christoffel 変換と半平面から円に写す写像を組み合わせることで,四角形から円への写像を実現する.

3. 実装

それでは実装をしていきます.まずは,以下のように格子点を定義しておきます.
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
import scipy.special
パッケージのインストール.py
# Schwarz Christoffel Mapping

## square
s = 1
m = 1000
x_m = np.linspace(-s,s,m/50)
x = np.linspace(-s,s,m)

for x_i in x_m:
    plt.plot(x_i*np.ones(m),x,color='black')
    plt.plot(x,x_i*np.ones(m),color='black', linestyle='dashed')    

plt.gca().set_aspect('equal', adjustable='box')

sc = 1.2
plt.xlim(-s*sc,s*sc)
plt.ylim(-s*sc,s*sc)
plt.show()
格子点定義.py
 (5094)

次に,必要となる楕円関数などを定義します.python のscipy の関数は引数として複素数値を受け入れないので,級数を用いて定義し直します.
34 件

関連する記事 こんな記事も人気です♪

等角写像による画像の変換〜Schwarz-Christoffel 変換〜 part1

等角写像による画像の変換〜Schwarz-Christoffel 変換〜 part1

等角写像の一つであるSchwarz Christoffel 変換を用いて,画像の変換をしてみます. python によるコードも記載しております. 画像はhttps://uk.mathworks.com/help/images/examples/exploring-a-conformal-mapping_ja_JP.html より.
三好 裕之 | 322 view
画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -

画像のセグメンテーション - Level set 法の実装 (Chan-Vese) -

画像処理のセグメンテーションの分野で用いられるLevel set 法を用いて画像のセグメンテーションを行います.
三好 裕之 | 1,835 view
画像の一部を消すInpainting という技術とその実装 (python)

画像の一部を消すInpainting という技術とその実装 (python)

Python + OpenCVにより,画像の修復の技術,「Inpainting 」の実装を行います.
三好 裕之 | 3,203 view
画像のFilter をPython で視覚的に理解する (Gaussian, Edge 抽出).

画像のFilter をPython で視覚的に理解する (Gaussian, Edge 抽出).

Python を用いて,画像のFilter を視覚的に理解してみます.コードを載せていますので,実装可能です.
三好 裕之 | 6,284 view
スパースモデリング ~少量データから画像を復元~

スパースモデリング ~少量データから画像を復元~

matlab のコードをもとに,スパースモデリングとは何かについて説明します.今回はスパースモデリングの説明です.
三好 裕之 | 4,031 view

この記事のキーワード

この記事のキュレーター

三好 裕之 三好 裕之