2008/09/20

エッシャーっぽい絵を生成する「エッシャーくん」を作ってみた。

エッシャーくん

エッシャーっていう画家は知っていますか?分かんない人のために説明しますと、こんな感じのふしぎーな絵を書いている人です。名前は知らなくても一度は見たことがあるのではないでしょうか。

それでなんですが、適当な画像からなんかエッシャーっぽいふしぎな画像を生成するフィルタ「エッシャーくん(仮称)」をPython Imaging Library(PIL)で作ってみました。これを使えばどんな画像もエッシャーっぽい世界にご招待です。ソースは近々公開します。

追記(09/24)

ソースコードをアップロードしました。subversionで管理されてますので、
svn checkout http://svn.coderepos.org/share/lang/python/escher Somewhere
でチェックアウトしてください。


たとえば、こんな感じのイラストにエッシャーくんを適用させてみると…


こんな感じの絵が出来上がりました。これはどこまでズームさせても終わりがない、無限に続いている絵になっています。


この、なんかごっついリングもエッシャーくんの手によれば…
(Photo by the justified sinner, "Roofing Nail Ring 1")


どこまでも続く絵に早変わり!なんかうにょんうにょんしています。


この画像はどーなるんだろ…


なんかコーヒーっぽい…

どーやって作っているのか

エッシャーくんは"A logarithmic image transformation"っていう論文を元に作られているので、気になる人はこれを見れば大体のことが分かると思いますが、一応大まかな解説をしてみると、複素平面をlog(z)で変形して、絵が循環するように座標をスケール、回転させてからexp(z)で繋げているようです…

あーやっぱ説明が下手くそなので、見てもらったほうが早いです。

余談

本当はprocessingで作る予定だったんですけど、あまりにもprocessingの数学ライブラリがアレだったんで途中からpythonで作り直しました。(対数関数すらないのにはビックリした。そりゃああんま使わないかもしれないけどさー)

それにしてもpythonの開発速度の早さは半端ない。まさか100行未満で出来るとは思わんかったです。

3 件のコメント:

octech さんのコメント...

エッシャーくん、おもしろいですね!
ソースを拝見し早速ActionScript3.0で移植してみました。
→http://d.hatena.ne.jp/octech/20080930#1222759025
クラス構成も改変して公開しています。
もし問題がありましたらご連絡ください。

rezoo さんのコメント...

はじめまして。興味を持っていただきましてありがとうございます。
自分はただ論文の実装を行っただけなのですが、それでも自分のソースコードから新しいコードが生まれるという流れはとても面白く、公開して良かったなぁと思います。

octechさんのブログで言及されていた疑問についてコメントしましたので、もしよろしければ参考にしてください。

匿名 さんのコメント...
このコメントはブログの管理者によって削除されました。