画像の再構成で、前回、ガウシアンフィルタとなる行列[math]H[/math]を設定し、[math]d=Hs[/math]によってたたみこみを計算したと思います。今回は画像が繰り返しになっていると仮定して、ガウシアンフィルタとなる行列を自動的に設置するところからスタートします。
もう一度復習をしてみましょう。
もう一度復習をしてみましょう。
ガウシアンフィルタとのたたみこみにより Y_n が計算されます。たとえば Y_4 を計算するときには、
となります。
これはあくまで少ない次元の話でしたが、一般的な画像に関しても同じような計算をすることで、ガウシアンフィルタを設定することができます。
今回はちょうどよいサイズ(計算時間と見栄えとの兼ね合い)を考えて、 64 x 64の以下の画像について考えてみましょう。以下の実行にはpythonを用いてOpenCVを使います。
これはあくまで少ない次元の話でしたが、一般的な画像に関しても同じような計算をすることで、ガウシアンフィルタを設定することができます。
今回はちょうどよいサイズ(計算時間と見栄えとの兼ね合い)を考えて、 64 x 64の以下の画像について考えてみましょう。以下の実行にはpythonを用いてOpenCVを使います。
cv2.imread()で画像を呼び出し、for文によって画像を縦ベクトル s にします。画像のファイル名を"g01-1.tif"としています。
ためしに上のコードを実行すると画像が出力されると思います。これは縦ベクトルを二次元の画像の配列に戻しているのです。
これに、ガウシアンフィルタとなる演算をたたみこみます。以下のプログラムで 4096 x 4096 (64 x 64=4096)なる行列Hを生成しています。なお、画像の外側の影響は0にして考えています。
これに、ガウシアンフィルタとなる演算をたたみこみます。以下のプログラムで 4096 x 4096 (64 x 64=4096)なる行列Hを生成しています。なお、画像の外側の影響は0にして考えています。
このようにして設定できます。
上のようにしてガウシアンフィルタのたたみこみが計算され、d_として以下の画像を得ます。
あまり画像が変わっていないように思えますが、拡大してみてみると
あまり画像が変わっていないように思えますが、拡大してみてみると
ばっちり平滑化されていることがわかると思います。
では、これをもとに戻してみましょう。行列Hをかけられて平滑化されたので、これの逆行列をかければもとに戻るはずです。
では、これをもとに戻してみましょう。行列Hをかけられて平滑化されたので、これの逆行列をかければもとに戻るはずです。
大丈夫ですね!しっかり元に戻ることが確認できると思います。
これにノイズをかけて同じ処理をしてみます。やはり元には戻りません。
これにノイズをかけて同じ処理をしてみます。やはり元には戻りません。
ノイズをのせたあとの再構成後
理論式をみてみましょう。
問題設定の際はnはdに比べて小さかったのに対し、H^(-1)nは非常におおきな値になっているという可能性があるわけです。
前回の内容で全ての原因は行列Hにあるといいました。この行列の性質を司る固有値について調べてみましょう。
前回の内容で全ての原因は行列Hにあるといいました。この行列の性質を司る固有値について調べてみましょう。
最大固有値に対し、最小固有値はおよそ 10^(-7) 倍になっています。
実は最小固有値と最大固有値の比の分だけノイズが拡大してしまっていたのです。これが元に戻らない理由でした。厳密にはHの特異値分解という方法で説明することが可能です。
どうでしたか?このような数学的なアプローチによって画像処理の不思議を体験できるのは非常に魅力的だと思います。
このような研究寄りの内容もこれから更新していきたいと思います!
実は最小固有値と最大固有値の比の分だけノイズが拡大してしまっていたのです。これが元に戻らない理由でした。厳密にはHの特異値分解という方法で説明することが可能です。
どうでしたか?このような数学的なアプローチによって画像処理の不思議を体験できるのは非常に魅力的だと思います。
このような研究寄りの内容もこれから更新していきたいと思います!