PRML §8.3.3 例:画像のノイズ除去
【次回復々習レーン(2013/7/21開催予定)の発表資料準備】
反復条件付きモード(ICM)での画像復元
- 左上から順番に走査しながら、反転するとエネルギーを減らせるピクセルを反転
- 走査前後のエネルギー差分がεを下回ったら(あるいは10回やったら)終了
MacBook Air (1.8 GHz Intel Core i7) でノイズ除去にかかった時間:
noise | iter | sec |
---|---|---|
5% | 5 | 0.850 |
10% | 6 | 1.037 |
15% | 6 | 1.029 |
20% | 8 | 1.374 |
25% | 10 | 1.705 |
30% | 8 | 1.373 |
320x180の画像をPythonで1秒前後で処理できています。
25%で走査数が多いのは気にしない(ノイズ生成パターンをいくつも作ったら吸収されると思う)
オリジナル画像(白黒2値)
ノイズ(白黒反転)5%
復元率:99.5781%
(文字部分復元率: 97.0245%, 白地部分ノイズ除去率: 97.3264%)
ノイズ(白黒反転)10%
復元率:99.1285%
(文字部分復元率: 94.3466%, 白地部分ノイズ除去率: 96.3142%)
ノイズ(白黒反転)15%
復元率:98.5191%
(文字部分復元率: 90.4042%, 白地部分ノイズ除去率: 95.5107%)
ノイズ(白黒反転)20%
復元率:97.3351%
(文字部分復元率: 86.5609%, 白地部分ノイズ除去率: 92.3063%)
ノイズ(白黒反転)25%
復元率:95.0521%
(文字部分復元率: 80.0645%, 白地部分ノイズ除去率: 87.5887%)
ノイズ(白黒反転)30%
復元率:91.5521%
(文字部分復元率: 71.6092%, 白地部分ノイズ除去率: 80.7525%)
グラフカットアルゴリズムを用いたもの
早大の石川 博教授によるチュートリアル「グラフカット」辺りを見ながら
具体的にどういう関数にしたら良いのか分からなくて、capacityを適当に設定しているのでちゃんと最適解が出ていない可能性が大ですが、とりあえずICM相当の精度は出てます。しかしめちゃ遅です。(320x180の画像で、ローカルのvirtualbox上で50〜55秒)
粒々で残ることがないのが特徴ですね。
ノイズ(白黒反転)5%
復元率:99.5243%
(文字部分復元率: 96.9502%, 白地部分ノイズ除去率: 96.8437%)
ノイズ(白黒反転)10%
復元率:99.2517%
(文字部分復元率: 95.7352%, 白地部分ノイズ除去率: 96.7051%)
ノイズ(白黒反転)15%
復元率:98.5347%
(文字部分復元率: 88.2222%, 白地部分ノイズ除去率: 96.9946%)
ノイズ(白黒反転)20%
復元率:97.6649%
(文字部分復元率: 80.8579%, 白地部分ノイズ除去率: 96.4842%)
ノイズ(白黒反転)25%
復元率:96.6128%
(文字部分復元率: 69.8983%, 白地部分ノイズ除去率: 96.2736%)
ノイズ(白黒反転)30%
復元率:95.2222%
(文字部分復元率: 54.2772%, 白地部分ノイズ除去率: 95.9325%)
グラフカット版の実装
要graph-tool
MacBook Airにgraph-toolを入れるのに挫折したのでvirtualboxにUbuntuを入れて実行しています。(→詳しくはこちら)
*1:$ easy_install PIL