あらいさん日記(仮)

あらい日記

活動の記録

スパース最適化によるボケ画像の復元

概要

カメラの焦点ボケや手ブレなどによって劣化した画像から,劣化の過程に基づいて元の画像を復元することができます.このような復元する処理のことをデコンボリューション(deconvolution)とよびます.画像が有するスパース性を先験情報として利用した,スパース最適化によって劣化した画像の復元をやってみました.

画像の劣化モデル

画素数N(=width \times height)とする劣化画像を\boldsymbol{b} \in \mathbb{R}^{N}とするとき,劣化の過程を次式で表すことができます.

\boldsymbol{b} = \boldsymbol{A} \boldsymbol{x} +\boldsymbol{n}

ここで,\boldsymbol{A} \in \mathbb{R}^{N \times N}は劣化の過程を表す行列,\boldsymbol{x} \in \mathbb{R}^{N}は元の画像,\boldsymbol{n} \in \mathbb{R}^{N}はノイズです.

f:id:raccoon15:20190107041043p:plain

画像の劣化過程

画像の復元

画像復元で有名な手法はウィーナフィルタ(Wienar filter)やLucy-Richardsonアルゴリズムがあります.Lucy-Richardsonアルゴリズムについては福嶋先生の解説記事がわかりやすいです.

qiita.com

スパース最適化による復元

一般的に自然な画像では,近傍の画素は同じような値をとります.そのため,微分フィルタなどで画像の勾配を計算すると,多くの領域でゼロに近い値になり,エッジが強い箇所のみが大きな値(非ゼロ)になります.このように,多くの要素がゼロでごく一部が非ゼロで構成されているデータをスパース性が有るといいます.

画像が有するスパース性を最適化問題に取り入れるために,全変動TV(Total Variation)がよく使われています.全変動は勾配の値の合計値を表しています.

TV(\boldsymbol{x}) = \underset{i, j}{\sum} \sqrt{|x_{i+1, j} - x_{i, j}|^{2} +|x_{i, j+1} - x_{i, j}|^{2}}

全変動を取り入れた,画像復元は次式のように定式化されます.

\underset{\boldsymbol{x}}{\min} \  \cfrac{1}{2}\|\boldsymbol{A} \boldsymbol{x} - \boldsymbol{b}\|^{2}_{2} + \lambda TV(\boldsymbol{x})

\text{subject to} \ \boldsymbol{x} \in [0, 255]^{N}

\lambdaは全変動の重みを決定する定数です.この最適化問題を解くことで,元の画像\boldsymbol{x}を推定します.

復元結果

劣化画像は,元の画像に対してガウシアンフィルタでぼかし,ノイズを加えて作りました.ノイズは正規分布に従い,平均を0,標準偏差を5としました.

最適化問題を解くために,凸最適化モデリングツールであるCVXPYを使いました.

\lambda = 0.4としたときの結果を下の図に示します.左上は元画像,右上は劣化画像,左下はLucy-Richardsonアルゴリズムによる復元結果,右下はスパース最適化による復元結果です.

f:id:raccoon15:20190108170359p:plain
f:id:raccoon15:20190108170405p:plain
f:id:raccoon15:20190108170414p:plain
f:id:raccoon15:20190108170410p:plain
(左上)元画像,(右上)劣化画像,(左下)LRアルゴリズムによる復元結果,(右下)スパース最適化による復元結果

LRアルゴリズムではボケは取り除かれていますが,ノイズが増幅されています.一方,スパース最適化ではボケを取りつつ,ノイズは抑えられています.ピーク信号対雑音比(PSNR)は劣化画像が26.9 dBであったのに対して,LRアルゴリズムによる復元結果は29.2 dB,スパース最適化による復元結果は33.2 dBとなりました.

次に,\lambda を0.05,0.4,5.0と変化させたときの,復元結果の違いを下の図に示します.

f:id:raccoon15:20190108180414p:plain
f:id:raccoon15:20190108170410p:plain
f:id:raccoon15:20190108180425p:plain
\lambdaの変化と復元結果.(左)\lambda=0.05,(中)\lambda=0.4,(右)\lambda=5.0

図より,\lambda が小さいとノイズが強調され,大きくなるとノイズが抑えられています.しかし,\lambda が大きいと細かいディテールが失われ,全体的にのっぺりとした絵になっています.

プログラム

CVXPYで画像の復元をするプログラムをGitHubに置いておきます. 

github.com