Convolution
4033 ワード
Image Filtering
outputimageとinputimageは同じサイズです(画像サイズは変わりません).
画像フィルタリングには線形フィルタリングと非線形フィルタリングがある.
Linear filtering
線形フィルタリングは、入力データを周囲の画素を用いて適切な重み付け和を行うだけである.ボリュームは線形フィルタの1つです.
その後、学習中に線形変換と非線形変換をそれぞれ1回行い、このとき線形変換を用いて畳み込まれたのは
CNN
である.Point Spread Function (PSF)
PSF
は、画像フィルタリングを行うための線形関数である.ソース画像上の点がターゲット画像にどのように移動するかを示します...これが移動点の位置や大きさを表していると考えれば簡単です.
psf
の値が0.7
である場合、target imageの1.0
の値は0.7
であるべきである.(source image value) * 0.7
が実行されたからです.psf
のサイズがソース画像よりも小さくても、同様の方法を採用することができる.psf
の右上隅に0.7
があるため、target画像では、ソース画像の1
が0.7
となり、右上に移動する.ソース画像に0
以外の値の画素が複数ある場合、psf
は各画素から独立する.両方の1
はpsf
により0.7
に変換され、右上に移動する.ビットの場合、2つの画素は独立してpsf
を適用する.psf
に複数の値がある場合は、対応する値を適用すればよい.weight-sumpなので、
(source image value) * 0.3
の値は真ん中に残り、(source image value) * 0.7
の値は右上隅に移動します.名前の通り、中間pixel値の一部が右上に拡散します.
ソース画像において、
0
以外の値の画素が複数ある場合、psf
は各画素に独立して適用され、その結果が加算される.psf
を使用すると画素の内容が拡散するので、拡散の結果を一つ一つ求めるだけでよい.結果は以下の通りです.
Convolution
sourceイメージを
H
、targetイメージをG
psf
と呼ぶと、ボリューム式は次のようになります.G = H * F (* 는 convolution operator)
式はかなり複雑です.しかし、ボリュームは相互相関によって表すことができる.フィルタ
F
を上下左右に反転させ、F
のすべての画素を相互相関させ、結果としてボリューム化する.Cross-Correlation
ボリュームのうち
H
が-
に変換された差のみである.相互相関は重み付け和であるため,相互相関を用いて周囲の値を増やすだけで畳み込むことができる.
における同一点にフィルタを適用した場合、畳み込みのフィルタ値は変わらず、互いに相関する上下左右が逆になる.
したがって,フィルタを上下左右に反転させて相互相関させることで,ボリュームと同じ結果が得られる!
入力画像とフィルタ画像が似ているほど、ボリュームの結果値が大きくなります.
Box Filter
boxフィルタでノイズを除去する場合を考えてみましょう.
画像からノイズを除去したい場合は、averageを使用して効果を見ることができますが、最適ではありません.
画像が1つしかない場合は、box filterと呼ばれる周囲のlocaldataの平均値を1つの位置の画素から取得できます.
最終的には重み付け和であり、box filterは平均値をとる重み付け和である.
カセットフィルタは対称であり、フィルタが対称である場合、ボリュームと関連する結果値は同じである.
boxフィルタを適用する方法は以下の通りである.box filterは
+
なので、適用する画素を中心に(3x3)
の領域を捉え、filterのまま適用すればよい.(3x3)
~H
の領域の各画素(3x3)
、A
、...B
の場合、本来はI
を実行する慣例ですが、どうせbox filterは平均を求めるので、A*(1/9) + B*(1/9) + ... + I*(1/9)
領域のすべての値を加えて、得られる平均値が出力です.上図
(3x3)
は結果値です.と同様の方法で
(90+90+90) / 9 = 30
に入る値は?
であり、したがって(90*5) / 9
である.の同じ値は
50
なので、?
です.boxfilterを適用すると、次のようになります.ノイズ除去のため、周囲画素の平均値をとり、よりスムーズな出力を得た.
しかし平滑化の結果,曖昧な結果が得られた.
filterのsumが
(90*9) / 9
であるのは、filterを適用した後の残りのデータ量を一定に保つためである.filterの合計は
90
であると仮定する.filterを適用すると,最初にその領域に存在したデータ量の1/10しか残っていない.したがって、フィルタの総和は、元のソース画像の領域内のデータ量と出力中のデータ量とを同じにするために常に1に保たれる.このほか、画像の特徴などを抽出する目的でボリュームを用いることもできる.
Convolution Properties
畳み込みは演算子なので、以下の性質が適用されます.
1
0.1
a * b = b * a
a * (b * c) = (a * b) * c
a * (b + c) = (a * b) + (a * c)
Padding
画像の境界にボリュームが定義されていません.ソース画像では、境界では画素の数が不足するため、filter領域のような画素領域が必要である.
によれば、いっそ入力画像を大きくして畳み込む.このように画像を増やすために挿入される値をpaddingと呼ぶ.
paddingにはいくつかの方法があります.
ka * b = a * kb = k(a * b)
、Impulse e = [0, 0, 1, 0, 0], a * e = a
、0
、1
を充填してもよいし、元の画像を使用してその値をコピーまたは変換してもよい.その中で最もよく用いられるのは
0.5
に充填されたzero paddingである.Reference
この問題について(Convolution), 我々は、より多くの情報をここで見つけました https://velog.io/@coral2cola/Convolutionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol