1999-01-14[n年前へ]
■ボケたエアーブラシで細かな字がかけるか?
画像復元を勉強してみたい その2
「宇宙人はどこにいる? - 画像復元を勉強してみたい その1-」ではボケた画像からオリジナルのシャープな画像を復元してみた。前回の話を例えて言うと、
- 太郎君が細かい字をエアーブラシで書いた。
- ボケボケのエアーブラシを使ったから、ボケボケの画になった。
- そのボケボケの画から、太郎君が何を画こうとしたか、考える。
ということであった。
今回、やってみたいのは以下のようなことである。
- 太郎君は太いエアーブラシで字を書きたい。
- しかも細かな字を書きたい。
- そんなことができるか?
直感的には、ボケボケのエアーブラシで細かい字など書けないように思う。その直感が正しいか調べてみたい。考え方は前回と同じく、
出力画像から、ボケ分布でデコンボリューション処理により、オリジナルの画像を計算する。
というやり方である。前回と違うのは出力画像がシャープな画像(先の例で言うと、細かな字)である、という所である。道具は今回もMathematicaを使う。
出力したい画像ファイルを読み込む。
<< Utilities`BinaryFiles`
StreamFile = OpenReadBinary["E:\jun\private\dekirukana\ufo\ufo.raw"]
ImageData = Table[ ReadBinary[ StreamFile , Byte] ,{x,64},{y,64}];
ListDensityPlot[ImageData,Mesh->False,PlotRange->{0,255}]
この細かな字を太いボケボケなエアーブラシで字を書けるか考える。
まずは、エアーブラシのボケボケ度をつくる。
(*正規分布=ガウス分布によるぼけパラメータを作成する*)
δ=10;
μ=32;
ListPlot3D[NormalBoke,ColorFunction ->Hue,Mesh->False,PlotRange->All]
ボケボケの太いエアーブラシである。
デコンボリューション用にガウス分布の場所をずらす。
NormalBoke = RotateRight[NormalBoke,32];
NormalBoke = Transpose[ RotateRight[Transpose[NormalBoke],32] ]; (*上へShift*)
ListPlot3D[NormalBoke,ColorFunction ->Hue,Mesh->False,PlotRange->All]
出力画像をエアーブラシのボケボケ度でデコンボリューションする。そうすれば、太郎君がどのように画を画けば良いかがわかる。はたして答えはでるのだろうか?
計算してみると答えが出てしまう。
SharpImage = Re[InverseFourier[ Fourier[ImageData] / Fourier[NormalBoke]] ];
ListDensityPlot[SharpImage/4,Mesh->False,PlotRange->All]
まず、本当にこれ(画像:4)にそってエアーブラシで画を画くと出力画像(画像:1)が再現できるか確認してみる。そこで画像:4と画像:3でコンボリューションしてやる。太郎君に実際にエアーブラシを使って画を画いてもらうわけである。
それでは、画いてみる。
ResImage = InverseFourier[Fourier[SharpImage] Fourier[NormalBoke]];
ListDensityPlot[Re[ResImage],Mesh->False,PlotRange->All]
画像:1が再現できた。つまり、太いボケボケのエアーブラシで細かい字が書けてしまうわけである。直感的には納得しがたい結果である(私だけかもしれないが)。
これには実はタネがある。画像:4を鳥瞰図でみると判るが、画像4は正負の値が高周波で並んでいる。
ListPlot3D[SharpImage/4,ColorFunction ->Hue,Mesh->False,PlotRange->All]
太郎君が使ったエアーブラシは太いボケボケのエアーブラシではあるが、吹き量に正負が両方ともあったのである。そのようなエアーブラシを使うと太郎君の腕(高テクニシャン)ならば細かな字が書けるわけだ。どんなパターンもかけるかはどうかまでは知らないが、少なくとも"hirax"という字は画ける。
前回のような光学系の例でも、これが何に対応しているかはすぐわかるが、一番分かりやすいのは電荷と電位の例だと思う。
電荷が周囲につくる電位分布はボケボケの分布である。ところが、金属などを適当に配置して、その金属に電位を印加してやると、鋭い電位分布をつくることができる。つまり、ボケボケの分布から鋭い電位分布を作成してやることができる。こちらなら直感的にもすぐ納得できるだろう。その際には、金属表面に電荷が鋭く集中するのも、よく知っている話だ。
実感用に電場計算を行った例を以下に示しておく。使った道具はCUPSの電場計算プログラムである。CUPSは教育用のプログラム集である。
一応、2次元膜の例で、金属を配置し、適当に電位を印加し、電位・電荷量計算を行ってみる。
もちろん、金属内部では均一な電位である。それを条件に解いているのだから当たり前だが。
その時の電荷分布を下に示す。金属表面に鋭い電荷分布が生じているのがわかるだろう。
ここでは大雑把な金属の配置にしてしまったが、格子状の金属配置にして、互い違いに違う極性の電位を印加すれば(細かい字に相当する)、正負の極性の電荷分布が鋭く現れるのは当たり前の話だ。
電位、電場、電荷量を一緒に示しておく。
今回の話は、単なる計算上の話である。それに、何かどこかで仮定を間違っているような気もするんだよなぁ。信用度アルファ版だからまぁいいか...
2004-04-25[n年前へ]
■はてなダイアリーの偽善者(人間情報度)度診断結果
この面白い結果は是非グラフで眺めたい、と思ったら、グラフもちゃんと作成して頂けた。いや、本当に素晴らしい「はてなダイアリーの偽善者度診断の結果」である。 結構、綺麗な正規分布になっていることが面白い。
2010-05-01[n年前へ]
■女子学生の恋人選び方 実験編
少し前、女子学生相手に、こんな実験をしてみた。実験として出した「お題」は、「これから20人が登場します。順々に人が登場します。といっても、登場するのは”あなたとの相性を数値で表したもの”だけです。あなたは、(順に出てくる相性数値を眺めながら)この人を恋人に選ぶ、と決めたところで、手を挙げてください。あなたは、手を挙げた瞬間の相手を選ぶことになりますから、すでに登場した前の人を選ぶことはできませんし、それ以降に登場する人を選ぶこともできません」というものである。この「お題」を出した時に、どのような選び方をするのかを知りたかったのである。
ちなみに、女子学生に見せる数値は、20人1セットの実験を始める前に、平均値と分散を適当に決めた正規分布乱数である。20人1セット内では平均値と分散は変化しないとはいえ、その平均値や分散は、相性数値を眺める被験者はわからない、という条件である。
面白かったのが、女子学生が全員「最初の数人分の数値に関してはただ眺め、どういう相性数値が出てくるのか、つまり、平均値はどの程度でバラツキはどの程度なのかを、最初の数人を眺め・見極めた上で、相性数値が上位に入る人のところで”手を挙げる”という選び方をした、ということだった。とても興味深い事に、被験者はみな同じような選び方をしたのである。この選び方は、数学が導く理想の選び方、とほぼ同じである。
その結果、被験者全員が「(コンピュータが用意した)20人の相手の中から相性数値がベスト3に入る相手を見事に選んだ」のだった。
女子学生の直感(あるいは、推論・予測能力というべきか)は、恐るべき精度を持つものだと驚かされたのである。
2010-05-02[n年前へ]
■女子学生の恋人選び方 ”あなたも挑戦してみよう”編
今日は、女子学生の恋人選び方 実験編でやってみた「これから20人が登場します。順々に人が登場します。といっても、登場するのは”あなたとの相性を数値で表したもの”だけです。あなたは、(順に出てくる相性数値を眺めながら)この人を恋人に選ぶ、と決めたところで、手を挙げてください。あなたは、手を挙げた瞬間の相手を選ぶことになりますから、すでに登場した前の人を選ぶことはできませんし、それ以降に登場する人を選ぶこともできません」というお題を、あなたも試してみる・体験してみることができるようにしてみました。
下にあるのが、その道具(フォーム)です。JavaScriptの正規分布乱数関数を使い、20人分の「相性数値」をボタンを押すたびに順々に(1人分の数値づつ)出力します。出力される「相性数値」は数値が大きい方が「相性が良い」ということを示します。20人分まで出力すると、一旦止まり、また初期に戻ります。
正規分布乱数の平均値と偏差は固定されています。だから、この記事のソースを眺めれば、どんな正規分布乱数であるかがわかってしまうことになります。つまり、どんな「人たち」が登場するのかを、おおよそ予想することができてしまいます。とはいえ、そんなカンニングはせずに、ぜひ、順に並ぶ数値群から、どんな人たち(数値群)が登場するのか想像してみてください。
そして、20人目まで(20人目を含む)の間で、「この人(数値)を選ぶ」と(相性数値が出た瞬間に)決めてみてください。そして、さらに、自分が選んだ数値が20個の数値の中で一体上から何番目に位置していたか、ということを調べてみてください。その結果が、あなたの「選び方能力」ということになります。
「(コンピュータが用意した)20人の相手の中から相性数値がベスト3に入る相手を見事に選んだ」女子学生たちを、あなたは超えることができたでしょうか?それとも、全然ダメだったでしょうか…?
ところで、登場する相性数値から平均値・分散を直感で刻々予想し、あなたが想像した予想平均値・分散の変化推移を眺め直してみても面白いかもしれません。そうすると、自分がどんな風に考え・予想をしていたかを、自分自身で改めて知ることができ、ちょっと不思議な気持ちになることでしょう。