「モンローがアインシュタインに変身」をPythonで

[pukiwiki]
「[[ 近未来×予測テレビ ジキル&ハイド(2008/06/15:http://asahi.co.jp/kinmirai/hoso/0615.html]]」にて、「遠くから見るとマリリンモンローだけど、近寄るとアインシュタインに見える顔写真」という錯視が登場。面白かったので、Pythonで再現してみました

サンプル画像
遠くから見るとモンローの写真ですが、近くに寄ってみると。。。

[[http://boxheadroom.com/wp/wp-content/uploads/2008/06/080617s.jpg:http://boxheadroom.com/wp/wp-content/uploads/2008/06/080617.jpg]]

クリックで拡大表示。拡大した画像を、モニタから離れて見ると、再びモンローに見えます。現象自体も不思議ですが、これを思いついた人はすごいですね。
—-
以下コード
[/pukiwiki]


[pukiwiki]
**やってることの説明
-FFT(フーリエ変換)を使い、画像を荒い部分と細かい部分に分割
-細かい線はアインシュタインを使い、荒い部分はモンローを使います
-フォトショップだと、ローパスフィルター、ハイパスフィルターというのが有るようです。

***コード
matplotlibと、PILを使用しています。

_import pylab as p
_import Image
_import math
_
_#画像ファイル名
_face1=”face1b.png” #モンロー
_face2=”face2b.png” #アインシュタイン
_fname3=”filterd3.png” #出力ファイル名
_
_def imread(fname) :
_ im=Image.open(fname,”r”)
_ gray=im.convert(“L”)
_
_ w,h=im.size
_ a=p.fromstring(gray.tostring(),dtype=p.uint8)
_ a2=a.reshape(h,w)
_ #o=Image.fromstring(“L”,(w,h),a2.tostring())
_ #o.save(“testout.png”)
_ return a2
_
_def imwrite(a,fname):
_ h,w=a.shape
_ o=Image.fromstring(“L”,(w,h),a.tostring())
_ o.save(fname)
_
_#p.cla()
_a1=p.complex64(imread(face1))
_
_f=p.fft2(a1)
_h,w=f.shape
_h2=h//2; w2=w//2
_s=h*w
_f1=f.reshape(s)
_y,x=p.mgrid[-h2:h2-1:h*1j,-w2:w2-1:w*1j]
_r=p.absolute(x)+p.absolute(y)
_r=r.reshape(s)
_#lmax=math.sqrt(w2*w2+h2*h2)
_lmax=h2+w2
_
_#このあたりのパラメータは、画像によって微調整の必要あり
_l1=lmax*0.95
_l2=lmax*0.92
_l3=lmax*0.6
_f1b=f1.copy()
_f1b[rl2]*=0
_f2[r

コメントを残す

メールアドレスが公開されることはありません。