畳み込み演算(convolution)の応用

 畳み込み演算を利用した劣化画像の復元処理  (2022/05/01)

ダイナミックレンジ・カメラは
 ウェルドビジョン合同会社 
https://www.weldvision.jp/.../734/
製品を利用させて頂いています
目次
0、はじめに
1、畳み込み演算の利用
2、畳み込み演算の応用
3、画像のボケに関する考察
4、コンボリューション処理の高速化
5、終わりに

0、はじめに

送られて来たメールに添付された画像が、携帯のカメラで撮影されたらしくピンボケ状態で
画像中の文章を読むのが少し辛く、如何しようかと躊躇していた時に、昔、畳み込み演算で
ボケ画像の復元をしていたことを思い出した。 折角なので、一般化した話を考える。


1、畳み込み演算の利用

最もよく知られている畳み込み演算の例としては、平均値フィルターがあり。 自身の値に
上下左右(と斜めの4方向)を加えた値を5分の1(9分の1)した値を、自身の新しい
値(明るさ)とする処理で以下の様な画素が処理の対象となる。
輪郭検出処理で使われる、ラプラシアンフィルタや、Prewittフィルタでも、畳み込み演算
が利用されているが、何れの場合でも、係数は一定である。

処理対象の画素
 ◎: 自身(対象画素)
 ◯: 周辺の画素
4方向
 
8方向
 
0 1/5 0
1/5 1/5 1/5
0 1/5 0
1/9 1/9 1/9
1/9 1/9 1/9
1/9 1/9 1/9
-1 0  1
-1  0   1
-1 0  1
-1 -1 -1
 0  0  0
1 1 1
4方向の平滑化 8方向の平滑化 Prewitt
フィルタ横方向
Prewitt
フィルタ横方向

0 1 0
 1 -4  1
0 1 0
1 1 1
 1 -8  1
1 1 1


4方向の
ラプラシアンフィルタ
8方向の
ラプラシアンフィルタ


2、畳み込み演算の応用

対象データ数と同じ数の畳み込み演算のカーネルを使用する処理の代表として DFTがあるが、
この場合、畳み込み演算のカーネルの値は、処理するデータ毎に変更される事が特徴である。
この例では、n個のデータから構成されており、カーネルは 360°をnで割った角度を基準
角にした、回転因子群の組合せからなるカーネルを使用した計算を行う。

D0 D1 D2 D3 ........ Dn-1

D0用カーネル:
K00 K01 K02 K03 ........ K0n-1
D1用カーネル:
K10 K11 K12 K13 ........ K1n-1
D2用カーネル:
K20 K21 K22 K23 ........ K2n-1
D3用カーネル:
K30 K31 K32 K33 ........ K3n-1
Dn-1用カーネル:
Kn-10 Kn-11 Kn-12 Kn-13 ........ Kn-1n-1
New Db = Σ Da* Kba;  0<=a<n,0<=b<n;


3、画像のボケに関する考察

原画 (wikipediaより コンボリューションによる
画像復元(deconvolution)
高域成分除去による
変換ノイズの軽減
拡大画像の表示は、各リンクをクリック 
the crater Copernicus: https://en.wikipedia.org/wiki/Copernicus_(lunar_crater) クレーター像

・本来1点に集中すべき明るさが、本来の1点の周りに拡散している。
・ボケの影響は本来の1点より離れるほど、非線形で且つ劇的に減少する。
・注目点以外の各要素に関しても同等の現象か発生しており、現在の注目点で
 観測される値には、周辺から拡散されて来た情報(明るさ)も含まれている。
・観測結果から、拡散方程式は逆算できない。(仮定・推定を行う必要がある)
・周辺の各観測値に対して、本来の観測点から距離を考慮した係数を掛けた値
 が加算された値を、本来の観測点で測定している。

3-1 言い換えれば、
 現在の観測点の値から、周辺の各観測値に距離に依存した係数を掛けた値を減算する事で、
 本来の "ボケを起こしていない状態の特性を持つ値" を算出できる。
     ※ 本事象が主たる要因で、副次的要因の影響は無視できるほど小さい
 ボケの影響範囲をNとした時、NxN のマトリックスを用意し、その中心から遠方に対して
 拡散しいる量を マイナスの係数 としたテーブル(カーネル)を作成した後、畳み込み
 演算する事で自身に混入している周辺からの影響を激減(画像復元)させる事が可能だ。 
                 ※畳み込み演算(コンボリューション:Convolution)
 ボケ情報を除去する方法として、畳み込み演算のカーネル値を決定して行う処理を特に、
 デコンボリューションと表現する様である。デフォーカスによる影響以外にも、光学系の
 回折限界(Diffraction limited)に起因した、画像の鮮明化にも応用が可能だろう。

 ※ この復元処理は、17x17のカーネルを用いた、畳み込み演算を1回行った結果

3-2 復元画像の調整
 適切なカーネル値が決定された、コンボリューション・カーネルを用いて算出された画像
 には、ボケを生じていない画像の特徴を色よく反映しているが、同時に、不要な値を高周
 波成分として含んでいるので、空間フィルター等を用いて、期待される画像の成分以外を
 除去する事が望ましい。 この例では、DFTを用いた除去処理を行っている。
 ※ 高周波成分あり画像 => DFT => filtering => IDFT => 高周波成分軽減画像

4、コンボリューション処理の高速化

着目画素に対して、周辺画素値にカーネル係数 を掛けて、加算する方法はスマートな
計算方法では無い。無駄な計算量を減らして、処理の高速化する事が可能である事を
明記しておく。実際の実装方法に関しての詳細は控えるが、計算時にパイプラインが
乱れ無い様な手順で計算を行える様に、組み替える事で実現できる。
カーネルサイズが小さい時は気にならないかも知れないが、大サイズでは必須の手法


5、終わりに

特段新しい話ではないが、思い出したので書き残しておく事にした。
畳み込み演算を行う事は、ドメインAの要素を異なる特徴空間のドメインBの要素に、変換
するので新たな特徴量抽出に於いて非常に有効な手段である。
流行りの AI 処理(CNN)においても、畳み込み演算が最も重要な機能の一つである事は
疑う余地もないが、手法が変わってもその本質は、変わっていないと思うのだが.....