2009年7月17日金曜日

部屋とYシャツとζ


Fig.1 Zeta
ζ.
それは時として,書きにくいと罵られる存在.

というわけで書き方レクチャ.


Fig.2 Lecture

1.人生何事も始めが肝心.始点から,9:15の方向に進みましょう.その後は,万物創生の鍵となる円を描くように,ペンを進めていきます.
2.ここに注意.ここでは,exp(t)の傾きでペンを運びましょう.十分に微分係数が上がったら,次は下降です.下降に入る時には,後で微分が出来るよう,線をなめらかにしましょう.
3.さて,ここでは,2.から受け継いだx方向への運動量と,y方向に加わる重力を考慮しつつ,なめらかに,そして美麗にペンを滑らせていきましょう.
4.人生の終点へやってきました.今までの動きに終止符を打つかのように,急激にy方向速度を落とし,筆圧[Pa]を上げます.2.における東端へ来たら,内側に向かってやや強引にペンを走らせます.最後はしっかりと愛(=√-1)を籠めましょう.

これで,明日からζを書くのに困りません.

最後に3次元化したζを.


Fig.3
いぶし銀の輝きを放つζ.


Fig.4
この角度からはそうそう見られません.


Fig.5
斬新な角度(真上から)から見たζ.

こんな服があったら欲しいですね.πでも良いかも知れません.

ちなみに,ラテンアルファベットのZ,キリル文字のЗはこの文字が起源です.

ですので,数学をやっていて,未知数としてギリシア文字が来た途端にさじを投げ出すようなことをしてはいけません.

2009年7月12日日曜日

専門書を読む #9

集合・位相入門
~p48

進みませんねぇ.

2009年7月4日土曜日

物理 #1 衝突

2つの物体が衝突と如何なるでしょう.

1.古典物理学に従って,その後の運動が決まる.
2.陽子崩壊
3.宇宙ヤバイ

今回は,1.の様になる事を期待します.
2つの物体を球A,Bとします.球A,Bはそれぞれ,

球A:
位置:x1
衝突前速度:v1
衝突後速度:v1'
質量:m1
半径:r1
反発係数:e1

球B:
位置:x2
衝突前速度:v2
衝突後速度:v2'
質量:m2
半径:r2
反発係数:e2

としましょう.未知数は衝突後速度v1',v2'のみです.これらを計算によって求めてみましょう.

※反発係数
反発係数というのは,2つの物体の衝突前後の相対速度の比のことで,
e=-(v2'-v1')/(v2-v1)
(0≦e≦1)
で与えられます.

まず,球Aと,球Bが衝突した時の相対速度の比は,常識的に申し上げて,
e=e1e2
となります.とすると,
v2'=v1'-e(v2-v1)
このように変形出来ます.

質量保存の法則
m1v1+m2v2=m1v1'+m2v2'
に,先程計算したv2'を代入すると,v2'が消え,未知数はv1'のみになります.

即ち,
v1'=(m1v1+m2v2)/(m1+m2)+e(v2-v1)m2/(m1+m2)
同様に,
v2'=(m1v1+m2v2)/(m1+m2)+e(v1-v2)m1/(m1+m2)

ということで,衝突後速度が求められました.

最後に衝突条件を.
|x2-x1|≦r1+r2

衝突した際に,双方の球がめり込んでいる,というような場合は,衝突条件から外れるまで双方に衝突後速度を加えるとよいです.

これを,2次元に拡張する事も出来ますが,それは次回以降…

2009年7月3日金曜日

数学 #4 オイラーの公式

オイラーの公式
eix=isin(x)+cos(x)

有名ですが,急に複素数として表示したくなったので表示してみました.
x=x(t)=cos(t)
y=y(t)=sin(t)


Fig.1

上の画像で,灰色はt軸,赤色はx(実数)軸,青色はy(虚数)軸をあらわします.


Fig.2

ぐるぐると渦を巻く様になっているのが分かります.

画像処理 #19 肉を置け

例えば,次のような自体に出くわすかも知れません.

「文字画像に平均化フィルタが欠けてあって読めない」

今回は,そんな問題を打開する術を探す,そんな時間です.

まず,サンプル画像がこのようなものだったとしましょう.


Fig.1 Put some meat

では,平均化フィルタをかけてみます.


Fig.2 平均化フィルタ(w=8)


Fig.3 平均化フィルタ(w=16)

w=8の方は,ギリギリ読めますが,w=16の方はもう分かりません.
では,これらの画像をフィルタリングすることで,読めるようになるか実験してみましょう.

使うフィルタ
・鮮鋭化フィルタ
・ラプラシアンフィルタ
・LOGフィルタ

まずは,Fig.2を復元できるかやってみましょう.


Rig.4 鮮鋭化フィルタ
1回,2回,3回と適用しています.


Fig.5 ラプラシアンフィルタ
上は,ゼロ交差,下は,フィルタ後の値を正,0,負によって,色分けしたものです.
下の画像の方がなんとなく復元出来ているように感じます.


Fig.6 LOGフィルタ
上から,σ=1,1.2,1.4,1.8です.中々よい感じに復元できています.

次に,Fig.3がどの程度まで復元できるか.やってみましょう.


Fig.7 鮮鋭化フィルタ
残念.全く歯が立ちません.


Fig.8 ラプラシアンフィルタ
文字の様に見えなくもないですが,これは読めないですね.


Fig.9 LOGフィルタ
LOGフィルタがやってくれました.ノイズ混じりですが,「肉を置け」のように読めます.
ここで,元画像Fig.3を見てほしいのですが,あのボヤボヤ画像から,ここまで復元できるのは驚異的に感じます.

2009年7月1日水曜日

数学 #3 愛の愛情

「知は愛,愛は知である.」
哲学者西田幾多郎の言葉ですが,愛は以下の通りに定義することが出来ます.

i2=-1
なる数i.

さて,愛の定義は無事に終える事が出来ましたが,愛の愛情はいかなるものなんでしょうか.

愛の愛情=ii
であることは明らかであり,
ここでオイラーの公式を用いると,
i=isin(π/2)+cos(π/2)=eiπ/2
なので,
ii=e-π/2
となります.

これを計算しますと,
ii≒0.207879576
つまり,愛の愛情は約0.2,ということになります.

2009年6月29日月曜日

画像処理 #18 ハーフトーニング

2値画像ネタです.

先日の2値化では,ある閾値を設け,それより画素値が高いか否かで白黒判断していました.
しかし,それだと満足しない方もおられるはず.

というわけで,ハーフトーニング.渇いた喉を潤してくれます.
簡単に言うと,白黒の2値だけで,濃淡の微妙な変化を表現しようというものです.
スクリーントーンとかは正にそれです.

・濃度パターン法(density pattern method)
1つのグレースケール画素を複数の2値画像で表現します.
例えば,1画素を4x4画素の2値画像で表現するとすると,256階調を17分割することができます.


Fig.1

こんな感じ.
1画素を4x4画素で表現するので,入力画像がWxH画素の場合,出力画像4Wx4H画素となります.

・ディザ法(dither method)
ディザパターンというものを使う方法です.


Fig.2 Dither pattern

1. 入力画像を4x4のブロックに分割する.
2. ブロック内の各画素がディザパターンの対応画素*16+8以上なら,出力画素を255,そうでないなら,0とする.
3. 全てのブロックについて,2を行う.

ディザ法では周期的パターンが目立つので(実例を後述します),ディザパターンをFig.2に固定せず,可変にする方法も考案されているようです.

・誤差拡散法(error diffusion method)
これは,2値化を行うことによる誤差をキャンセルさせて行くというものです.
処理の流れは,以下の通り.

f:入力画素
g:出力画素

1. fからgを以下の様に決定し,誤差をe=g-fとする.
f>127 → g=255
f≦128 → g=0
2. 誤差eを入力画素周辺の数画素に分散させる.
分散式の例:
f=f(x, y)だったとき
f'(x+1, y)=f(x+1, y)+(5/16)e
f'(x+1, y)=f(x-1, y+1)+(3/16)e
f'(x+1, y)=f(x, y+1)+(5/16)e
f'(x+1, y)=f(x+1, y+1)+(3/16)e
3. 1,2の処理を,全画素について行う(左上から右下に向かって).

下が今回の例.


Fig.3 sample


Fig.4 density pattern method
出力画像がでかいので一部のみ.


Fig.5 dither method


Fig.6 error diffusion method

誤差拡散法が一番周期的パターンが目立ちにくいです.

これでまた一つ,人生の楽しみが増えました.

2009年6月26日金曜日

数学 #2 数値解析 #1 オイラー法

微分方程式が趣味の方は居るでしょうか.
日々閉じた解を追い求める,これ以上のロマンはありません.

しかし,行き詰ってしまうことも少なくないはず.そこはそれ,人生は旅です.気楽に行きましょう.

そんなわけでオイラー法です.

例えば,
y'=x2+y2
この微分方程式は,解を初等関数で表すことはできないようです.

ではどうするか.数値解を求めれば良いのです.

まず,初期値x0,y0,刻み幅hを決めます.

さて,
x1=x0+h
y1=y(x1)
としましょう.y(x1)はy()が分からないので求められませんが,テイラー展開することが出来ます.

y1=y(x0+h)
=y0+hy'0+(h2/2!)y''n…

始めの2項にのみ注目しましょう.(hが十分に小さいとすれば,それ以降を無視しても誤差は小さいです)
つまり,
x1=x0+h
y1=y0+hy'0
と書くことが出来ます.

ちなみに,ここで,y'0は
y'0=y'(x0, y0)
ですのでご注意を.

最終的に,これを再帰的に記述すれば,
xn+1=xn+h
yn+1=yn+hf(xn, yn)
(但し,f(x, y)=y'(x, y))

となります.
これらから,初期値を決めてしまえば,数値的振る舞いが分かるのです.

下に例を示しましょう.


Fig.1
先の微分方程式について,それぞれの座標での傾きを表したものです(-2≦x≦2, -2≦y≦2).これで,解の外形をイメージすることが出来ます.


Fig.2 x0=-1.6, y0=-1.8, h=1/4, 1/16
初期値を設定して"解いて"みました(-2≦x≦2, -2≦y≦2).
hが小さいほど,誤差は小さくなります(hが1/2になると,誤差も1/2になる).

ちなみにこれ,精度はそれ程良くないです.
もっと精度を良くしたいというのであらば,テーラー級数の項を増やすか,あの方法を使いましょう…と,次回へ引き延ばしてみたり.