面接官「特技は2値化とありますが?」
学生 「はい。2値化です。」
面接官「2値化とは何のことですか?」
学生 「画像処理です。」
面接官「え、画像処理?」
学生 「はい。画像処理です。グレースケール画像を白黒はっきりつける事が出来ます。」
面接官「・・・で、その2値化は当社において働くうえで何のメリットがあるとお考えですか?」
学生 「はい。グレースケール画像を2値化する際困りません。」
面接官「いや、当社には2値化をしようとする輩はいません。」
学生 「でも、2値化楽しいですよ。」
面接官「いや、楽しいとかそういう問題じゃなくてですね・・・」
学生 「誤差拡散法とかあるんですよ。」
面接官「ふざけないでください。それに誤差拡散法って何ですか。だいたい・・・」
学生 「誤差拡散法です。Error diffusion methodとも書きます。誤差というのは・・・」
面接官「聞いてません。帰って下さい。」
学生 「あれあれ?怒らせていいんですか?使いますよ。2値化。」
面接官「いいですよ。使って下さい。2値化とやらを。それで満足したら帰って下さい。」
学生 「運がよかったな。今日はグレースケール画像がないみたいだ。」
面接官「帰れよ。」
2009年7月19日日曜日
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日日曜日
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次元に拡張する事も出来ますが,それは次回以降…
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 オイラーの公式
画像処理 #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を見てほしいのですが,あのボヤボヤ画像から,ここまで復元できるのは驚異的に感じます.
「文字画像に平均化フィルタが欠けてあって読めない」
今回は,そんな問題を打開する術を探す,そんな時間です.
まず,サンプル画像がこのようなものだったとしましょう.

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,ということになります.
哲学者西田幾多郎の言葉ですが,愛は以下の通りに定義することが出来ます.
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
誤差拡散法が一番周期的パターンが目立ちにくいです.
これでまた一つ,人生の楽しみが増えました.
先日の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
誤差拡散法が一番周期的パターンが目立ちにくいです.
これでまた一つ,人生の楽しみが増えました.
登録:
投稿 (Atom)

