考える理由
画像ノイズ解析を目的として、2次元フーリエ変換を用いて周波数解析をすることが多い。かねがね、このやり方について疑問を感じていたので少し考えてみたい。
その疑問とは次のようなことである。
- 通常の2D-FTでは、入力データ全領域での周波数解析を行う。従って、単発のパルスのようなノイズはバックグラウンドに埋もれてしまい、結果にはなかなか出てこない。
- 同じ理由で、2D-FTでは位置と周波数解析を同時に行うことができない。(もちろん、短時間フーリエ関数を使えば、そのような測定は行うことができる。)
- また、ホワイトノイズのようなフラットな周波数特性を持つノイズもバックグラウンドを押し上げるだけの効果しか持たないため、解析をしづらい。
そこで、今回は単純な画像に対して、2D-FTと2D-離散Waveletの比較を行うことで、2D-FTを用いた「画像ノイズ解析」の問題について考える。
2D-FTと2D-Waveletの例
はじめに、2D-FTと2DWaveletの例を挙げる。まずは2D-FTである。
2D-FTの例(左から原画像、2D-FT結果、2D-FT結果の鳥瞰図)![](/dekirukana/wavelet/9.gif) | ![](/dekirukana/wavelet/10.gif) | ![](/dekirukana/wavelet/11.gif) |
左の原画像は45度のスクリーン角のラインである。2DFTの結果にはその角度方向にピークがいくつか並んでいる。それぞれのピークの中央からの距離が周波数を示している。それはX,Y方向いずれについても言える。今回の場合はX,Y方向のスクリーンの周期が等しいため、2DFTの結果でも45度方向になっているのである。
このように、2D-FTの結果というのは周波数(X,Y両方向)と振幅がわかる。ここでのスクリーン角のような周期性を持つものの解析にはフーリエ解析というのは極めて有効である。店で見かけるインクジェットプリンターもヘッドの移動による周期ムラが激しいが、このようなムラに対してフーリエ変換を用いた周波数解析を行うのは正当であり、有効だろう。
それでは、同じ画像に2D-Waveletをかけてみる。2D-Waveletの結果は位置と周波数強度分布情報(ホントは違うのだが)が両方出てくる。位置情報が2次元で周波数強度分布情報が1次元であるから、合わせて3次元である。そのため、表示に一工夫いる。
第一段階として高周波成分から調べてみる。すぐにこの結果の意味がわかるだろうか?
2D-Wavelet例(左が原画像、右が一段階Waveletをかけた結果)![](/dekirukana/wavelet/9.gif) | ![](/dekirukana/wavelet/12.gif) |
かなり判りづらい。この右の結果は4つの領域にわかれているが、以下の表のような意味を表している。また、いずれも灰色の部分は強度が弱く、白と黒が強度が強いことを示している。
低周波成分が原画像と同じようであるのがわかると思う。これは2DFTと違い、Waveletでは位置情報もそのまま保持されているからである。次に、この低周波成分に対して、もう一段Waveletをかけるとこうなる。
![](/dekirukana/wavelet/14.gif)
右上から左下への対角線上のが周波数成分を示し、これで周波数成分にして3分解できたことになる。右上が一番高周波成分。その左下が次の高周波成分。右下が低周波成分である。
もう何分割かしてみる
![](/dekirukana/wavelet/15.gif)
このようにして、画像内での位置と周波数成分が両方ともわかる。
なお、フーリエ変換では基底関数としてSinが用いられるが、Wavelet変換では基底関数としていろいろな関数を使うことができる。今回はDaubechiesの4次のものを用いている。下がその形である。
Daubechiesの4次のフィルター![](/dekirukana/wavelet/16.gif) |
ドットのノイズを解析してみる
それでは、今回の本題に入る。以下が原画像である。左が「2つの大きなドットからなる」画像であり、右がそれにノイズの加わった「ノイズ」画像である。ここでノイズはホワイトノイズを加えているつもりである。ドットは周期性を持つデータだが、ノイズ自体は周期性を持たない所がミソである。また、
ここで言う「ノイズ」とは現実の現象とは何ら関係がない。単なる例えである。
ドット画像(左が原画像、右がノイズを加えた画像)![](/dekirukana/wavelet/5.gif) | ![](/dekirukana/wavelet/1.gif) |
まず、この2つの画像に対して、それぞれ2D-FTをかける。
2次元離散フーリエ変換を行った結果![](/dekirukana/wavelet/6.gif) | ![](/dekirukana/wavelet/2.gif) |
このグラフではXY軸とも-πからπまでの領域で示している。中央からの距離が周波数を示しており、明るいほどその周波数帯の振幅が大きいことを示している。つまり、任意の周波数帯の強度がわかる。
右のノイズの加わった画像の2DFTの結果では、広い周波数領域で強度が上がっている。しかし、下の鳥瞰図で示した(私は立体が好きなのだ)方でもわかると思うが、バックグラウンドが持ち上がっているだけである。いずれにせよ、あまり左右の間で違いはない。今回のような64x64の画像ではなく、もっと大きい画像ではその違いははより識別不能になる。
2次元離散フーリエ変換の結果を鳥瞰図で示したもの![](/dekirukana/wavelet/7.gif) | ![](/dekirukana/wavelet/3.gif) |
さて、次に2D-Waveletで同じように計算をしてみる。下が計算結果である。どうだろうか、ノイズ(位置も周波数も)が一目で判るようには思えないだろうか?
2D-Waveletによる解析結果(左がノイズ無し、右がノイズ有り)![](/dekirukana/wavelet/8.gif) | ![](/dekirukana/wavelet/4.gif) |
今回は、自分の頭を整理するために、ただ2D-wavelet変換をかけてみた。まだまだ話しは続くのである。