hirax.net::Keywords::「行列」のブログ



1999-01-10[n年前へ]

宇宙人はどこにいる? 

画像復元を勉強してみたい その1

 知人から「自称UFO写真」というのものが冗談半分(いや100%位か)で送られてきた。その写真はボケボケの画像なので何がなんだかなんだかわからない。そこで、ぼけぼけ画像を復元する方法を勉強してみたい。UFOは冗談として、画像復元において進んでいるのは天文分野である。そこで、このようなタイトルなのである。もちろん、画像復元の問題は奥が深すぎるので、じっくりと時間をかけてみる。今回はMathematicaを使って試行錯誤を行った。

 ボケ画像を復元するには、ボケ画像がどのように出来ているかを考えなければならない。そこで、ごく単純なぼけ画像を考えてみる。まずは以下の画像のような場合である。

左の点画像が右のようにボケる
画像:1
画像:2
 右の点画像が何らかの理由で右の画像のようにボケる場合だ。焦点のボケた写真などはこんな感じだろう。例えば、これはレンズの焦点合わせがおかしいカメラの画像だと思ってみる。そのカメラで風景を撮るとこのようになる。
本来、左のような風景がボケて右の写真のようになる。
画像:3
画像:4
 偶然、写真にカメラが写っているが、偶然である。別にそのカメラが焦点がボケボケといっているわけではない。今回、やりたいことは右上の写真(画像:4)を元に、左上の写真(画像:3)を復元したいということである。

 画像:1のような点画像が、画像:2のような分布のボケ画像になるとすると、次のような関係が成り立つ。

(式:1) 画像:4 = 画像:3 * 画像:2

画像:1のような点画像が画像:2になるなら、それを参照すれば、画像:3のような点画像の集合がどう
ボケるかは計算できる。つまり、それが画像:4になる。ここで、*はコンボリューションを表している。
 よくある信号処理の話で言えば、画像:2はインパルス応答である。といっても、これはごくごく単純な場合(線形シフトインバリアントとかいろいろ条件がある)の話である。まずはそういう簡単な場合から始めてみる。

 このようなごく単純な場合には

(式:2) 画像:3 = 画像:4 * (1/画像:2)

とすれば、画像:3を復元できることになる。

そこで、まずは単純な1次元データで考える。下の画像:5のようにボケる場合を考える。ここでは、ガウス分布にボケるようにしてある。

赤い線で表したパルスデータが水色で表した分布にボケる
画像:5
(式:1より) ボケ画像 = オリジナル画像 * ボケ具合
であったが、* すなわち、コンボリューションは
逆フーリエ変換(フーリエ変換(オリジナル画像) x フーリエ変換(ボケ具合))
と表すことができる。つまり、周波数領域で掛け算をすれば良いわけである。
左がボケ画像、右がその周波数領域(フーリエ変換)
画像:6
画像:7
 右のボケ画像の周波数表示を見れば低周波数の量が多いのがわかる。結局、このモデルではボケると低周波数を増やすことになる。逆に(式:2)では高周波数の量を増やすことに相当する。だから、Photoshopなどの「シャープ」というプラグインはラプラシアンを用いて、高周波を増やしてやることでボケ低減を行っている。それほど、不自然ではない。しかし、そう近い画像復元ができるわけでもない。

 それでは、試しに適当な1次元データをつくって、画像:6とコンボリューションをとってやり、ボケさせてみる。

左が原画像、右が画像:6と画像:8のコンボリューションをとったボケ画像
画像:8
画像:9
 画像:8のパルスデータは、画像:9ではボケてしまい、判別不能である。そこで、

逆フーリエ変換(フーリエ変換(画像:9) / フーリエ変換(画像:7))

= InverseFourier[Fourier[Image8] / Fourier[Image6]]; (*Mathematica*)

とやると、次のデータが得られる。

復元されたデータ
画像:10
 これがインバースフィルターによる画像復元の方法である。FIR(Finite InpulseResponse)フィルタなどだろう。ところで、

(式:2) 画像:3 = 画像:4 * (1/画像:2)

を見るとわかるが、画像:2が周波数領域で0になる点があったりすると、計算することができない。また、0に近いとむやみな高周波数の増幅が行われて使えない。

 そこで、この方法の修正として、ウィーナフィルターなどの最小平均自乗誤差フィルターがある。これにも多くの不自然な条件のもとに計算される(らしい)。しかし、infoseek辺りで探した限りでは、ウィーナフィルターを用いた画像復元の標準であるらしい。

この方法は先の逆変換に対して、次のように変形されたものである。Mathematicaの表記をそのまま貼り付けたのでわかりにくいかもしれない。

Noise ノイズのパワースペクトル
Signal 信号のパワースペクトル
Boke ボケる様子のインパルス応答
Conjugate 複素共役
BokeData ボケ画像
ResData1 計算した復元画像

Boke1 = (Boke^2 + Noise/Signal)/Conjugate[Boke]; (*Mathematica*)
ResData1 = InverseFourier[Fourier[BokeData] / Fourier[Boke1]]; (*Mathematica*)

である。Noise/SignalはS/N比の逆数であるから、SN比の大きいところではインバースフィルターに近づく。また、インバースフィルターの計算不能な点が消えている。

 これを使って復元してみたのが、次のデータである。

ウィーナフィルターを用いた復元
画像:11
 他にも、いろいろ変形っぽいものがあるが、とりあえず、1次元での練習はここまでにして、2次元で画像復元を行ってみる。

 まずは、ボケのフィルター(PSF=PointSpreadFunction(どのようにボケるかを示すもの)、2次元のインパルス応答)である。

ボケのフィルター(インパルス応答)
画像:12
 それでは、画像をボケさせる。右のボケ画像が全体的に暗いのは左とレンジが表示の違うからである。同じレンジにすると真っ白(真ん中辺りはちょっと灰色)になる。
左がオリジナル画像、右はボケた画像
画像:13
画像:14
 それでは、インバースフィルターを用いて画像を復元させてみる。
復元した画像
 うまく再現できている。今回はノイズも混入していないしPSF(PointSpreadFunction)もわかっているのだから、復元できて当然である。他の射影フィルタ、最大エントロピー・フィルタ、一般逆行列法、SVD法等については今回はまだ挑戦してみていない。
 その他線形の画像復元法をいくつか調べたが、ウィーナフィルターやインバースフィルターとほとんど同じような物が(素人目には)多かった。そこで、ウィーナフィルタなどとはやり方がかなり異なるものについて、いずれ挑戦してみたい。

 関係はないが、ウィナーと言えばサイバネティクスが思い浮かんでしまう。当然、ロゲルギストが連想されるわけだが、文庫本か何かで岩波版と中公版の「物理の散歩道」が安く売り出されないのだろうか?売れると思うんだけど。新書版は高すぎる。

 宇宙人はどこにいるか? そういった話は専門家に聞いて欲しい。わからないとは思うが。

................................................................................

 さて、ここからは、1999.01.24に書いている。シンクロニシティとでも言うのか、今回の一週間後の1999.01.17に
日本テレビ系『特命リサーチ200X』で

地球外生命体は存在するのか?( http://www.ntv.co.jp/FERC/research/19990117/f0220.html )

という回があった。何とこの回のコメンテーターは先の専門家と同じなのだ。偶然とは面白いものだ。

2001-09-16[n年前へ]

やおいの行列論 

 「加藤 X 野中」と「野中 X 加藤」で意味が全然違う、というやおい大好き人間は力説する。だったら、もしかしたらそれは行列計算で何らかの答えが見つかるのではないか、と思った私は疲れてるのかも。

2002-02-20[n年前へ]

「やおい」の評価演算子 

ベクトルの彼方で待ってて II

 東京駅近くの飲み屋「美少年」で、日本酒利き酒セットを目の前にしながら、私は珍しく「日本の政治」について話していた。といっても、単にそれは話し相手が社会部に属する新聞記者だったからである。で、その時の話題は小泉首相と福田官房長官の話だったろうか?

「福田X小泉っていうのは、結構上手くやっているのかな?」
と私が言うと、おもむろに
「あれは、福田X小泉じゃなくて、絶対あれは小泉X福田なのー」
とその記者が言ったのである。何を言っているのかその意味がよく判らないまま、「ん〜?」と私が首を傾げていると、繰り返し
「福田X小泉と小泉X福田は全然意味が違うのー」
と言い始めるのである。何が何だか訳がわからない。じゃぁ、何か?小泉X福田だと小泉純一郎が総理大臣福田康夫が官房長官だけど、福田X小泉だと福田康夫が総理大臣で小泉純一郎が官房長官になるとでも言うのか??政治の世界では、言う順番で総理大臣が決まるとでも言うのか?と私が口をはさむと、
そう。ただ、ちょっと政治の世界とは違う世界かも〜。政界じゃなくて、やおい界ではー。」
と言うのだ。なんだコイツ?政界は判るけど、やおい界って一体何処の世界の話だ??と、困惑する私も構わず、そこから延々と長い演説が始まった…。その大河ドラマのようにやたらと長い話を要約すると、
  • やおい → 一部の女性が好む「男性同士の恋愛もののストーリー」のこと
  • X → やおいの世界で恋愛の関係を示す記号。例えば、AさんとBさんが恋に落ちるであれば、Aさん×Bさんと表す。で、ここで重要なのは先に位置する方が「攻め役」となって、後に位置する方が「受け役」となる…。つまり、例えばサド侯爵とレオパルド・マゾッホであれば攻め役がサド侯爵で、受け役がマゾッホなので、サド×マゾなのである。決して、マゾ×サドではない…
というわけだ(用語集参照)。 で、先の「あれは、福田X小泉じゃなくて、絶対あれは小泉X福田なのー」という言葉は、「小泉純一郎と福田康夫は良いカップルで、攻め役は小泉純一郎で、受け役は福田康夫なんだー」と言いたい、ということらしいのである。なるほど、奥が深い…。 ……が ……いや何も言うまい…。

 で、日本酒を飲みながら、まだまだ続くその話に悪酔いしていると、「カップルの順序が重要なんだー」という言葉を聞いて、ふと中学の頃の数学の授業を思い出した。その頃、大学を出てまだ一年目の斉藤慶子似の数学の先生と話していたときに、「Hくん、あのね掛け合わせる順序が違うと結果も違っちゃう計算もあるのよ」と教わったことがあった。そんな言葉から私は未知の「数学の世界」をかいま見たりしたのである。 今考えてみれば、新任の斉藤慶子似の女性教師の個人授業なのだから、行列・ベクトルの掛け算の順序なんかじゃなくて、「もっと違う順序」を手取り足取り教えてくれても良かったんじゃないか、とか思ったりするし、そうすれば、私は未だ見ぬ「大人の世界」を覗き見ることができたのではないか、と思ったりもするのだけれど、そんなことは残念ながら無くて、私はただ「行列・ベクトルの世界」を覗いただけだったのである。

 で、そんな昔話を思い出したせいか、頭の中でこんな風に思ったのである。そういえば、これまで「できるかな?」では数多く「恋の力学」でも遊んできた。ただ、そこでは「惹かれ合う恋心の大きさ」だけに注目して、そのカップルの中での役割などは考えたことがなかった。そこで、今回は「やおい」のカップルの「役割・順序」に注目し、その「役割・順序」を評価する演算子を行列・ベクトルの掛け算になぞらえながら考えてみることで、これまでと同じく色々な「恋の形」を眺めてみたいと思う。
 

 まずは、色々な人物(実際の人物であったり、小説などの登場人物であったり)のタイプを二次元空間に配置しよう。「この人は結構攻め役が合いそう」とか「この人は絶対受け役が合うのだー」という適性を

  1. 攻めベクトル
  2. 受けベクトル
の二つのベクトルに分けて、二次元SM平面(本来、攻め = Active、受け = Passiveとでも表記するべきだとは思うのだが、意味合いと少し違うことも承知の上でs,mの方がどうもイメージが湧きやすいので、ここではS.Mを用いる)に配置するわけだ。例えば、サドくんとMくんをそのSM平面に配置してみると、次の図のようになる。
 
SM平面上のサドくんとMくん

 そして、カップリング適性では「A×B、B×Aが全然違う」ということから、外積(ベクトル積)をそのまま流用して、適当な評価関数を作ってみるのが自然だろう。まず、

カップリング適性ベクトル = (攻め度(s)、受け度(m))
と表記して、例えばAさんのカップリング適性ベクトルを(As, Am)と表すことにしてみよう。すると、Aさんが「攻め」でBさんが「受け」のカップリング適性は、この二人の適性ベクトルのベクトル積として表すことができる。つまり、
A×Bのカップリング適性 = ( As * Bm - Am * Bs )
                = Aさんの攻め度 * Bさんの受け度
                  - Aさんの受け度 * Bさんの攻め度
となるわけである。式を眺めれば判るように、Aさんの攻め度が高くて、Bさんの受け度が高ければ、この評価関数は高い値を返す。つまり、「A×Bの順序は正しいのだー」という評価を返す。つまり、「A×B」はなかなか良いカップルだー、と教えてくれる。また、もしAさんの受け度が高くて、Bさんの攻め度が高ければ、低い値を返す。つまり、「A×Bの順序は絶対間違ってるのだー」と評価してくれるのである。なんともありがたいことに(いや別にありがたくはないか…)、この「やおいのカップリング評価演算子」が「福田X小泉」と「小泉X福田」のどちらが自然なのかを教えてくれるのだ。試しに、上のサドくんとMくんであれば、「サドくん×Mくん」= (100,0)×(0,100) = 100*100 - 0*0 = 10000でとっても「良い感じ」でああるが、「Mくん×サドくん」= (0,100)×(100,0) = 0*0 - 100*100 = -10000で「このカップリングは絶対順序が違うー」と判るわけである。

 とりあえず、今回はこの評価演算子を作成するところまでで終えたいと思うが、いずれこの「やおいの評価演算子」を武器にして、いつか(?)「やおいの世界= やおい界」に限らず、色んな数多くの恋の関係を目に見えるようにしてみたいと思う。そして、これまで数多く考えてきた「恋の〜シリーズ」を充実させていきたいと思うのである。

 ところで、今回のカップリング適性評価演算子は基本的に外積そのものである。つまり、この演算が返す値は「二人のベクトルでできる平行四辺形の面積」に等しい。つまりは、「二人のベクトルでどれだけ色んな違うことがきでるか」を示す尺度である。そして、その値は二人のベクトルが直交する時、すなわち二人のベクトルが重ならず独立である時に最大値となる。つまりは、「二人のベクトルが違えば違うほど大きく」なる。例えば、先の「サドくん×Mくん」であれば二人のS,M趣向が完全に正反対であったからとてもお似合いのカップルになったのである。

 これをいわゆる恋の話で考えてみると、とっても独立な二人、趣味が重ならない二人がお似合いだということになる。なるほど、そんなカップルも世の中にはたくさんいることだろう。そんな人達を「外積タイプのカップル」と呼ぶことができると思う。

 一方、趣味が重ならないカップルだけでなくて、世の中にはそれとは正反対の「趣味が重なる良いカップル」も数多くいる。それは「内積タイプのカップル」である。内積はA,Bベクトル間の正射影に比例する量であって、つまりは「二人の重なるベクトルの大きさ」である。それは例えば、相手の中に自分を重ね合わせるような「二人の重なる部分が二人を結びつけるようなカップル」なのである。

 「理系と文系」・「男と女」が対極的なものでも、相反するものでもないのと同じく、「外積カップルと内積カップル」も別に二つに分けられるようなものではないだろう。「外積タイプの恋」も「内積タイプの恋」が混じり合って、それぞれに良いところもあれば、危ういところもあって、などと想像してみるのも面白いに違いない。そして、さらにはもしかしたらベクトル空間で萌えることができるようになったりするかもしれない。
 

 そういえば、ふと考えてみると以前「恋の形を見た人は」で最後に引用した本橋馨子の「兼次おじ様シリーズ」は男性同士の恋の話だった。つまりは「やおい」の話だった。そこで、もう一度そのセリフを最後に飾って眺めてみようと思うのである。
 

「愛はどんな形をしているか知っているか?」
「見た事ないからわかりません。」
「そうだ、誰も見た者はないのに、誰もが当然のように形づけて受け入れている...
もし愛に優劣を決めるものがあればなんだろう?... 異性愛か、同性愛か、そんなものじゃない  …たとえ、どんな形だろうと選ぶのはおまえ自身だよ。」
 

2002-06-02[n年前へ]

可愛いひと、ぱーとつー 

 「行列のできる法律相談所」で今日も磯野貴理子が暴れまくっている。うーん、ゴジラのように暴れまくっている。うーん、やっぱり可愛いぞー。

2002-09-29[n年前へ]

飛行機乗り遅れ 

 行列に並んでる内に飛行機のチェックイン締め切り。中国の行列最悪。北京滞在二日プラス決定。



■Powered by yagm.net