hirax.net::ボケたエアーブラシで細かな字がかけるか?::(1999.01.14)

ボケたエアーブラシで細かな字がかけるか?  share on Tumblr 

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

「宇宙人はどこにいる? - 画像復元を勉強してみたい その1-」ではボケた画像からオリジナルのシャープな画像を復元してみた。前回の話を例えて言うと、

  1. 太郎君が細かい字をエアーブラシで書いた。
  2. ボケボケのエアーブラシを使ったから、ボケボケの画になった。
  3. そのボケボケの画から、太郎君が何を画こうとしたか、考える。

ということであった。
 今回、やってみたいのは以下のようなことである。

  1. 太郎君は太いエアーブラシで字を書きたい。
  2. しかも細かな字を書きたい。
  3. そんなことができるか?

 直感的には、ボケボケのエアーブラシで細かい字など書けないように思う。その直感が正しいか調べてみたい。考え方は前回と同じく、

 出力画像から、ボケ分布でデコンボリューション処理により、オリジナルの画像を計算する。

というやり方である。前回と違うのは出力画像がシャープな画像(先の例で言うと、細かな字)である、という所である。道具は今回も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}]

これが得たい出力画像である
画像:1

 この細かな字を太いボケボケなエアーブラシで字を書けるか考える。


 まずは、エアーブラシのボケボケ度をつくる。

(*正規分布=ガウス分布によるぼけパラメータを作成する*)
δ=10;
μ=32;

ListPlot3D[NormalBoke,ColorFunction ->Hue,Mesh->False,PlotRange->All]

ガウス分布のボケ(例で言うと、中央にエアーブラシを吹いた場合に相当する)
画像:2

 ボケボケの太いエアーブラシである。

 デコンボリューション用にガウス分布の場所をずらす。
NormalBoke = RotateRight[NormalBoke,32];
NormalBoke = Transpose[ RotateRight[Transpose[NormalBoke],32] ]; (*上へShift*)
ListPlot3D[NormalBoke,ColorFunction ->Hue,Mesh->False,PlotRange->All]

場所をずらしたボケ
画像:3

 出力画像をエアーブラシのボケボケ度でデコンボリューションする。そうすれば、太郎君がどのように画を画けば良いかがわかる。はたして答えはでるのだろうか?

 計算してみると答えが出てしまう。
SharpImage = Re[InverseFourier[ Fourier[ImageData] / Fourier[NormalBoke]] ];
ListDensityPlot[SharpImage/4,Mesh->False,PlotRange->All]

これが計算されたオリジナル画像
画像:4

 まず、本当にこれ(画像:4)にそってエアーブラシで画を画くと出力画像(画像:1)が再現できるか確認してみる。そこで画像:4と画像:3でコンボリューションしてやる。太郎君に実際にエアーブラシを使って画を画いてもらうわけである。
 それでは、画いてみる。
ResImage = InverseFourier[Fourier[SharpImage] Fourier[NormalBoke]];
ListDensityPlot[Re[ResImage],Mesh->False,PlotRange->All]
出力画像を確認したもの
画像:5

 画像:1が再現できた。つまり、太いボケボケのエアーブラシで細かい字が書けてしまうわけである。直感的には納得しがたい結果である(私だけかもしれないが)。

 これには実はタネがある。画像:4を鳥瞰図でみると判るが、画像4は正負の値が高周波で並んでいる。
ListPlot3D[SharpImage/4,ColorFunction ->Hue,Mesh->False,PlotRange->All]

計算されたオリジナル画像(画像:4の鳥瞰図表示)
画像:6

 太郎君が使ったエアーブラシは太いボケボケのエアーブラシではあるが、吹き量に正負が両方ともあったのである。そのようなエアーブラシを使うと太郎君の腕(高テクニシャン)ならば細かな字が書けるわけだ。どんなパターンもかけるかはどうかまでは知らないが、少なくとも"hirax"という字は画ける。

 前回のような光学系の例でも、これが何に対応しているかはすぐわかるが、一番分かりやすいのは電荷と電位の例だと思う。
 電荷が周囲につくる電位分布はボケボケの分布である。ところが、金属などを適当に配置して、その金属に電位を印加してやると、鋭い電位分布をつくることができる。つまり、ボケボケの分布から鋭い電位分布を作成してやることができる。こちらなら直感的にもすぐ納得できるだろう。その際には、金属表面に電荷が鋭く集中するのも、よく知っている話だ。

 実感用に電場計算を行った例を以下に示しておく。使った道具はCUPSの電場計算プログラムである。CUPSは教育用のプログラム集である。
 一応、2次元膜の例で、金属を配置し、適当に電位を印加し、電位・電荷量計算を行ってみる。

電位分布を表示したもの

もちろん、金属内部では均一な電位である。それを条件に解いているのだから当たり前だが。
 その時の電荷分布を下に示す。金属表面に鋭い電荷分布が生じているのがわかるだろう。
 ここでは大雑把な金属の配置にしてしまったが、格子状の金属配置にして、互い違いに違う極性の電位を印加すれば(細かい字に相当する)、正負の極性の電荷分布が鋭く現れるのは当たり前の話だ。

電荷量分布を表示したもの

 電位、電場、電荷量を一緒に示しておく。

電位(左上)、電場の大きさ(左下)、電荷量(右上)、電場(右下)

 今回の話は、単なる計算上の話である。それに、何かどこかで仮定を間違っているような気もするんだよなぁ。信用度アルファ版だからまぁいいか...

この記事と関係がある他の記事