画像のノイズリダクション

このチュートリアルは、デモアプリ「画像のノイズリダクション」でアニーリングマシンが行っている処理を解説したものです。

概要

ノイズがのっている白黒の画像から元の画像を推定する問題です。

一般的に、以下の条件が成り立つと仮定してアニーリングマシンに載せられる形で表現します。

  • (a) (少量のノイズであれば)入力画像と出力画像の画素値は概ね同じ
  • (b) ノイズリダクション後の出力画像は、隣り合う画素値が同じことが多い
ノイズがのった画像(入力)
ノイズを減少させた画像(出力)

コスト関数の作成

この問題では画素の色が黒または白の2値なので、これをCMOSアニーリングマシンのスピンの値-1 or +1に対応させます。
(a)より、ここで入力画像のi番目の画素の値を ```y_i``` とし、ノイズリダクション後の画像のi番目の画素の値を ```sigma_i``` とします。
入力画像と出力画像の画素値が概ね同じとするには、以下のようなコスト関数を使います。

``` -\sum_{i\inV} y_i\sigma_i ```

ここで```V```は画素の集合を表します。入力画像と出力画像でi番目の画素値が同じとき ```y_isigma_i``` は+1となり、画素値が異なるとき-1となるので、画素値が同じ際にコストが小さくなるように ```-``` の符号をつけたものをすべての画素に対して足し合わせる形です。

ノイズリダクション後の出力画像は、隣り合う画素値が同じことが多い、という条件も同様に考えると以下のようなコスト関数となります。

``` -\sum_{(i,j)\inE} \sigma_i\sigma_j ```

ここで```E```は隣接画素ペアの集合を表します。これらを足し合わせると、以下の最終的なコスト関数が得られます。

``` -\sum_{(i,j)\inE} \sigma_i\sigma_j-\eta\sum_{i\inV} y_i\sigma_i ```

二つ目の項の前に ```\eta(>0)``` というパラメータを導入しています。これは2つの条件の強さを調整するためのものです。
```\eta``` が0の場合、コスト関数は第1項だけの形になります。この場合、出力画像の画素値がすべて同じときにコスト最小となります。逆に、```\eta``` を非常に大きくすると、実質的に第2項だけの形になるので、入力画像と出力画像がまったく同じ場合にコスト最小となります。
本サイトのデモでは ```\eta=2 or 3``` としています。