2019年2月25日 更新

スパースモデリングに基づく画像の再構成 Part2. Total Variation最小化(Split Bregman)に基づく画像再構成

この記事では,Total Variation 正則化の最小化に関する実装を行い,ノイズを含む画像がどのように再構成されるのか,確かめてみます. なお,Total Variation はスパースモデリングで主に使われている技術です.

424 view お気に入り 0

この記事では,スパースモデリングの一つ,Total Variationを正則化項に加えた場合の画像の再構成方法に関して説明を行います.

Total Variation の正則化理論

TV denoising is considered to be one of the best denoising models, but also one of the hardest to compute.
via TV正則化に関する記述. ftp://ftp.math.ucla.edu/pub/camreport/cam08-29.pdf

Total Variation とは,例えば画像を復元したいと思ったとき,画像の微分のL1ノルムの最小化を行う方法です. L1ノルムの最小化はスパースな解を誘発するため,微分のL1をとることで, 画像の輝度値の変化がスパースな解を得ることが出来ます. これを確かめるため,ノイズの乗った画像に対して復元を行います.

結果だけ述べると,左のような画像から右のような画像を復元することが可能です.

 (5419)

Total Variation による方法では,微分のL1ノルムの最小化の正則化項を用います. このときの評価関数は

\begin{align} F = |\nabla_x u| + |\nabla_y u| + \frac{\lambda}{2}|u - I|^2 \end{align}

です.第一項目は画像の画素値$I$と,再構成画像$u$との差分,第二項は$\nabla_x$,$\nabla_y$でピクセルごとの差分です.

上の項は,微分のスパースを仮定しているため,画素値の変化がより小さいような解が得られることになります.具体的に図に表現するとこのようになります.

 (5337)

この記事では,上の最適化問題をどのように解くのか解説をし,pythonを用いて実装いたします.

最適化方法: Split Bregman

上の問題は$u$の微分に関するL1ノルムの項が含まれているため,非線形な方程式です.

そのため,反復計算を行う必要があります.

まずはじめに,上の最適化問題を以下のように同値変形します.

\begin{align} F = |d_x| + |d_y| + \frac{\lambda}{2}|u - I|^2 \end{align} \begin{align} {\rm s.t.} \ \ d_x = \nabla_x u, \ \ d_y = \nabla_y u \end{align}

ここで,制約条件を少し弱め,(To weakly enforce the constraints in this formulation と原文には書いてある),最適化問題を以下のように変更します.

\begin{align} \underset{u,d_x,d_y}{\rm minimize}\ \ |d_x| + |d_y| + \frac{\lambda}{2}|u - I|^2 + \frac{\mu}{2}(|\nabla_x u - d_x|^2 + |\nabla_y u - d_y|^2) \end{align}

そして,これに対して,Bregman Iterationというのを用います.これは,上の最適化問題を更新のタイムステップ$k$を用いて \begin{align} \underset{u,d_x,d_y}{\rm minimize}\ \ |d_x| + |d_y| + \frac{\lambda}{2}|u - I|^2 + \frac{\mu}{2}(|\nabla_x u - d_x - b_x^k|^2 + |\nabla_y u - d_y - b_y^k|^2) \end{align} とし,最適化問題として \begin{align} u^{k+1} = \underset{u}{\rm minimize}\ \ |d_x| + |d_y| + \frac{\lambda}{2}|u - I|^2 + \frac{\mu}{2}(|\nabla_x u - d_x - b_x^k|^2 + |\nabla_y u - d_y - b_y^k|^2) \end{align} とすることで,$u$を更新するものです.

このように分割することによって,2次式の最適化と絶対値を含む問題の最適化に帰着します. 2次式の場合は最適化は簡単に求めることができますし,絶対値を含む問題に対しては解析的な解が求まっています

詳しくは,L1ノルム最適化に関して書かれた以下の記事をご覧ください.

実装

それではpython で実装していきます.

パッケージのインポート

import numpy as np
import cv2
import matplotlib.pyplot as plt
import random
パッケージのインポート.py
36 件

関連する記事 こんな記事も人気です♪

画像で脈拍計測 Part1

画像で脈拍計測 Part1

PCのWebカメラを用いた脈拍計測の準備として,顔画像のRGBの取得までを行いました
栢菅 宏規 | 106 view
量子アニーリングを駆使して数独を解いてみた

量子アニーリングを駆使して数独を解いてみた

先日,量子アニーリングの勉強会に参加して来ました.そのアウトプットとして,今回,数独ソルバーを作ってみます.
井上 大輝 | 250 view
スパースモデリングに基づく画像の再構成 Part1. L1ノルム最小化に基づく画像再構成の実装

スパースモデリングに基づく画像の再構成 Part1. L1ノルム最小化に基づく画像再構成の実装

この記事では,L1ノルム正則化の最小化の実装を行い,ノイズを含む画像がどのように再構成されるのか,確かめてみます. なお,Total Variation はスパースモデリングで主に使われている技術です.
三好 裕之 | 636 view
Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

Morphology (モルフォロジー) 変換の実装 ~ Python + OpenCV ~

画像処理の一つ,モルフォロジー変換をPython と OpenCVのライブラリを用いて実装し,それを2値画像に対して適用します.
三好 裕之 | 577 view
脈拍でストレスを検出する

脈拍でストレスを検出する

前回計測した脈拍を利用して,自分のストレス状態を検出してみました.簡単なアルゴリズムで実装でき,脈拍以外に心電図なのでも同様な検出系を作ることができます
栢菅 宏規 | 355 view

この記事のキュレーター

三好 裕之 三好 裕之