超解像
最後に、超解像についてです。高解像度画像を低解像度画像に一度変換すると、高周波成分が失われます。この失われた高周波成分は、低解像度画像のみからでは、原理上、復元することは不可能です。しかし、これを何とかして高周波成分を推定するというのが超解像です。
多くの場合は、あらかじめ同じドメインの高解像度画像と低解像度画像の対のデータを大量に用意して、低解像度画像から高解像度画像への変換の規則を学習しておき、新たな低解像画像に対して高解像度画像に変換することで超解像を行います。ここでは、辞書学習を用いて、どのように低解像度画像から高解像度画像への変換を実現するかを説明します。
まず、低解像度画像と高解像度画像の対のデータを用いて、低解像度辞書\(D_l\)と高解像度辞書\(D_h\)の二つを学習します。この二つの辞書がポイントで、低解像度画像のパッチを表現するときと、高解像度画像のパッチを表現するときは同じスパース表現となるように学習します。つまり、低解像度辞書の\(i\)番目と、高解像度辞書の\(i\)番目は対応しているということです。
この学習された低解像度辞書\(D_l\)と高解像度辞書\(D_h\)を用いて、新たな低解像度画像が与えられたときに、高解像度画像を作り出します。処理の流れとしては、以下の図のようになります。
まず、与えられた低解像度画像と低解像度辞書\(D_l\)を用いて、スパースコード\(X\)を求めます。低解像度と高解像度の辞書の順番は対応しているので、実は、低解像度辞書を高解像度辞書に入れ替えることによって、再構成画像を求めると高解像度画像を作り出すことができるのです。
実際、芝生の画像を学習、推論した結果、超解像の結果は以下のようになりました。
違いがわかりづらいかもしれませんが、低解像度画像では高周波成分がなくなっていることにより、若干ぼやけた画像になっています。一方、超解像画像の方では、エッジの成分などがより鮮明になっています。元の高解像度画像と、超解像画像でPSNR, SSIMを比較すると、\(PSNR: 23.141, SSIM: 0.802\)の結果が得られました。
さいごに
本稿では、辞書学習の発展的な応用例として、画像の欠損補間、異常検知、超解像の三つの例を紹介しました。このように、辞書学習のアイデアは、さまざまなところに活用できます。
ここで用いたソースコードについては、GitHubで公開しています。画像の欠損補間や超解像の詳しい理論やアルゴリズムなどに興味がある方は、ぜひ、『スパースモデリング ― l1 / l0 ノルム最小化の基礎理論と画像処理への応用 ―』の本も読んでみてください。
次回は、本連載の最終回ということで、スパースモデリングの最近の学術分野におけるスパースモデリングの発展の様子、最新の手法を紹介する予定ですので、お楽しみに。